Next: , Previous:   [Contents][Index]

76 solve_rec


76.1 Introduction to solve_rec

solve_recは多項式係数を持つ線形漸化式を解くためのパッケージです。

デモが demo(solve_rec);で利用可能です。

例:

(%i1) load("solve_rec")$
(%i2) solve_rec((n+4)*s[n+2] + s[n+1] - (n+1)*s[n], s[n]);
                                    n
                 %k  (2 n + 3) (- 1)          %k
                   1                            2
(%o2)       s  = -------------------- + ---------------
             n     (n + 1) (n + 2)      (n + 1) (n + 2)

76.2 Functions and Variables for solve_rec

関数: reduce_order (rec, sol, var)

特殊解solが知られている時、 線形漸化式recの次数を減らします。

例:

(%i3) rec: x[n+2] = x[n+1] + x[n]/n;
                                      x
                                       n
(%o3)               x      = x      + --
                     n + 2    n + 1   n
(%i4) solve_rec(rec, x[n]);
WARNING: found some hypergeometrical solutions! 
(%o4)                    x  = %k  n
                          n     1
(%i5) reduce_order(rec, n, x[n]);
(%t5)                    x  = n %z
                          n       n

                           n - 1
                           ====
                           \
(%t6)                %z  =  >     %u
                       n   /        %j
                           ====
                           %j = 0

(%o6)             (- n - 2) %u     - %u
                              n + 1     n
(%i6) solve_rec((n+2)*%u[n+1] + %u[n], %u[n]);
                                     n
                            %k  (- 1)
                              1
(%o6)                 %u  = ----------
                        n    (n + 1)!

だから一般解は以下の通りです。

             n - 1
             ====        j
             \      (- 1)
       %k  n  >    -------- + %k  n
         2   /     (j + 1)!     1
             ====
             j = 0
オプション変数: simplify_products

デフォルト値: true

もしsimplify_productstrueなら、 solve_recは答えの積をを整理しようとします。

以下も参照してください: solve_rec.

関数: simplify_sum (expr)

exprに現れるすべての和を閉形式に整理しようとします。

この関数を初めて使うには、 load("simplify_sum")simplify_sumパッケージをロードしてください。

例:

(%i1) load("simplify_sum")$
(%i2) sum(binomial(n+k,k)/2^k,k,1,n)+sum(binomial(2*n,2*k),k,1,n);
        n                          n
       ====                       ====
       ¥     binomial(n + k, k)   ¥
(%o2)   >    ------------------ +  >    binomial(2 n, 2 k)
       /              k           /
       ====          2            ====
       k = 1                      k = 1
(%i3) simplify_sum(%);

                         2 n - 1    n
(%o3)                   2        + 2  - 2
関数: solve_rec (eqn, var, [init])

変数varに関して多項式係数を持つ線形漸化式eqnの超幾何解について解きます。 オプション引数initは初期条件です。

solve_recは、 定数係数の線形漸化式を解くことができ、 多項式係数の斉次線形漸化式の超幾何解と多項式係数の有理解を見つけ、 Ricatti型漸化式を解くことができます。

超幾何解を見つけるのに使われるアルゴリズムの実行時間は 主係数と最小次数(trailing)係数の次数に関して指数的であることに注意してください。

この関数を使うには、 最初に load("solve_rec");solve_recパッケージをロードしてください。

定係数の線形漸化式の例:

(%i2) solve_rec(a[n]=a[n-1]+a[n-2]+n/2^n, a[n]);
                        n          n
           (sqrt(5) - 1)  %k  (- 1)
                            1           n
(%o2) a  = ------------------------- - ----
       n               n                  n
                      2                5 2
                                                n
                                   (sqrt(5) + 1)  %k
                                                    2    2
                                 + ------------------ - ----
                                            n              n
                                           2            5 2

多項式係数の線形漸化式の例:

(%i7) 2*x*(x+1)*y[x] - (x^2+3*x-2)*y[x+1] + (x-1)*y[x+2];
                         2
(%o7) (x - 1) y      - (x  + 3 x - 2) y      + 2 x (x + 1) y
               x + 2                   x + 1                x
(%i8) solve_rec(%, y[x], y[1]=1, y[3]=3);
                              x
                           3 2    x!
(%o9)                 y  = ---- - --
                       x    4     2

Ricatti型漸化式の例:

(%i2) x*y[x+1]*y[x] - y[x+1]/(x+2) + y[x]/(x-1) = 0;
                            y         y
                             x + 1     x
(%o2)         x y  y      - ------ + ----- = 0
                 x  x + 1   x + 2    x - 1
(%i3) solve_rec(%, y[x], y[3]=5)$
(%i4) ratsimp(minfactorial(factcomb(%)));
                                   3
                               30 x  - 30 x
(%o4) y  = - -------------------------------------------------
       x        6      5       4       3       2
             5 x  - 3 x  - 25 x  + 15 x  + 20 x  - 12 x - 1584

以下も参照してください: solve_rec_rat, simplify_products, and product_use_gamma.

関数: solve_rec_rat (eqn, var, [init])

線形漸化式の有理解について解きます。 引数の記述についてはsolve_recを参照してください。

この関数を使うには、 最初に load("solve_rec");solve_recパッケージをロードしてください。

例:

(%i1) (x+4)*a[x+3] + (x+3)*a[x+2] - x*a[x+1] + (x^2-1)*a[x];
(%o1)  (x + 4) a      + (x + 3) a      - x a
                x + 3            x + 2      x + 1
                                                   2
                                               + (x  - 1) a
                                                            x
(%i2) solve_rec_rat(% = (x+2)/(x+1), a[x]);
                       1
(%o2)      a  = ---------------
            x   (x - 1) (x + 1)

以下も参照してください: solve_rec.

オプション変数: product_use_gamma

デフォルト値: true

積を整理する時、 もしproduct_use_gammatrueなら、 solve_recは式の中にガンマ函数を導入します。

以下も参照してください: simplify_products, solve_rec.

関数: summand_to_rec (summand, k, n)
関数: summand_to_rec (summand, [k, lo, hi], n)

     hi
    ====
    \
     >     summand
    /
    ====
  k = lo

が満たす漸化式を返します。 ここで、被和(summand)はknに対して超幾何的です。 もしlohiが省略されたら、 それらはlo = -infhi = infと仮定されます。

この関数を初めて使うには、 load("simplify_sum")simplify_sumパッケージをロードしてください。

例:

(%i1) load("simplify_sum")$
(%i2) summand: binom(n,k);
(%o2)                           binomial(n, k)
(%i3) summand_to_rec(summand,k,n);
(%o3)                      2 sm  - sm      = 0
                               n     n + 1
(%i7) summand: binom(n, k)/(k+1);
                                binomial(n, k)
(%o7)                           --------------
                                    k + 1
(%i8) summand_to_rec(summand, [k, 0, n], n);
(%o8)               2 (n + 1) sm  - (n + 2) sm      = - 1
                                n             n + 1

Next: , Previous:   [Contents][Index]