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

Sympy nonlinsolve求解非线性方程组返回错误结果排查

二元方程组求解:Sympy结果与纸笔计算不符的问题

我通过纸笔计算得到二元方程组的正确解为t_m=5,t_e=15,但使用Sympy的nonlinsolve求解时,返回结果是t_m=(5, 15), t_e=(25, 55)。将Sympy的解代入Desmos验证后发现不满足方程,而我的解符合预期。需确认是Sympy的问题还是推导错误。

问题背景

该方程组对应一段速度曲线:从初始速度v_s先减速到v_m(v_m < v_s),再加速到末速度v_e,总位移不超过d_e,目标是求解总时间t_e。

所用Sympy代码

# Ramp down then up.

import sympy as sp

a, v_s, v_e, t_m, t_e, d_e = sp.symbols("a, v_s, v_e, t_m, t_e, d_e")

v_s = 15
v_e = 20
a = 1
d_e = 212.5

v_m = v_s - t_m * a

Eq1 = v_m + a * (t_e - t_m) - v_e
Eq2 = t_e * v_m + (v_s - v_m) * t_m / 2 + (v_e - v_m) * (t_e - t_m) / 2 - d_e

sp.nonlinsolve([Eq1, Eq2], [t_m, t_e])

问题根源:位移方程推导错误

Sympy的求解结果是你输入的方程组的数学正确解,但你的位移方程(Eq2)不符合物理模型,导致解不符合预期。

正确的位移计算应分为两段:

  • 减速阶段(时间t_m):位移为平均速度乘以时间,即(v_s + v_m)/2 * t_m
  • 加速阶段(时间t_e - t_m):位移为(v_m + v_e)/2 * (t_e - t_m)

总位移是两段之和,而你写的Eq2中t_e * v_m属于错误项,这部分完全偏离了物理位移的计算逻辑。

修正后的代码

将Eq2替换为正确的位移公式:

Eq2 = (v_s + v_m)/2 * t_m + (v_m + v_e)/2 * (t_e - t_m) - d_e

运行修正后的代码,nonlinsolve会返回正确解{(5, 15)},与纸笔计算结果一致。

另外,Sympy给出的(15, 25)解代入你原来的错误方程是成立的,但不符合你的物理场景(此时v_m = 15 -15*1=0,仅满足错误的数学等式,而非真实的位移模型)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:20:33