如何使用matplotlib绘制非线性函数?

时间:2013-10-17 09:22:37

标签: python matplotlib

我想使用matplotlib绘制一个通用的三次函数曲线。我想绘制由以下函数定义的曲线:x ^ 3 + y ^ 3 + y ^ 2 + 2xy ^ 2 = 0.这可能吗?

2 个答案:

答案 0 :(得分:4)

这样做的一个显而易见的方法是通过数字求解方程式,找到(x,y)对满足关系。

from scipy import optimize
f=lambda x, y: (x**3+y**3+y**2+2*x*y*y-0)**2
y_range=linspace(-1, 1, 100)
x_range=[optimize.fmin(f,0,args=(y,), disp=0) for y in y_range]
xr=linspace(-1,1)
yr=linspace(-1,1)
X, Y=meshgrid(xr, yr)
Z=f(X, Y)
plt.plot(x_range, y_range, 'k')
plt.contourf(xr, yr, Z, levels=linspace(0,0.001,51), alpha=0.5)
plt.colorbar()

enter image description here

黑线就是你想要的。轮廓只是为了显示函数在0左右的行为。optimize.fmin()不是这里最有效的求解器,只是保持简单。

xy的绝对值很大时,您实际上是在绘制x+0.4496y=0,并且您不需要执行上述所有操作。

答案 1 :(得分:0)

我的2美分:
的x ^ 3 + Y ^ 3 + Y ^ 2 + 2XY ^ 2 = 0
Y 1 2 = -x ^ 3-Y ^ 3-2xy ^ 2
y ^ 2> 0 => -x ^ 3-y ^ 3-2xy ^ 2> 0 => x ^ 3 + y ^ 3 + 2xy ^ 2< 0 =>
x(x ^ 2 + 2y ^ 2)+ y ^ 3< 0 => x(x ^ 2 + 2y ^ 2)< -y ^ 3 => (X ^ 2 + 2Y ^ 2)< -y ^ 3 / X
0 <(x ^ 2 + 2y ^ 2)=&gt; 0 <-y ^ 3 / x =&gt; 0> y ^ 3 / x =&gt;
(x> 0&amp;&amp; y&lt; 0)|| (x <0&amp; y> 0)
您的图表将跨越第2和第4象限