我正在尝试学习如何使用 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]##
所以我的两个问题是:
是否有解决此类问题的通用且“可靠”的方法?如果是这样,有没有人有任何他们想分享的例子?
为什么在 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