2

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

4

2 回答 2

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()

在此处输入图像描述

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

x当or的绝对值y很大时,您实际上是在绘图x+0.4496y=0,您不需要执行以上所有这些操作。

于 2013-10-18T04:01:56.620 回答
0

我的 2 美分:
x^3+y^3+y^2+2xy^2=0
y^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) => 0<-y^3/x => 0 >y^3/x =>
(x>0 && y<0) || (x<0 && y>0)
您的图表将跨越第二和第四象限

于 2013-10-17T09:36:31.597 回答