如何在python中数值求解差分方程

时间:2018-07-09 08:30:56

标签: python floating-point floating-accuracy numerical-analysis

考虑这个差分方程:

解决方案是

我正在尝试用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,我的函数的返回值与真实值有所不同。

1 个答案:

答案 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个值应该是哪个好。这不能解决如何以浮点精度执行此操作的问题。问题的某些转变(例如采用双方的指数)很可能会允许您执行此操作。但是,找到正确的转换非常棘手。