【问题标题】:Sympy solve constant coefficient, first order linear difference equation with initial conditionsSympy求解常数系数,具有初始条件的一阶线性差分方程
【发布时间】:2021-11-20 11:52:38
【问题描述】:

我正在学习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})

【问题讨论】:

    标签: sympy


    【解决方案1】:

    您使用的是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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      相关资源
      最近更新 更多