假设我具有如下功能:
a*x^2 + b*y^2 + c*x + d*y + e = 0
如何绘制由该方程式定义的曲线?例如,对于x^2 + y^2 - 1= 0
,我希望绘制一个圆。
我发现没有函数可以绘制这样的方程式。就x
而言,可以绘制的方程通常采用多项式函数的形式:
y = a*x^n + ....
,另一个问题的答案是:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
x = np.arange(-5, 5, 0.25)
y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(x, y)
F = 3 + 2*X + 4*X*Y + 5*X*X
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, F)
plt.show()
这是三维的二维表面,而我需要二维的曲线。
答案 0 :(得分:2)
您需要的是与0值相对应的2d曲面的水平集。您应该使用pyplot.contour
来减轻工作中的艰苦工作。您只需要定义感兴趣的范围和网格上的功能即可。修改问题中的示例代码:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(x, y)
F = 5*X**2 - 4*X*Y + 2*Y**2 + 3*X - 4*Y - 1
fig,ax = plt.subplots()
ax.contour(X, Y, F, levels=[0]) # take level set corresponding to 0
plt.show()
网格越细,轮廓线越平滑。