[英]Matplotlib not plotting the imaginary side of the axis
我試圖繪制這個冪律方程:
這是我的代碼。 但是,當n < 1
,繪圖僅繪制方程的一側(實側而不是虛側)。 如何繪制虛側(當n < 1
)?
import numpy as np
from matplotlib import pyplot as plt
n = 0.4
k = 0.479862
p = 9470
r = np.linspace(-0.0127, 0.0127, 500)
d = 0.0254
u = (n/n+1)*(p/(2*k))** (1/n)*(d**((n+1)/n) - r**((n+1)/n))
plt.xlabel('Radius m')
plt.ylabel('Velocity l/min')
plt.plot(r, u)
n = 0.4
繪圖
它應該看起來類似於這個n=1
或牛頓圖
這個問題與n
是否小於 1 無關。 每當(n+1)/n
不是完美整數時就會出現問題。 然后, r**((n+1)/n)
對於浮點數沒有明確定義,對於負r
,如在這篇文章中解釋的那樣。 只需嘗試n = 2
,您就會注意到它也沒有任何負值r
的值。
另請注意,您的 Python 公式以(n/n+1)
開頭,而您的數學公式以(n/(n+1))
開頭。
要繪制對稱曲線,您可能只需復制和鏡像正部分。
import numpy as np
from matplotlib import pyplot as plt
n = 0.4
k = 0.479862
p = 9470
r = np.linspace(0, 0.0127, 100)
d = 0.0254
u = (n/(n+1))*(p/(2*k))** (1/n)*(d**((n+1)/n) - r**((n+1)/n))
plt.xlabel('Radius m')
plt.ylabel('Velocity l/min')
plt.plot(np.concatenate([-r[::-1], r]), np.concatenate ([u[::-1], u]))
plt.show()
這是結果曲線,公式的第一個因子經過調整( n/(n+1)
),對於n=0.4
。
或者,您可以將所有內容轉換為復數,並分別繪制它們的實部和虛部。 因此,您使用r.astype(np.complex)
轉換r
。 和np.imag(u)
得到的虛部u
。
import numpy as np
from matplotlib import pyplot as plt
n = 0.4
k = 0.479862
p = 9470
r = np.linspace(-0.02, 0.02, 500)
r = r.astype(np.complex)
d = 0.0254
u = n / (n + 1) * (p / (2 * k)) ** (1 / n) * (d ** ((n + 1) / n) - r ** ((n + 1) / n))
plt.xlabel('Radius m')
plt.ylabel('Velocity l/min')
plt.plot(r, u, color='dodgerblue', label='real part')
plt.plot(r, np.imag(u), color='crimson', label='imaginary part')
plt.legend()
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.