筆者本身是電氣工程及其自動(dòng)化專業(yè)出身贝咙,在平時(shí)的工作學(xué)習(xí)過程中趴樱,經(jīng)常需要進(jìn)行復(fù)數(shù)的運(yùn)算以及矩陣相關(guān)的運(yùn)算咏瑟,但是奈何我實(shí)在是用不習(xí)慣matlab檐涝,一方面遏匆,matlab軟件動(dòng)輒十幾個(gè)G這么大;另一方面谁榜,并且在嵌入式系統(tǒng)或者樹莓派之類的系統(tǒng)上幅聘,更是不可能安裝matlab這樣的軟件,因此窃植,筆者便著手于Python語言的科學(xué)計(jì)算能力的探索帝蒿。
復(fù)數(shù)運(yùn)算
在數(shù)學(xué)上,形如a + bi 或者在工程上形如 a + bj的數(shù)叫做復(fù)數(shù)巷怜,a稱為實(shí)部葛超,b稱為虛部。
在python語言中延塑,遵循工程上的定義形式绣张,直接在python文本中輸入
x = 1 + 1j
不需要額外引入任何庫文件,直接這樣輸入就實(shí)現(xiàn)了復(fù)數(shù)變量的定義
print(type(x))
print(x)
通過print方法我們輸出變量x的數(shù)據(jù)類型和x變量的值
<class 'complex'>
(1+1j)
輸出結(jié)果如上圖所示关带,不難發(fā)現(xiàn)侥涵,變量x屬于python中的復(fù)數(shù)類型。特別值得注意的是
1宋雏、虛數(shù)不能單獨(dú)存在芜飘,它們總是和一個(gè)值為 0.0 的實(shí)數(shù)部分一起構(gòu)成一個(gè)復(fù)數(shù)
2、復(fù)數(shù)由實(shí)數(shù)部分和虛數(shù)部分構(gòu)成
3磨总、表示虛數(shù)的語法:re+im j
4嗦明、實(shí)數(shù)部分和虛數(shù)部分都是浮點(diǎn)數(shù)
5、虛數(shù)部分必須有后綴j或J
這樣我們就可以把復(fù)數(shù)當(dāng)作普通的數(shù)值進(jìn)行運(yùn)算了蚪燕。
但是很多時(shí)候娶牌,我們可能需要求得某個(gè)復(fù)數(shù)的共軛復(fù)數(shù)或者模值甚至是轉(zhuǎn)換為極坐標(biāo)形式奔浅。
求共軛復(fù)數(shù)
對(duì)于python內(nèi)置的complex類來說,可以通過調(diào)用conjugate()
方法求得某個(gè)復(fù)數(shù)的共軛復(fù)數(shù)
x = 1 + 1j
y = x.conjugate()
print(y)
這樣我們就可以得到
(1-1j)
符合我們的預(yù)期
求復(fù)數(shù)模值
通過調(diào)用python內(nèi)置的complex類里面的__abs__()
方法裙戏,可以得到某個(gè)復(fù)數(shù)的模值
x = 1 + 1j
y = x.__abs__()
print(y)
這樣我們就得到了模值
1.4142135623730951
將復(fù)數(shù)進(jìn)行標(biāo)準(zhǔn)形式與極坐標(biāo)模式的互換
目前在python內(nèi)置的complex類型中,沒有辦法直接通過調(diào)用方法進(jìn)行互換厕诡,因此我們需要引入cmath標(biāo)準(zhǔn)庫累榜。
from cmath import *
引入完cmath標(biāo)準(zhǔn)庫之后,就可以調(diào)用rect()
方法和polar()
方法灵嫌,前者是將一個(gè)極坐標(biāo)形式的復(fù)數(shù)轉(zhuǎn)換為標(biāo)準(zhǔn)形式的復(fù)數(shù)壹罚;后者是將一個(gè)標(biāo)準(zhǔn)形式的復(fù)數(shù)轉(zhuǎn)換為極坐標(biāo)形式的復(fù)數(shù)
x = 1 + 1j
a = polar(x)
print(a)
上面的代碼可以將變量x轉(zhuǎn)換為極坐標(biāo)形式的復(fù)數(shù),其輸出結(jié)果如下所示:
(1.4142135623730951, 0.7853981633974483)
返回值是一個(gè)元組類型寿羞,第一項(xiàng)是模值猖凛,第二項(xiàng)是相角,相角采用的是弧度制绪穆,這一點(diǎn)需要特別注意辨泳!
接下來我們嘗試將極坐標(biāo)形式的復(fù)數(shù)轉(zhuǎn)換為標(biāo)準(zhǔn)形式的復(fù)數(shù),因此我們需要調(diào)用
rect()
方法玖院,這個(gè)方法需要接收兩個(gè)參數(shù),第一個(gè)參數(shù)是幅值菠红,第二個(gè)參數(shù)是相角,這里面的相角也是弧度制难菌,例如下面的代碼將上面例子中的極坐標(biāo)形式的變量a轉(zhuǎn)換為標(biāo)準(zhǔn)形式的復(fù)數(shù)
x = 1 + 1j
a = polar(x) # 轉(zhuǎn)換為極坐標(biāo)形式
b = rect(a[0], a[1]) # 轉(zhuǎn)換為標(biāo)準(zhǔn)形式
print(b) # 輸出變量b的值
print(type(b)) # 輸出變量b的類型
輸出結(jié)果如下所示:
(1.0000000000000002+1.0000000000000002j)
<class 'complex'>
可以看到輸出結(jié)果符合預(yù)期试溯,至于并不絕對(duì)等于原來x變量的原因還是因?yàn)橛?jì)算機(jī)對(duì)浮點(diǎn)數(shù)的精度影響,實(shí)際使用過程中忽略就可以了郊酒。
通過輸出變量b的類型遇绞,我們發(fā)現(xiàn)變成了python內(nèi)置的complex類型,因此可以繼續(xù)參與后續(xù)的數(shù)學(xué)運(yùn)算了燎窘!