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)=0
和 x(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
我正在学习sympy
和一阶线性差分方程。
方程 y(n) = x(n)-3y(n-1)
的解是 y(n) = n^{2}*.25 + n*.625 + 0.28125*(1-(-3)^{n})
,初始条件为 y(-1)=0
和 x(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