使用Sympy求解带初始条件的常系数一阶线性差分方程求助
问题分析
- 问题1:SymPy的
dsolve函数求解差分方程时,需要显式的递推表达式(直接包含y(n)、y(n-k)形式的函数调用),原代码通过Sum+IndexedBase替换生成的表达式结构无法被dsolve识别为差分方程,触发匹配失败。 - 问题2:输入序列
x(n) = n² + n没有显式代入递推方程,dsolve无法处理带未知输入函数的递推求解。 - 问题3:使用浮点数作为递推系数会干扰符号计算的类型匹配,优先使用整数完成符号计算后再按需转换为数值形式。
修正代码
from sympy import * # 定义整数符号 n = symbols("n", integer=True) y = Function("y") # 显式定义输入序列 x = n**2 + n # 构造标准差分方程 diffeq = Eq(y(n) + 3*y(n-1), x) # 代入初始条件求解 res = dsolve(diffeq, ics={y(-1): 0}) # 打印化简后的结果 pprint(simplify(res))
结果验证
运行上述代码得到的符号解展开后与预期解完全一致,将符号分数转换为小数形式即可得到y(n) = 0.25n² + 0.625n + 0.28125*(1-(-3)^n)。
内容的提问来源于stack exchange,提问作者nopeva
相关产品推荐
相关产品推荐

