總是感覺搞懂了畫圖,然而每次遇到復數值的時候都感覺思路不是很清晰,比如,我們想要做函式numpy.exp(1j * x)的影像,我們可以看到此時當我們帶入x值進入后會得到復數值,如果我們直接用該復數值作圖就會遇到警告資訊提示,代碼如下:
import numpy as np
import matplotlib.pyplot as plt
vertex = np.pi
x = np.linspace(-vertex, vertex, 100)
f = np.exp(1j * x)
plt.figure()
plt.plot(x, f)
plt.show()
"""
ComplexWarning: Casting complex values to real discards the imaginary part
return array(a, dtype, copy=False, order=order)
"""
我們可以看到提示資訊說我們因為使用的是復數,所以自動丟棄了虛數部分,僅僅保留了實數部分,上述代碼我們此時可以通過添加np.real()函式來消除這個警告資訊,從這里我們也可以得出,matplotlib模塊的畫圖命令要求輸入引數應該為實數,
import numpy as np
import matplotlib.pyplot as plt
vertex = np.pi
x = np.linspace(-vertex, vertex, 100)
f = np.exp(1j * x)
plt.figure()
plt.plot(x, np.real(f))
plt.show()
此時我們消除了警告提示資訊,并且成功輸出了如下影像,

不難看出這實際上是一個余弦函式,因為我們知道歐拉公式:
e
i
x
=
c
o
s
(
x
)
+
i
s
i
n
(
x
)
e^{ix}=cos(x) + isin(x)
eix=cos(x)+isin(x)
這里cos(x)是實部,sin(x)是虛部,因此當我們使用np.real(f)時,實際上我們去掉了sin(x)的部分,此時的e^{ix}函式實際變為了cos(x) ,最終不難看出,我們實際得到的影像也是cos(x) 的影像,
那么怎樣才能得到e^{ix}函式的影像呢,答案是使用np.abs(f).代碼如下:
import numpy as np
import matplotlib.pyplot as plt
vertex = np.pi
x = np.linspace(-vertex, vertex, 100)
f = np.exp(1j * x)
plt.figure()
plt.plot(x, np.abs(f))
plt.show()

可以看到我們最后獲得的結果為一條恒為1的直線,這很好理解,e^{ix}影像實際上為一個單位圓,所以它本身的長度,即值恒等于1,由此我們可以得到結論,畫圖時,如果影像輸入引數值為復數,我們想要得到原本函式影像,應該使用np.abs()函式對影像輸入引數值進行處理而不是使用np.real()函式,
碼字不易,如果大家覺得有用,請高抬貴手給一個贊讓我上推薦讓更多的人看到吧~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/244290.html
標籤:python
