Sympy 解常系数,具有初始条件的一阶线性差分方程

Sympy solve constant coefficient, first order linear difference equation with initial conditions

我正在学习sympy和一阶线性差分方程。

方程 y(n) = x(n)-3y(n-1) 的解是 y(n) = n^{2}*.25 + n*.625 + 0.28125*(1-(-3)^{n}),初始条件为 y(-1)=0x(n) = n^{2}+n

我卡在求解中,这就是我所拥有的:

from sympy import *
n, i = symbols("n i", integer=True) 
a, b = IndexedBase("a"), IndexedBase("b")
def x(n): return n**2+n
y = Function("y")

lexpr = y(n)
s1 = Sum(b[i]*x(n-i),(i,0,1)).doit().subs([(b[i], u) for i,u in enumerate([1., 0.])])
s2 = -Sum(a[i]*y(n-i),(i,1,1)).doit().subs([(a[1],3.)])
rexpr = s1 + s2
pprint(Eq(lexpr, rexpr))
diffeq = Eq(lexpr, rexpr)
res = dsolve(diffeq, ics={y(-1): 0})

您正在使用 dsolve,但 dsolve 适用于 常微分方程 。您的方程是 差分方程 或更准确地说是线性递推方程。 rsolve函数用于求解递推关系:

In [40]: diffeq
Out[40]: 
            2                       
y(n) = 1.0⋅n  + 1.0⋅n - 3.0⋅y(n - 1)

In [41]: rsolve(diffeq, y(n))
Out[41]: 
    n         ⎛     2              ⎞
-3.0 ⋅C₀ + C₀⋅⎝1.0⋅n  + 3.0⋅n + 2.0⎠

https://docs.sympy.org/latest/modules/solvers/solvers.html#sympy.solvers.recurr.rsolve https://docs.sympy.org/latest/modules/solvers/ode.html#sympy.solvers.ode.dsolve