0

Pythonを使用して差分方程式(再帰関係とも呼ばれます)を解く方法を学ぼうとしています。

問題は方程式です

$x_{n+2} - 4x_{n+1} - x_{n} = 0$       where x_0 = 1 and x_1 = 1

シーケンスを出力します: n = 1, 1, 5, 21, 89, 377, ....

数学を使用してこのシーケンスの一般式を見つけ、それを python の関数として定義することで問題を解決し、(一種の) 機能させました。

ただし、これを投稿する理由は、これを行うためのより良い方法があり、上記の解決策が次善であると考えているためです.

フィボナッチ数列を数値的に計算する方法など、いくつかの同様の例を見た後、この方法を一般化し、それが機能することを期待して取り組んでいる問題に変更しようとしました。そして、それは一種のことでしたが、完全ではありませんでした。

私が思いついた解決策は次のとおりです。

from numpy import zeros

N = 100
x = zeros(N+1, int)

x[0] = 1
x[1] = 1

for n in range(2, N+1):
    x[n] = x[n-2] + 4*x[n-1]
    print(f"x[{n}] = {x[n]}")

##produces wrong calculations after x[15]##

だから私の2つの質問は次のとおりです。

  1. この種の問題を解決する一般的で「確実な」方法はありますか? もしそうなら、共有したい例はありますか?

  2. x[15] の後で奇妙な結果が得られるのはなぜですか? そして、私がそれを修正するのを手伝ってくれる人はいますか?

アウトプリントは

Iteration    sequence output
===========================
x[0]        1
x[1]        1 
x[2]        5
x[3]        21
x[4]        89
x[5]        377
x[6]        1597
x[7]        6765 
…….
x[100]  137347080577163458295919672868222343249131054524487463986003968

そして、私は得ています:

x[0]        1
x[1]        1 
x[2]        5
x[3]        21
x[4]        89
x[5]        377
x[6]        1597
x[7]        6765
...
x[15] = 701408733
…….
x[16] = -1323752223
x[17] = -298632863
x[18] = 1776683621
x[19] = -1781832971
...
x[100] = -855830631
4

2 に答える 2