我给了一个球形罐(半径R = 1米),完全充满水。当我打开底部的水箱时,水以每秒1升的速度流出。我想要的是将填充高度h绘制为时间t的函数。 我最终得到了一个隐含的等式,它不能被分析解析为h(至少我被告知,但没有时间进行数学运算):
- pi/3 * h**3 + pi * R * h**2 + I*t - 4/3 * pi * R**3 = 0
Sympy doc和其他线程说,plot_implicit是绘制隐式方程的函数。听起来很有希望。
这就是我所拥有的:
from sympy import plot_implicit, Eq, symbols, pi
R, I = 1, 1
t, h = symbols('t h')
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 w/ specified ranges
当我删除范围参数时,我得到了一些荒谬的东西: plot w/o specified ranges
根本不是事实图应该是什么样子。我做错了什么?
答案 0 :(得分:1)
情节在那里,它只是挤在左边的一条微弱的蓝线上,因为你的窗户严重缩放。在你的等式中,
-pi/3*h**3 + pi*h**2 + t - 4/3*pi = 0
没有t的条件是0到10的顺序,因为h在0到2之间。所以在窗口(h,0,2)中,没有必要让它达到5000.一个合理的窗口会be(t,0,5),(h,0,2):
这是图表的一部分,如果不提供边界,你会看到它;你称之为“无意义的”#34;但这是正确的。在左边弯曲的曲线的粗细是算法的伪像,但可以通过将depth
参数从默认值0增加来减少它,如下所述。
对于某些t(低于4)的值,h有三种解。你不想要负h,但这仍然留下两个解决方案。对于较大的t,有一种解决方案,但您需要垂直展开窗口才能看到它。
用
制作plot_implicit(Eq(-pi/3*h**3 + pi*R*h**2 + I*t - 4/3*pi*R**3, 0), (t, 0, 10), (h, 0, 4), depth=2)