matplotlib.pyplot.contour 有问题

我曾经matplotlib.pyplot.contour画过一条线,但结果很奇怪。

我的python代码:


import numpy as np

from matplotlib import pyplot as plt


N = 1000


E = np.linspace(-5,0,N)

V = np.linspace(0, 70,N)

E, V = np.meshgrid(E, V)


L = np.sqrt(-E)

R = -np.sqrt(E+V)/np.tan(np.sqrt(E+V))


plt.contour(V, E,(L-R),levels=[0])

plt.show()

结果是:

http://img1.mukewang.com/61b1d969000112fd05840437.jpg

但是当我使用 Mathematica 时,结果就不同了。
Mathematica 代码是:

ContourPlot[Sqrt[-en] == -Sqrt[en + V]/Tan[Sqrt[en + V]], {V, 0, 70}, {en, -5, 0}]

结果是:

http://img2.mukewang.com/61b1d9790001d98408410840.jpg

我想要的结果是 Mathematica 的结果。

为什么会matplotlib.pyplot.contour给出错误的结果?我很困扰!

如果您能给我一些想法,将不胜感激!非常感谢!


RISEBY
浏览 288回答 1
1回答

温温酱

给出的结果matplotlib.pyplot.contour在数值上是正确的,但在数学上是错误的。如果您只是绘制 ,请检查会发生什么tan(x):import numpy as npfrom matplotlib import pyplot as pltx = np.linspace(0,2*np.pi,1000)y = np.tan(x)plt.plot(x,y)plt.show()你会在两极得到一条线。这是因为后续的点是相连的。您可以通过使用np.inf大于特定数字的点来规避此问题。例如添加y[np.abs(y)> 200] = np.inf会导致相同的方法可用于轮廓。import numpy as npfrom matplotlib import pyplot as pltN = 1000x = np.linspace(0, 70,N)y = np.linspace(-5,0,N)X,Y = np.meshgrid(x, y)F = np.sqrt(-Y) + np.sqrt(Y+X)/np.tan(np.sqrt(Y+X))F[np.abs(F) > 200] = np.infplt.contour(X, Y, F, levels=[0])plt.show()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python