○wxMaximaで数列の漸化式の問題を解くには,あらかじめ solve_rec パッケージをロードしておく必要がある.
○入力に当たっては,2xなどの書き慣れた記号を2*xと書かなければならないことに注意しましょう.べき乗(指数)を2^nなどと書くのは,TeXの書き方とほぼ同じです.
load(solve_rec);またはload("solve_rec");…(*)
漸化式のことを英語で recurrence fomula という.recurrence は再帰(=自分自身に帰ること)と訳され,漸化式によって数列の第n+1項が第n項で定義されている問題は,関数や数列が再帰的に定義されているような問題を扱うパッケージに収められている.solve_rec で「再帰問題を解く」と考えると分かりやすい.
○wxMiaximaを起動すると,はじめ何もない画面になるので,例えばメニューから[方程式]→[方程式を解く]→何も書かずにそのままOKを押すなど,1つコマンドを実行して,画面上に入力欄 (%i1)を作るとよい.こうしておいて,(%inn) を出して,その右にある入力欄を次々と書き換えて行くとよい. |
【漸化式から一般項を求めるには】
(1)
※上記の(*)はwxMaximaを起動してから1回実行すればよい.で定義される数列の一般項を求めるには load(solve_rec); ○wxMaximaでの入力例 solve_rec(a[n+1]=2*a[n]+n, a[n], a[1]=0); ○結果
初項と漸化式が与えられた数列の一般項を求めるには
solve_rec(漸化式 , 一般項 , 初期条件); という形でコマンドを入力します. [*1] 漸化式の部分は,
(A) a[n+1]=a[n]+nのようにこの場所に直接書き込む方法
(B) あらかじめzen1 : a[n+1=a[n]+nのように漸化式に適当な名前zen1を付けて定義しておき,上記の漸化式の場所にzen1と書き着込む方法 が考えられます. (B)の場合の入力: zen1 : a[n+1]=2*a[n]+n; solve_rec(zen1, a[n], a[1]=0); ※この関数solve_rec( );は,多項式で書かれた線形漸化式を解くようにできており,a[n]などの係数が「定数」「nの式」である場合は解けますが, a[n+1]=a[n]^2のように各項の積などが登場する場合は,Ricatti型などの特別な形のもの以外は解けません. ※のように,分母と分子が各項の1次式になるものは解けます. ※漸化式の部分は,上記のように配列名[配列番号]で指定してもよく,関数名(変数の値)で指定してもよいようです.・・・理屈から言えば,配列は変数の値が正の整数値(0も可能)をとる関数と考えれば包含関係は納得できますが,maximaでは関数の形でもよいということです. 関数で書くときの入力: zen1 : a(n+1)=2*a(n)+n; ←zen1の後は,単なるコロンです solve_rec(zen1,a[n],a[1]=0); [*2] 一般項の部分は,
一般項 a[n] を指定すればうまく求まりますが,a[n+1] やa[n−1]では求まらないようです.
[*3] 初期条件の部分は,
初項を指定するこの第3引数は省略することもできますが,初項を省略すると一般項が複雑になり過ぎることがあります.
※第1引数の漸化式,第2引数の一般項はそれぞれ1個ずつでなければなりませんが,第3引数の初期条件は必要な個数だけカンマで区切って書き並べることができます.
三項間漸化式のように,初期条件として初項と第2項を指定する必要があるときは,カンマで区切って a[1]=1, a[2] =3 などと書き並べます.
≪この問題を筆算で解くと≫
と変形すると,数列は公比の等比数列になるから
(2) 三項間漸化式
※上記の(*)はwxMaximaを起動してから1回実行すればよい.で定義される数列の一般項を求めるには
三項間漸化式なので,第3引数以降に初項と第2項を指定します.
○wxMaximaでの入力例zen2 : a[n+2]=5*a[n+1]-6*a[n] solve_rec(zen2, a[n],a[1]=0, a[2]=1); ○結果
≪この問題を筆算で解くと≫
と変形すると,数列は公比の等比数列になるから …[1] また と変形すると,数列は公比の等比数列になるから …[2] [1]−[2]
(3) 分数形漸化式で定義される
※上記の(*)はwxMaximaを起動してから1回実行すればよい.数列の一般項を求めるには
分母と分子が各項の1次式となる漸化式も解けます.
○wxMaximaでの入力例zen3 : a[n+1]=(4*a[n]-6)/(a[n]-1); solve_rec(zen3, a[n], a[1]=1); ○結果
≪この問題を筆算で解くと≫
特性方程式の解はだから を作る. したがって 数列は公比2の等比数列になるから この式をについて解くと これを適当に変形すれば,上記の結果と一致する.
(4) 連立漸化式
で定義される数列の一般項を求めるには solve_rec( )関数の第1引数には「1つの漸化式のみ書き込み可能」なので,連立漸化式で定義された数列の一般項を求めるには,少し工夫がいる. これを次の3通りの方法で考えてみる.maximaで求めるにしても,数学的に考えた下ごしらえが必要と言うことで少し長くなる.
●I 連立漸化式を三項間漸化式に直して解く
●I ●II 固有値,固有ベクトルから行列のn乗を求めて解く ●III 多項式の割り算とケーレー・ハミルトンの定理から行列のn乗を求めて解く 一般に,連立漸化式 …(1) …(2) は,次のように変形すると三項間漸化式に直すことができる. (1)より (2)を代入 (1)を使ってbnを消去 ゆえに 今の問題の場合は,p=−4 , q=10 , r=−3 , s=7だから 三項間漸化式の一般項を求めるには,第2項の値が必要だからa2も求めておくと これにより,Maximaに次のコマンドを入力すると一般項anが求められる. solve_rec(a[n+2]-3*a[n+1]+2*a[n]=0,a[n],a[1]=1,a[2]=-4); 結果 この結果を(1)に代入するとbnも求められる. |
●II…(この方法は行列の固有値,固有ベクトル,対角化を用いるので高校数学の範囲外) 一般に,連立漸化式 …(1) …(2) は,行列を用いて次のように表せる. とおくと …… これにより,係数行列Aのn乗が求められれば,連立漸化式の一般項が求まることになる.
Maximaでは行列Aのべき乗はA^^nで求められるが,指数nが1,2,3,...のような数字ならば直ちに答が出るのに対して,nのような文字の場合は式として得られない.そこで,次のように求めていく.
行列Aのn乗を求めるには,固有値,固有ベクトルを求めて行列を対角化するとよい.Maximaに次のコマンドを入力して係数行列Aを定義する. A:matrix([-4,10],[-3,7]); 固有ベクトルを求める. eigenvectors(A); 結果 [[[1,2],[1,1]],[[[1,1/2]],[[1,3/5]]]] これは,
固有値α=1の重複度が1で対応する固有ベクトルは1,1/2
であることを表している.固有値β=2の重複度が1で対応する固有ベクトルは1,3/5 固有ベクトルは定数倍して使えるから,
α=1に対応する固有ベクトルを
とおくと,行列を用いてβ=2に対応する固有ベクトルを と書けるから これより,一般項が求められる. |
●III…以下の答案ではmaximaは使っていない IIの方法で行列のn乗を求めると高校数学の範囲を逸脱してしまうが,次の方法ならば胸を張って高校数学の問題だと言える.これと同じ攻め方は大学入試問題にも見られる. 一般に,連立漸化式 は,行列を用いて次のように表せる. とおくと これにより,係数行列Aのn乗が求められれば,連立漸化式の一般項が求まることになる.
≪多項式について商と余りの関係・・・剰余の定理の復習≫
ところで,xnを2次式x2−tx+dで割った余りをRnx+Snとおくと xn=(x2−tx+d)Q(x)+Rnx+Sn…(1) 2次方程式x2−tx+d=0の解をx=α,βとおく (1)にx=αを代入すると αn=Rnα+Sn…(2) (1)にx=βを代入すると βn=Rnβ+Sn…(3) これより,α≠βのとき
行列については,次のケーレー・ハミルトンの定理が成り立つ.
今の問題では,ケーレー・ハミルトンの定理は次の形になる.行列Aは自分自身のべき乗と単位行列に関しては交換可能だから,xの多項式について成り立つ関係はそのまま行列Aの多項式についても成り立つ. An=(A2−(p+s)A+(ps−qr)E)Q(x)+RnA+SnE…(4) とおく 2次方程式x2−tx+d=0の解をx=α,βとおくと したがって 特性方程式は次の形になる。 特性方程式の解は これより,一般項が求められる. |