2 * Introduction to solve_rec::
3 * Functions and Variables for solve_rec::
6 @node Introduction to solve_rec, Functions and Variables for solve_rec, solve_rec, solve_rec
7 @section Introduction to solve_rec
9 @code{solve_rec}は多項式係数を持つ線形漸化式を解くためのパッケージです。
12 @code{demo(solve_rec);}で利用可能です。
17 (%i1) load("solve_rec")$
19 (%i2) solve_rec((n+4)*s[n+2] + s[n+1] - (n+1)*s[n], s[n]);
23 (%o2) s = -------------------- + ---------------
24 n (n + 1) (n + 2) (n + 1) (n + 2)
29 @category{Linear recurrences}
30 @category{Share packages}
31 @category{Package solve_rec}
34 @node Functions and Variables for solve_rec, , Introduction to solve_rec, solve_rec
35 @section Functions and Variables for solve_rec
37 @deffn {関数} reduce_order (@var{rec}, @var{sol}, @var{var})
40 線形漸化式@var{rec}の次数を減らします。
46 (%i3) rec: x[n+2] = x[n+1] + x[n]/n;
53 (%i4) solve_rec(rec, x[n]);
54 WARNING: found some hypergeometrical solutions!
59 (%i5) reduce_order(rec, n, x[n]);
71 (%o6) (- n - 2) %u - %u
75 (%i6) solve_rec((n+2)*%u[n+1] + %u[n], %u[n]);
87 %k n > -------- + %k n
95 @category{Package solve_rec}
100 @defvr {オプション変数} simplify_products
103 もし@code{simplify_products}が@code{true}なら、
104 @code{solve_rec}は答えの積をを整理しようとします。
106 以下も参照してください: @code{solve_rec}.
109 @category{Package solve_rec}
114 @deffn {関数} simplify_sum (@var{expr})
116 @var{expr}に現れるすべての和を閉形式に整理しようとします。
119 @code{load("simplify_sum")}で
120 @code{simplify_sum}パッケージをロードしてください。
125 @c load("simplify_sum")$
126 @c sum(binomial(n+k,k)/2^k, k, 1, n) + sum(binomial(2*n, 2*k), k, 1,n);
130 (%i1) load("simplify_sum")$
132 (%i2) sum(binomial(n+k,k)/2^k,k,1,n)+sum(binomial(2*n,2*k),k,1,n);
135 ¥ binomial(n + k, k) ¥
136 (%o2) > ------------------ + > binomial(2 n, 2 k)
142 (%i3) simplify_sum(%);
150 @category{Package solve_rec}
151 @category{Sums and products}
152 @category{Simplification functions}
157 @deffn {関数} solve_rec (@var{eqn}, @var{var}, [@var{init}])
158 変数@var{var}に関して多項式係数を持つ線形漸化式@var{eqn}の超幾何解について解きます。
159 オプション引数@var{init}は初期条件です。
163 多項式係数の斉次線形漸化式の超幾何解と多項式係数の有理解を見つけ、
164 Ricatti型漸化式を解くことができます。
166 超幾何解を見つけるのに使われるアルゴリズムの実行時間は
167 主係数と最小次数(trailing)係数の次数に関して指数的であることに注意してください。
171 @code{load("solve_rec");}で@code{solve_rec}パッケージをロードしてください。
178 (%i2) solve_rec(a[n]=a[n-1]+a[n-2]+n/2^n, a[n]);
180 (sqrt(5) - 1) %k (- 1)
182 (%o2) a = ------------------------- - ----
188 + ------------------ - ----
198 (%i7) 2*x*(x+1)*y[x] - (x^2+3*x-2)*y[x+1] + (x-1)*y[x+2];
200 (%o7) (x - 1) y - (x + 3 x - 2) y + 2 x (x + 1) y
204 (%i8) solve_rec(%, y[x], y[1]=1, y[3]=3);
216 (%i2) x*y[x+1]*y[x] - y[x+1]/(x+2) + y[x]/(x-1) = 0;
219 (%o2) x y y - ------ + ----- = 0
222 (%i3) solve_rec(%, y[x], y[3]=5)$
224 (%i4) ratsimp(minfactorial(factcomb(%)));
227 (%o4) y = - -------------------------------------------------
229 5 x - 3 x - 25 x + 15 x + 20 x - 12 x - 1584
234 以下も参照してください: @code{solve_rec_rat}, @code{simplify_products}, and @code{product_use_gamma}.
237 @category{Package solve_rec}
242 @deffn {関数} solve_rec_rat (@var{eqn}, @var{var}, [@var{init}])
245 引数の記述についてはsolve_recを参照してください。
249 @code{load("solve_rec");}で@code{solve_rec}パッケージをロードしてください。
255 (%i1) (x+4)*a[x+3] + (x+3)*a[x+2] - x*a[x+1] + (x^2-1)*a[x];
256 (%o1) (x + 4) a + (x + 3) a - x a
263 (%i2) solve_rec_rat(% = (x+2)/(x+1), a[x]);
265 (%o2) a = ---------------
271 以下も参照してください: @code{solve_rec}.
274 @category{Package solve_rec}
279 @defvr {オプション変数} product_use_gamma
283 もし@code{product_use_gamma}が@code{true}なら、
284 @code{solve_rec}は式の中にガンマ函数を導入します。
287 以下も参照してください: @code{simplify_products}, @code{solve_rec}.
290 @category{Package solve_rec}
295 @deffn {関数} summand_to_rec (@var{summand}, @var{k}, @var{n})
296 @deffnx {関数} summand_to_rec (@var{summand}, [@var{k}, @var{lo}, @var{hi}], @var{n})
313 ここで、被和(summand)は@var{k}と@var{n}に対して超幾何的です。
314 もし@var{lo}と@var{hi}が省略されたら、
315 それらは@code{lo = -inf}、@code{hi = inf}と仮定されます。
318 @code{load("simplify_sum")}で
319 @code{simplify_sum}パッケージをロードしてください。
324 (%i1) load("simplify_sum")$
326 (%i2) summand: binom(n,k);
330 (%i3) summand_to_rec(summand,k,n);
335 (%i7) summand: binom(n, k)/(k+1);
341 (%i8) summand_to_rec(summand, [k, 0, n], n);
342 (%o8) 2 (n + 1) sm - (n + 2) sm = - 1
348 @category{Package solve_rec}