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

81. solve_rec


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

81.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)

Categories:  Linear recurrences · Share packages · Package solve_rec


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

81.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

Categories:  Package solve_rec

オプション変数: simplify_products

デフォルト値: true

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

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

Categories:  Package 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, product_use_gamma

Categories:  Package solve_rec

関数: 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

Categories:  Package solve_rec

オプション変数: product_use_gamma

デフォルト値: true

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

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

Categories:  Package solve_rec

関数: summand_to_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

Categories:  Package solve_rec


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

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