考虑这个差分方程:
解决方案是
我正在尝试用python数字化解决它,以阐明浮点计算产生的问题。
我写了一个计算x n + 1
的函数def diff(n):
c = 1
b = -1/5.0
a = 0
for i in xrange(n):
a = 14/5.0*b+3/5.0*c
b, c = a, b
return a
但是我不知道如何用数值方法解决这个问题,然后解释为什么python无法提供x n =(-1/5) n 解决方案。
我可以看到,对于更大的n,我的函数的返回值与真实值有所不同。
答案 0 :(得分:0)
等式中的第二项应为x_{n-1}
。如您所知,浮点错误会传播并导致错误。一种快速的解决方案是使用像这样的高精度算法:
from decimal import *
getcontext().prec = 100
def diff(n):
c = Decimal(1)
b = Decimal(-1)/Decimal(5)
a = Decimal(0)
coeff1 = Decimal(14) / Decimal(5)
coeff2 = Decimal(3) / Decimal(5)
for i in range(n):
a = coeff1 * b + coeff2 * c
b, c = a, b
return a
对于前100个值应该是哪个好。这不能解决如何以浮点精度执行此操作的问题。问题的某些转变(例如采用双方的指数)很可能会允许您执行此操作。但是,找到正确的转换非常棘手。