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

使用Sympy plot_implicit绘制球形水箱水位隐式方程时显示异常

解决Sympy plot_implicit绘制球形水箱水位曲线的空白问题

我来帮你排查下为啥你的绘图总是空白或者显示异常——主要是两个关键问题,一个是语法错误,另一个是容易忽略的单位统一问题:

1. 函数调用的括号语法错误

你写的代码里,plot_implicit的括号闭合位置错了,把t和h的范围参数放到了函数调用的外面。正确的写法应该是把方程和所有范围参数都放在plot_implicit的括号内:

# 错误写法(括号位置错误)
plot_implicit(Eq(-pi/3*h**3 + pi*R*h**2 + I*t - 4/3*pi*R**3, 0)), (t, 0, 5000), (h, 0, 2))

# 正确写法
plot_implicit(Eq(-pi/3*h**3 + pi*R*h**2 + I*t - 4/3*pi*R**3, 0), (t, 0, 5000), (h, 0, 2))

原来的错误会让范围参数被当成独立的表达式,plot_implicit只能使用默认的极小绘图范围,自然看不到曲线。

2. 单位不统一导致数值范围严重偏差

这是更核心的问题:你的隐式方程里,体积相关项(比如4/3*pi*R**3)的单位是立方米,但你设置的I=1升/秒是升的单位——1升=0.001立方米,这就导致I*t的数值比实际体积小了1000倍!

举个例子,水箱总容积是4/3*pi*1³≈4.188立方米,按1升/秒的速率排水,总时间应该是约4188秒,但你用I=1代入方程的话,I*t在t=5000时才是5(单位是升),也就是0.005立方米,和其他项的量级差了三个数量级,方程根本不可能在你设定的范围内满足,所以绘图自然看不到曲线。

修正后的完整代码

把I转换成立方米每秒,同时修正语法问题:

from sympy import plot_implicit, Eq, symbols, pi

R = 1  # 水箱半径(米)
I = 0.001  # 排水速率(立方米/秒,1升/秒=0.001m³/s)
t, h = symbols('t h')

# 定义隐式方程
water_level_eq = Eq(-pi/3 * h**3 + pi * R * h**2 + I * t - 4/3 * pi * R**3, 0)

# 绘制曲线,t的范围对应总排水时间(约4188秒)
plot_implicit(
    water_level_eq,
    (t, 0, 4200),
    (h, 0, 2),
    title="球形水箱水位高度随时间变化",
    xlabel="时间 t(秒)",
    ylabel="水位高度 h(米)"
)

额外验证

你可以手动验证初始条件:当t=0时,h=2R=2米,代入方程计算结果为0,符合满水状态;当t≈4188秒时,h=0,代入方程也能满足,说明方程本身是正确的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:22:33