使用plot_implicit(sympy)

时间:2018-01-06 14:50:29

标签: python plot sympy

我给了一个球形罐(半径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

根本不是事实图应该是什么样子。我做错了什么?

1 个答案:

答案 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):

enter image description here

这是图表的一部分,如果不提供边界,你会看到它;你称之为“无意义的”#34;但这是正确的。在左边弯曲的曲线的粗细是算法的伪像,但可以通过将depth参数从默认值0增加来减少它,如下所述。

对于某些t(低于4)的值,h有三种解。你不想要负h,但这仍然留下两个解决方案。对于较大的t,有一种解决方案,但您需要垂直展开窗口才能看到它。

enter image description here

制作
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)