python - 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()
结果是:
但是当我使用 Mathematica 时,结果就不同了。
数学代码是:
ContourPlot[Sqrt[-en] == -Sqrt[en + V]/Tan[Sqrt[en + V]], {V, 0, 70}, {en, -5, 0}]
结果是:
我想要的结果是 Mathematica 的结果。
为什么会matplotlib.pyplot.contour
给出错误的结果?我很困扰!
如果您能给我一些想法,将不胜感激!非常感谢!
解决方案
给出的结果matplotlib.pyplot.contour
在数值上是正确的,但在数学上是错误的。
检查如果您简单地绘制会发生什么tan(x)
:
import numpy as np
from matplotlib import pyplot as plt
x = 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 np
from matplotlib import pyplot as plt
N = 1000
x = 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.inf
plt.contour(X, Y, F, levels=[0])
plt.show()
推荐阅读
- azure - 如何使用 REST API 创建事件网格域主题订阅?
- spring - Spring Boot 多模块 - 相互依赖
- python - 正则表达式:替换除数字、特定字符和特定单词之外的所有内容
- polymer-3.x - Polymer-3.x .. 无法通过对纸张切换按钮的对象引用将 JSON 中的值绑定
- html - 单击laravel中的添加到购物车按钮时如何将商品显示到购物车中?
- python - Tesseract OCR 产生空结果
- android - 使用 Fire Base 身份验证进行 Android 的 Facebook 登录有什么好处
- node.js - 无法显示来自节点服务器的响应消息
- javascript - 我如何使 document.location.href 表现得像一个简单的链接?
- c - 每次调用函数时如何创建新字符串以用作键?