maximaでは漸化式を扱う方法はいくつかあります。 ここでは有名なフィボナッチ数を定義してみることにしましょう。 関数定義の項と繰り替えしの項も参照ください。これは、漸化式の定義をif文を使って場合分けして記述したものです。 次に、solve_recパッケージを使って 漸化式をといて見ましょう。 まずsolve_recパッケージをload関数で読み込み solve_rec関数を使えるようにします。 solve_recの書式は次のとおりです。関数とifを使った方法
(%i1) fib(n):= if n<=0 then 0 elseif n=1 then 1 elseif n=2 then 1 else fib(n-1) + fib(n-2); (%o2) fib(n):= if n<=0 then 0 elseif n=1 then 1 elseif n=2 then 1 else fib(n-1) + fib(n-2); (%i2) for i thru 10 do print(fib(i)); 1 1 2 3 5 8 13 21 34 55 (%o2) done式にメインの漸化式を記述し、 初期値のリストに初期値のリストを記述します。 実際に使ってみます。solve_recの書式
solve_rec(式,解く変数、[初期値のリスト])上のように関数の形でも、添字でアクセスしても解くことが出来ます。solve_recパッケージ
(%i1) load(solve_rec)$ (%i2) solve_rec(f[n]=f[n-1]+f[n-2],f[n],f[1]=1,f[2]=1); (%o2) f[n]=(sqrt(5)+1)^n/(sqrt(5)*2^n)−((sqrt(5)−1)^n*(−1)^n)/(sqrt(5)*2^n) (%i3) solve_rec(f(n)=f(n-1)+f(n-2),f(n),f(1)=1,f(2)=1); (%o3) f(n)=(sqrt(5)+1)^n/(sqrt(5)*2^n)−((sqrt(5)−1)^n*(−1)^n)/(sqrt(5)*2^n)