2013-10-17 38 views
2

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

+0

这是什么帮助我http://stackoverflow.com/questions/12935098/how-to-plot-line-polygonal-chain-with-numpy-scipy-matplotlib-with-minimal-smoo – Jag

+0

^不完全是什么我在找,但谢谢你! – MYV

回答

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

黑线是你想要的。轮廓只是为了显示函数的行为如何。optimize.fmin()不是最有效的求解器,只是简单一些。

xy的绝对值很大时,您基本上可以绘制x+0.4496y=0,您不需要执行上述所有操作。

0

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