[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

# 45. celine

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 45.1 Introduction to celine

シスターCelineの方法のMaxima実装。 Barton Willisがこのコードを書きました。 Creative Commons CC0 licenseの下で公開されています。

Celineの方法は、Marko Petkovsek, Herbert S. Wilf, Doron Zeilberger著 書籍"A=B"の4.1-4.4節に記述があります。 この本は http://www.math.rutgers.edu/~zeilberg/AeqB.pdfで閲覧可能です。

f = F(n,k)とします。 関数celineはFの漸化式の集合を以下の形式で返します。

p_0(n) * fff(n,k) + p_1(n) * fff(n+1,k) + ... + p_p(n) * fff(n+p,k+q),

ここでp_0から p_pは多項式です。 もしMaximaが sum(sum(a(i,j) * F(n+i,k+j),i,0,p),j,0,q) / F(n,k)が nと kの有理関数だとわからなければ、 celineは空集合を返します。 fがパラメータ(nや k以外の変数)を含む時、 celineはこれらのパラメータについて仮定を作るかもしれません。 'proviso'のキーとともに 'put'を使うと、 Maximaは入力ラベルにこれらの仮定を保存します。

この関数を使うには、最初にパッケージ integer_sequence, opsubst, to_poly_solveをロードします。

例:

    (%i1) load("integer_sequence")$
    (%i2) load("opsubst")$
    (%i3) load("to_poly_solve")$
    (%i4) load("celine")$
    (%i5) celine(n!,n,k,1,0);
    (%o5)       {fff(n + 1, k) - n fff(n, k) - fff(n, k)}

結果が正しいことの確認:

    (%i1) load("integer_sequence")$
    (%i2) load("opsubst")$
    (%i3) load("to_poly_solve")$
    (%i4) load("celine")$
    (%i5) g1:{fff(n+1,k)-n*fff(n,k)-fff(n,k)};
    (%o5)       {fff(n + 1, k) - n fff(n, k) - fff(n, k)}
    (%i6) ratsimp(minfactorial(first(g1))),fff(n,k) := n!;
    (%o6)                           0

パラメータ付き例(例の結果が正しいというテストを含む):

    (%i1) load("integer_sequence")$
    (%i2) load("opsubst")$
    (%i3) load("to_poly_solve")$
    (%i4) load("celine")$
    (%i5) e : pochhammer(a,k) * pochhammer(-k,n) / (pochhammer(b,k));
                               (a)  (- k)
                                  k      n
    (%o5)                      -----------
                                  (b)
                                     k
    (%i6) recur : celine(e,n,k,2,1);
    (%o6) {fff(n + 2, k + 1) - fff(n + 2, k) - b fff(n + 1, k + 1)
     + n ((- fff(n + 1, k + 1)) + 2 fff(n + 1, k) - a fff(n, k)
     - fff(n, k)) + a (fff(n + 1, k) - fff(n, k)) + 2 fff(n + 1, k)
        2
     - n  fff(n, k)}
    (%i7) /* Test this result for correctness */
    (%i8) first(%), fff(n,k) := ''(e)$
    (%i9) makefact(makegamma(%))$
    (%o9)                           0
    (%i10) minfactorial(factor(minfactorial(factor(%))));

provisoデータが、設定 a = bがより低い次数の漸化式を出力することを示します。 以下の例がそれを示します:

    (%i1) load("integer_sequence")$
    (%i2) load("opsubst")$
    (%i3) load("to_poly_solve")$
    (%i4) load("celine")$
    (%i5) e : pochhammer(a,k) * pochhammer(-k,n) / (pochhammer(b,k));
                               (a)  (- k)
                                  k      n
    (%o5)                      -----------
                                  (b)
                                     k
    (%i6) recur : celine(e,n,k,2,1);
    (%o6) {fff(n + 2, k + 1) - fff(n + 2, k) - b fff(n + 1, k + 1)
     + n ((- fff(n + 1, k + 1)) + 2 fff(n + 1, k) - a fff(n, k)
     - fff(n, k)) + a (fff(n + 1, k) - fff(n, k)) + 2 fff(n + 1, k)
        2
     - n  fff(n, k)}
    (%i7) get('%,'proviso);
    (%o7)                         false
    (%i8) celine(subst(b=a,e),n,k,1,1);
    (%o8) {fff(n + 1, k + 1) - fff(n + 1, k) + n fff(n, k)
                                                         + fff(n, k)}

[ << ] | [ >> ] |  |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

This document was generated by 市川雄二 on October, 5 2017 using texi2html 1.76.