2013-10-17 39 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象限跨越