私はこの再帰関数を持っています:
f(n) = 2 * f(n-1) + 3 * f(n-2) + 4
f(1) = 2
f(2) = 8
私は経験からそれの明示的な形式が次のようになることを知っています:
f(n) = 3 ^ n - 1 // pow(3, n) - 1
それを証明する方法があるかどうか知りたいです。少しググってみましたが、わかりやすいものは見つかりませんでした。母関数がおそらくそれを解決することを私はすでに知っています、それらは複雑すぎます、私はむしろそれらに入りたくありません。もっと簡単な方法を探しています。
P.S.それが私がこのような何かがそれを解決したことを思い出すのを助けるならば:
f(n) = 2 * f(n-1) + 3 * f(n-2) + 4
// consider f(n) = x ^ n
x ^ n = 2 * x ^ (n-1) + 3 * x ^ (n-2) + 4
そして、あなたはどういうわけかxを計算して、再帰式の明示的な形式に導きましたが、私は完全に覚えていません
f(n) = 2 * f(n-1) + 3 * f(n-2) + 4
f(n+1) = 2 * f(n) + 3 * f(n-1) + 4
f(n+1)-f(n) = 2 * f(n) - 2 * f(n-1) + 3 * f(n-1) - 3 * f(n-2)
f(n+1) = 3 * f(n) + f(n-1) - 3 * f(n-2)
これで4つはなくなりました。あなたが言ったように、次のステップはf(n) = x ^ n
x^(n+1) = 3 * x^n + x^(n-1) - 3 * x^(n-2)
x ^(n-2)で割る
x^3 = 3 * x^2 + x - 3
x^3 - 3 * x^2 - x + 3 = 0
xを見つけるための因数分解
(x-3)(x-1)(x+1) = 0
x = -1 or 1 or 3
f(n) = A * (-1)^n + B * 1^n + C * 3^n
f(n) = A * (-1)^n + B + C * 3^n
今あなたが持っている値を使用してA、B、Cを見つけます
f(1) = 2; f(2) = 8; f(3) = 26
f(1) = 2 = -A + B + 3C
f(2) = 8 = A + B + 9C
f(3) = 26 = -A + B + 27C
a、B、Cの解決:
f(3)-f(1) = 24 = 24C => C = 1
f(2)-f(1) = 6 = 2A + 6 => A = 0
2 = B + 3 => B = -1
最後に
f(n) = 3^n - 1
さて、あなたが関数(これからはGF)やすべての複雑なものを生成したくないことは知っていますが、私の問題は非線形であることが判明し、単純な線形法は機能していないようです。ですから、丸一日検索した後、私は答えを見つけました。うまくいけば、これらの発見が他の人の助けになるでしょう。
私の問題:a [n + 1] = a [n] /(1 + a [n])(つまり、線形(または多項式)ではありませんが、完全に非線形ではありません-これは有理差分方程式です)
RSolve[{a[n + 1] == a[n]/(1 + a[n]), a[1] == A}, a[n], n]
を使用すると単純な{{a[n] -> A/(1 - A + A n)}}
が得られます。だから私は戻って手計算の間違いを探すと思います(それらは変換プロセス全体がどのように機能するかを理解するのに役立ちます)。とにかく、これが役立つことを願っています。
一般に、再帰形式を反復形式に変換するためのアルゴリズムはありません。この問題は決定不可能です。例として、コラッツシーケンスを定義するこの再帰関数定義について考えてみます。
f(1) = 0
f(2n) = 1 + f(n)
f(2n + 1) = 1 + f(6n + 4)
これが明確に定義された関数であるかどうかは不明です。これを閉じた形に変換できるアルゴリズムが存在する場合、それが明確に定義されているかどうかを判断できます。
ただし、多くの一般的なケースでは、再帰的定義を反復定義に変換することができます。優れた教科書ConcreteMathematicsは、そのページの多くをその方法を示しています。答えが何であるかを推測しているときに非常にうまく機能する一般的な手法の1つは、誘導を使用することです。あなたのケースの例として、再帰的定義が実際に3 ^ n-1を与えると信じていると仮定します。これを証明するには、基本ケースに当てはまることを証明してみてください。次に、この知識によってソリューションを上向きに一般化できることを示してください。 。あなたはあなたの投稿にベースケースを入れていませんでしたが、私はそれを仮定しています
f(0) = 0
f(1) = 2
これを踏まえて、あなたの勘が正しいかどうかを見てみましょう。 0と1の特定の入力について、関数が3 ^ n-1を計算することを検査によって確認できます。帰納的ステップでは、すべてのn '<nについてf(n) = 3 ^ n-1。それで、
f(n) = 2f(n - 1) + 3f(n - 2) + 4
= 2 * (3^{n-1} - 1) + 3 * (3^{n-2} - 1) + 4
= 2 * 3^{n-1} - 2 + 3^{n-1} - 3 + 4
= 3 * 3^{n-1} - 5 + 4
= 3^n - 1
したがって、この再帰関数が実際に3 ^ n-1を生成することを証明しました。