D02 2項間漸化式

2項間漸化式で定義された数列の一般項を返すような関数またはコマンドについて考えます。

an+1 = p an + q (p, q は定数) 型

漸化式

a1 = a

an+1 = p an + q

で定まる数列は p = 1 ならば後述の階差型になりますし、そうでないならば、

an = (a - q/(1-p))pn-1 + q/(1-p)

と漸化式が解けますから、an は n の関数として定義できます。

f(x) = (a - q/(1-p))*p^(x-1) + q/(1-p)

また、下のように Iteration を用いてコマンドを定義することもできます。あるいは、3項間漸化式フィボナッチ数列に記してあるように行列の羃乗を用いても an を定義できます。

an+1 = (定数係数なanの式) 型漸化式

a1 = 1

an+1 = 1 + 1/an

で定まる数列 { an } のように、一般項を求めるのが難しい場合、

n = 8

m = Iteration[1+1/x, 1, n-1]

とすると、第n項を計算できます。ここで、出力オブジェクト m、入力オブジェクト n としてツールを作成することもできますが、ツール (つまりコマンド) ではなく、n の関数として定義することはできません。n の代わりに独立変数の x を使用することができないからです。

また、表計算ビューを数値表代わりに使うこともできます。上の数列 { an } ならば、セル A1 に 1 を設定し、セル A2 に 1+1/A1 を設定し、セル A3 以下は必要なだけ (例えばA33まで) A2 をコピーしておきます。そして、

n = 8

m = Element[CellRange[A1,A33], n]

とすると、第n項を得られます。上の方法と同様にコマンドを定義することもできますが、必要な範囲 (ここでは33項まで) を動的にはできません。

GeoGebraのForumでは、数列の一般項を求める方法として、表計算を用いた方法を開発メンバーがしばしば勧めています。確かに実践的な方法ですが、表計算ビューの1列を占有することと、動的ではない点が美しくありません。

an+1 = (anとnの式) 型

コマンド Iteration の第1引数には、n を用いた関数が指定できないため、定数係数の場合のようにIteration によるコマンド定義は不可能です。しかし、表計算ビューを用いれば、コマンド Row を使って n を含むような漸化式を実現できます。例えば、

a1 = 1

an+1 = an + n2

という漸化式であれば、セルA1に1を設定し、セルA2には、A1 + Row[A1]^2 を設定し、セルA3以下は必要なだけA2をコピーします。すると、A列に数列anが計算されます。

階差型

n を含むような漸化式でも、

a1 = 1

an+1 = an + 1/n

のようないわゆる階差型ならば、

n = 8

m = 1 + Sum[Sequence[1/i, i, 1, n-1]]

により一般項を求められます。

これに似た例として、階乗を組み込み関数の x! を用いずに定義するならば、

n = 8

m = Product[Sequence[i,i,1,n]]

とすれば、n の階乗を求めるコマンドが定義できます。