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

Sympy求解终端速度微分方程绘图异常,求问题排查

问题分析与修正

1. 微分方程符号错误

你给出的原始方程是 m(dv/dt) = -mg - kv,但代码中写成了 Eq(mass*v(t).diff(t), mass*g - k*v(t)),符号逻辑与实际物理场景不符。针对跳伞下落的场景:重力向下为正方向,阻力向上与速度方向相反,正确的微分方程应为 m(dv/dt) = mg - kv——原方程符号会导致速度最终趋近负值,完全不符合下落的预期结果。

2. 初始条件代入方式错误

你用 solution.subs([(v(t),0),(t,0)]) 代入 t=0时v=0 的写法有误,应该先代入 t=0 再指定 v(0)=0,更简洁可靠的方式是直接在 dsolve 中用 ics 参数指定初始条件。

3. 常数解索引错误

solve(particularSolution, C1) 返回的解列表中,有效常数的索引应为 0 而非 1,取 const[1] 会代入错误的常数,导致最终解偏离预期。

4. 导入语句错误

import matplotlib as plt 写法错误,正确导入应为 import matplotlib.pyplot as plt(SymPy的plot函数可独立使用,但后续自定义绘图样式时需修正该语句)。


修正后的完整代码

from sympy import *
import matplotlib.pyplot as plt

# 定义符号,添加positive=True确保物理量为正,简化化简结果
mass, g, k, t = symbols('mass g k t', real=True, positive=True)
v = symbols('v', cls=Function)

# 符合下落场景的微分方程
equation = Eq(mass*v(t).diff(t), mass*g - k*v(t))
print("微分方程:", equation)

# 直接指定初始条件v(0)=0求解
solution = dsolve(equation, v(t), ics={v(0): 0})
print("含初始条件的解:", solution)

# 化简最终特解
final_solution = solution.rhs.expand().simplify()
print("最终特解:", final_solution)

# 代入参数:m=100kg,g=127008km/h²,k=63504
subs_params = {g: 127008, mass: 100, k: 63504}
# 绘制0-1小时内的速度曲线
plot(final_solution.subs(subs_params), (t, 0, 1), 
     xlabel='时间(h)', ylabel='速度(km/h)', title='跳伞者下落速度变化')
plt.show()

关键验证

修正后的代码会输出从0开始递增、最终趋近200km/h的速度曲线,完全符合跳伞者下落的物理规律。

内容的提问来源于stack exchange,提问作者Tommy Sanger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:54:54