亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

matplotlib.pyplot.contour 有問題

matplotlib.pyplot.contour 有問題

RISEBY 2021-12-09 18:24:25
我曾經matplotlib.pyplot.contour畫過一條線,但結果很奇怪。我的python代碼:import numpy as npfrom matplotlib import pyplot as pltN = 1000E = 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 時,結果就不同了。Mathematica 代碼是:ContourPlot[Sqrt[-en] == -Sqrt[en + V]/Tan[Sqrt[en + V]], {V, 0, 70}, {en, -5, 0}]結果是:我想要的結果是 Mathematica 的結果。為什么會matplotlib.pyplot.contour給出錯誤的結果?我很困擾!如果您能給我一些想法,將不勝感激!非常感謝!
查看完整描述

1 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

給出的結果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()

http://img1.sycdn.imooc.com//61b1d9890001b56204130297.jpg

你會在兩極得到一條線。這是因為后續的點是相連的。

您可以通過使用np.inf大于特定數字的點來規避此問題。例如添加

y[np.abs(y)> 200] = np.inf

會導致

http://img1.sycdn.imooc.com//61b1d991000164a804000308.jpg

相同的方法可用于輪廓。


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

http://img1.sycdn.imooc.com//61b1d99c000119d104090305.jpg

查看完整回答
反對 回復 2021-12-09
  • 1 回答
  • 0 關注
  • 317 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號