|
3.6.8 再帰方程式の解法
文字列のn番目の項をa[n]として表す場合には,「再帰方程式」を使ってこれが文字列の他の項とどのような関係かを指定することができる.
RSolveは再帰方程式を取り,これを解いてa[n]の明示的な式を得る.
これは単純な再帰方程式を解く.
In[1]:= RSolve[{a[n] == 2 a[n-1], a[1] == 1}, a[n], n]
Out[1]= 
これは解から最初の10個のa[n]の明示的な表を作る.
In[2]:= Table[a[n] /. First[%], {n, 10}]
Out[2]= 

再帰方程式を解く
これは幾何級数について再帰方程式を解く.
In[3]:= RSolve[{a[n] == r a[n-1] + 1, a[1] == 1}, a[n], n]
Out[3]= 
これも同じ結果を与える.
In[4]:= RSolve[{a[n+1] == r a[n] + 1, a[1] == 1}, a[n], n]
Out[4]= 
これはフィボナッチの再帰方程式に代数解を与える.
In[5]:= RSolve[{a[n] == a[n-1] + a[n-2], a[1] == a[2] == 1}, a[n], n]
Out[5]= 
RSolveはDSolveの離散的な相似体だと考えることができる.微分方程式を解く上で生成される多くの関数と同じ関数が,再帰方程式の記号解を求める上でも現れる.
これは階乗を一般化するガンマ関数を生成する.
In[6]:= RSolve[{a[n] == n a[n-1], a[1] == 1}, a[n], n]
Out[6]= 
この2次再帰方程式はベッセル関数について現れた.
In[7]:= RSolve[{a[n + 1] == n a[n] + a[n - 1], a[1] == 0, a[2] == 1}, a[n], n]
Out[7]= 
RSolveはa[1]のような項の値の明示的な指定は要求しない.DSolveと同じように,自動的に未定義の定数C[i]を導入し,一般解を与える.
これは未定義の定数1つの一般解を与える.
In[8]:= RSolve[a[n] == n a[n-1], a[n], n]
Out[8]= 
RSolveはa[n]に線形にだけ依存するのではない方程式を解くことができる.しかし,非線形方程式の場合は複数の異なる解が与えられなければならないこともある.微分方程式の場合と同じように,再帰方程式の記号解を求めるのは難しく,標準的な数学関数は限られたケースしか扱わない.
これは非線形再帰方程式の一般解である.
In[9]:= RSolve[{a[n] == a[n + 1] a[n - 1]}, a[n], n]
Out[9]= 
これは2つの異なる解を与える.
In[10]:= RSolve[a[n] == (a[n + 1] a[n - 1])^2, a[n], n]
Out[10]= 
RSolveはaの引数の違いが整数で表せる常「微分方程式」ばかりでなく,aの引数が乗数的因子と関連する「q階差分方程式」も解くことができる.
これは階乗方程式の 差分バージョンを解く.
In[11]:= RSolve[a[q n] == n a[n], a[n], n]
Out[11]= 
これは2階の 差分方程式である.
In[12]:= RSolve[a[n] == a[q n] + a[n/q], a[n], n]
Out[12]= 

再帰方程式系を解く
これは2対の再帰方程式の系を解く.
In[13]:= RSolve[{a[n] == b[n - 1] + n, b[n] == a[n - 1] - n, a[1] == b[1] == 1}, {a[n], b[n]}, n]
Out[13]= 

偏再帰方程式を解く
複数の変数を持つ関数を含む偏微分方程式が設定できるように,多次元の文字列を含む偏再帰方程式を設定することもできる.微分方程式におけるのと同じように,偏再帰方程式の一般解は未定義の関数を含むことができる.
これは単純な偏再帰方程式の一般解を与える.
In[14]:= RSolve[a[i + 1, j + 1] == i j a[i, j], a[i, j], {i, j}]
Out[14]= 
|