[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

# 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)

Categories: Linear recurrences · Share packages · Package solve_rec

[ < ] | [ > ] |  | [ << ] | [上] | [ >> ] |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

## 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

  Categories: Package solve_rec

オプション変数: simplify_products

  デフォルト値: `true`

  もし `simplify_products`が `true`なら、 `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

  Categories: Package solve_rec · Sums and products · Simplification functions

関数: 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_gamma`が `true`なら、 `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)は kと nに対して超幾何的です。 もし loと hiが省略されたら、 それらは `lo = -inf`、`hi = 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

[ << ] | [ >> ] |  |  |  |  |  | [冒頭] | [目次] | [見出し] | [ ? ]

この文書は市川 雄二によって10月, 18 2015にtexi2html 1.76を用いて生成されました。