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

如何用SymPy库求解方程?求解t返回空数组问题排查

分析Sympy求解方程得到空数组的原因

让我来帮你拆解问题,你遇到的空数组结果主要是由代码顺序错误和语法笔误导致的,我们一步步来看:

1. 符号变量定义顺序颠倒

你当前的代码先定义了表达式X,之后才将t声明为Sympy的Symbol:

X = (1/2)*((gravity_FORCE[0]+drag_FORCE[0]+ \
magnus_FORCE[0]).145)*t**2 - h_release
t = Symbol('t')

这会导致X里的t被当成普通Python变量(而非Sympy的符号变量),Sympy无法对其进行符号求解,自然返回空数组。正确的顺序应该是先定义符号t,再构建表达式。

2. 表达式中的语法笔误

代码里的(gravity_FORCE[0]+drag_FORCE[0]+magnus_FORCE[0]).145是明显的错误写法:点号.在这里会被Python解析为访问对象属性,而非乘法操作。你应该是想写*145(或者*0.145,取决于你的实际需求),这个笔误会导致表达式的计算逻辑完全错误,进而让方程没有符合预期的解。

修正后的代码及验证

结合你给出的已知参数,修正后的代码如下:

from sympy.solvers import solve
from sympy import Symbol

# 已知参数
gravity_FORCE = [0]
drag_FORCE = [-0.01]
magnus_FORCE = [0.8]
h_release = 0.3

# 先定义符号变量t
t = Symbol('t')

# 计算合力总和,并修正乘法写法
force_sum = gravity_FORCE[0] + drag_FORCE[0] + magnus_FORCE[0]
# 这里假设你想写的是*145,如果是0.145就改成*0.145
X = (1/2) * force_sum * 145 * t**2 - h_release

# 求解X = 16.9164
balltime = solve(X - 16.9164, t)
print(balltime)

代入参数计算后,方程会变为:

57.275t² - 0.3 = 16.9164

求解后会得到t ≈ ±0.548,取正数值就是你需要的时间。如果你的原意是*0.145,那么解会是t ≈ ±17.34,同样会有有效解。

内容的提问来源于stack exchange,提问作者L. Nemiroff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:48:51