You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SymPy求解二阶常微分方程组IVP代入初始条件报错如何解决

错误原因

dsolve的ics参数要求传入单个包含所有初始条件的字典,不支持传入字典列表。你之前将两个函数的初始条件拆分到两个字典再封装为列表传入,才触发了list没有items方法的报错。

修改方案

把两个初始条件字典合并为单个字典,直接传给ics参数即可,修改后的代码如下:

from sympy import *
import numpy as np
import matplotlib.pyplot as plt
x1,x2 = symbols('x1,x2', cls=Function)
t, k1, k2, m1, m2 = symbols('t k1 k2 m1 m2', real=True)
k1 = 1.0
k2 = 1.0
m1 = 1.0
m2 = 1.0
eq1 = Eq(m1*diff(x1(t), t, 2) + k1*x1(t) - k2*(x2(t)-x1(t)), 0)  
eq2 = Eq(m2*diff(x2(t), t, 2) + k2*(x2(t)-x1(t)), 0)  
eqs = [eq1, eq2]
# 合并所有初始条件到单个字典
ics = {
    x1(0): 0,
    diff(x1(t), t).subs(t, 0): 0,
    x2(0): 1,
    diff(x2(t), t).subs(t, 0): 0
}
sol = dsolve(eqs, [x1(t), x2(t)], ics=ics)
print(sol)

运行输出

[Eq(x1(t), -0.223606797749979*sin(0.618033988749895*t) + 0.223606797749979*sin(1.61803398874989*t)),
 Eq(x2(t), 0.723606797749979*cos(0.618033988749895*t) + 0.276393202250021*cos(1.61803398874989*t))]

如果需要保留符号形式不代入k、m的数值,删掉给k1、k2、m1、m2赋浮点值的四行代码即可,dsolve会直接返回含参数的符号解析解。


内容的提问来源于stack exchange,提问作者Staffan Lundberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:45:03