複數
如果您已經學習過複數相關知識,請跳過本頁面。
學習複數知識需要一部分向量基礎,如果並未學習過向量知識請移步 向量頁面。
複數
引入
注
下面的引入方法來自人教版高中數學 A 版必修二。
從方程的角度看,負實數能不能開平方,就是方程 \(x^2+a=0 (a>0)\) 有沒有解,進而可以歸結為方程 \(x^2+1=0\) 有沒有解。
回顧已有的數集擴充過程,可以看到,每次擴充都與實際需求密切相關。例如,為了解決正方形對角線的度量,以及 \(x^2-2=0\) 這樣的方程在有理數集中無解的問題,人們把有理數集擴充到了實數集。數集擴充後,在實數集中規定的加法運算、乘法運算,與原來在有理數集中規定的加法運算、乘法運算協調一致,並且加法和乘法都滿足交換律和結合律,乘法對加法滿足分配律。
依照這種思想,為了解決 \(x^2+1=0\) 這樣的方程在實數系中無解的問題,我們設想引入一個新數 \(\mathrm{i}\),使得 \(x=\mathrm{i}\) 是方程 \(x^2+1=0\) 的解,即使得 \(\mathrm{i}^2=-1\)。
思考:把新引進的數 \(\mathrm{i}\) 添加到實數集中,我們希望數 \(\mathrm{i}\) 和實數之間仍然能像實數那樣進行加法和乘法運算,並希望加法和乘法都滿足交換律、結合律,以及乘法對加法滿足分配律。那麼,實數系經過擴充後,得到的新數系由哪些數組成呢?
依照以上設想,把實數 \(b\) 與 \(\mathrm{i}\) 相乘,結果記作 \(b\mathrm{i}\);把實數 \(a\) 與 \(b\mathrm{i}\) 相加,結果記作 \(a+b\mathrm{i}\)。注意到所有實數以及 \(\mathrm{i}\) 都可以寫成 \(a+b\mathrm{i}(a,b\in \mathbf{R})\) 的形式,從而這些數都在擴充後的新數集中。
定義
我們定義形如 \(a+b\mathrm{i}\),其中 \(a,b\in \mathbf{R}\) 的數叫做 複數,其中 \(\mathrm{i}\) 被稱為 虛數單位,全體複數的集合叫做 複數集,記作 \(\mathbf{C}\)。
複數通常用 \(z\) 表示,即 \(z=a+b\mathrm{i}\)。這種形式被稱為 複數的代數形式。其中 \(a\) 稱為複數 \(z\) 的 實部,記作 \(\operatorname{Re}(z)\),\(b\) 稱為複數 \(z\) 的 虛部,記作 \(\operatorname{Im}(z)\)。如無特殊説明,都有 \(a,b\in \mathbf{R}\)。
對於一個複數 \(z\),當且僅當 \(b=0\) 時,它是實數,當 \(b\not = 0\) 時,它是虛數,當 \(a=0\) 且 \(b\not = 0\) 時,它是純虛數。
純虛數,虛數,實數,複數的關係如下圖所示。
性質與運算
幾何意義
我們知道了 \(a+b\mathrm{i}\) 這樣類似的形式的數被稱為複數,並且給出了定義和分類,我們還可以挖掘一下更深層的性質。
我們把所有實數都放在了數軸上,並且發現數軸上的點與實數一一對應。我們考慮對複數也這樣處理。
首先我們定義 複數相等:兩個複數 \(z_1=a+b\mathrm{i},z_2=c+d\mathrm{i}\) 是相等的,當且僅當 \(a=c\) 且 \(b=d\)。
這麼定義是十分自然的,在此不做過多解釋。
也就是説,我們可以用唯一的有序實數對 \((a,b)\) 表示一個複數 \(z=a+b\mathrm{i}\)。這樣,聯想到平面直角座標系,我們可以發現 複數集與平面直角座標系中的點集一一對應。好了,我們找到了複數的一種幾何意義。
那麼這個平面直角座標系就不再一般,因為平面直角座標系中的點具有了特殊意義——表示一個複數,所以我們把這樣的平面直角座標系稱為 複平面,\(x\) 軸稱為 實軸,\(y\) 軸稱為 虛軸。我們進一步地説:複數集與複平面內所有的點所構成的集合是一一對應的。
我們考慮到學過的平面向量的知識,發現向量的座標表示也是一個有序實數對 \((a,b)\),顯然,複數 \(z=a+b\mathrm{i}\) 對應複平面內的點 \(Z(a,b)\),那麼它還對應平面向量 \(\overrightarrow{OZ}=(a,b)\),於是我們又找到了複數的另一種幾何意義:複數集與複平面內的向量所構成的集合是一一對應的(實數 \(0\) 與零向量對應)。
於是,我們由向量的知識遷移到複數上來,定義 複數的模 就是複數所對應的向量的模。複數 \(z=a+b\mathrm{i}\) 的模 \(|z|=\sqrt{a^2+b^2}\)。
於是為了方便,我們常把複數 \(z=a+b\mathrm{i}\) 稱為點 \(Z\) 或向量 \(\overrightarrow {OZ}\),並規定相等的向量表示同一個複數。
並且由向量的知識我們發現,虛數不可以比較大小(但是實數是可以的)。
加法與減法
對複數 \(z_1=a+b\mathrm{i},z_2=c+d\mathrm{i}\),定義加法規則如下:
很明顯,兩個複數的和仍為複數。
考慮到向量的加法運算,我們發現複數的加法運算符合向量的加法運算法則,這同樣證明了複數的幾何意義的正確性。
同樣可以驗證,複數的加法滿足 交換律 和 結合律。即:
減法作為加法的逆運算,我們可以通過加法法則與複數相等的定義來推導出減法法則:
這同樣符合向量的減法運算。
乘法、除法與共軛
對複數 \(z_1=a+b\mathrm{i},z_2=c+d\mathrm{i}\),定義乘法規則如下:
可以看出,兩個複數相乘類似於兩個多項式相乘,只需要把 \(\mathrm{i}^2\) 換成 \(-1\),並將實部與虛部分別合併即可。
複數的乘法與向量的向量積形式類似。
易得複數乘法滿足 交換律,結合律 和 對加法的分配律,即:
- \(z_1z_2=z_2z_1\)
- \((z_1z_2)z_3=z_1(z_2z_3)\)
- \(z_1(z_2+z_3)=z_1z_2+z_1z_3\)
由於滿足運算律,我們可以發現實數域中的 乘法公式在複數域中同樣適用。
除法運算是乘法運算的逆運算,我們可以推導一下:
由於向量沒有除法,這裏不討論與向量的關係。
為了分母實數化,我們乘了一個 \(c-d\mathrm{i}\),這個式子很有意義。
對複數 \(z=a+b\mathrm{i}\),稱 \(a-b\mathrm{i}\) 為 \(z\) 的 共軛複數,通常記為 \(\bar z\)。我們可以發現,若兩個複數互為共軛複數,那麼它們 關於實軸對稱。
對複數 \(z,w\),複數共軛有如下性質
- \(z\cdot\bar{z}=|z|^2\)
- \(\overline{\overline{z}}=z\)
- \(\operatorname{Re}(z)=\dfrac{z+\bar{z}}{2}\),\(\operatorname{Im}(z)=\dfrac{z-\bar{z}}{2}\)
- \(\overline{z\pm w}=\bar{z}\pm\bar{w}\)
- \(\overline{zw}=\bar{z}\bar{w}\)
- \(\overline{z/w}=\bar{z}/\bar{w}\)
輻角和輻角主值
如果設定實數單位 \(1\) 作為水平正方向,虛數單位 \(\mathrm{i}\) 作為豎直正方向,得到的就是直角座標視角下的複平面。
表示複數 \(z\) 的位置,也可以藉助於極座標 \((r, \theta)\) 確定。前文已經提到了 \(r\) 為複數 \(z\) 的模。
從實軸正向到 非零 複數 \(z=x+\mathrm{i}y\) 對應向量的夾角 \(\theta\) 滿足關係:
稱為複數 \(z\) 的 輻角,記為:
任一個 非零 複數 \(z\) 有無窮多個輻角,故 \(\operatorname{Arg} z\) 事實上是一個集合。藉助開頭小寫的 \(\operatorname{arg} z\) 表示 其中一個特定值,滿足條件:
稱 \(\operatorname{arg} z\) 為 輻角主值 或 主輻角。輻角就是輻角主值基礎上加若干整數個(可以為零或負整數)\(2k\pi\),即 \(\operatorname{Arg} z = \{\operatorname{arg} z + 2k\pi \mid k\in \mathbf Z\}\)。
需要注意的是兩個輻角主值相加後不一定還是輻角主值,而兩個輻角相加一定還是合法的輻角。
稱模小於 \(1\) 的複數,在複平面上構成的圖形為 單位圓。稱模等於 \(1\) 的複數為 單位複數,全體單位複數在複平面上構成的圖形為 單位圓周。在不引起混淆的情況下,有時單位圓周也簡稱單位圓。
在極座標的視角下,複數的乘除法變得很簡單。複數乘法,模相乘,輻角相加。複數除法,模相除,輻角相減。
歐拉公式
歐拉公式(Euler's formula)1
對任意實數 \(x\),有
在補充 復指數函數與復三角函數 的定義後,該公式可推廣至全體複數。
指數函數與三角函數
對於複數 \(z=x+\mathrm{i}y\),函數 \(f(z)=\mathrm{e}^x(\cos y+\mathrm{i}\sin y)\) 滿足 \(f(z_1+z_2)=f(z_1)f(z_2)\)。由此給出 復指數函數 的定義:
復指數函數在實數集上與實指數函數的定義完全一致。在複平面上擁有性質:
- 模恆正:\(|\operatorname{exp} z|=\operatorname{exp} x>0\)。
- 輻角主值:\(\operatorname{arg} \operatorname{exp} z=y\)。
- 加法定理:\(\operatorname{exp} (z_1+z_2)=\operatorname{exp} (z_1)\operatorname{exp} (z_2)\)。
- 週期性:\(\operatorname{exp} z\) 是以 \(2\pi \mathrm{i}\) 為基本週期的週期函數。如果一個函數 \(f(z)\) 的週期是某一週期的整倍數,稱該週期為 基本週期。
復三角函數(也簡稱 三角函數)的定義如下:
若取 \(z\in\mathbf{R}\),則由 歐拉公式 有:
復三角函數在實數集上與實三角函數的定義完全一致。在複平面上擁有性質:
- 奇偶性:正弦函數是奇函數,餘弦函數是偶函數。
- 三角恆等式:通常的三角恆等式都成立,例如平方和為 \(1\),或者角的和差公式等。
- 週期性:正弦與餘弦函數以 \(2\pi\) 為基本週期。
- 零點:實正弦與實餘弦函數的全體零點,構成了復正弦與復餘弦函數的全體零點。這個推廣沒有引進新的零點。
- 模的無界性:復正弦與復餘弦函數,模長可以大於任意給定的正數,不再像實正弦與實餘弦函數一樣被限制在 \(1\) 的範圍內。
複數的三種形式
藉助直角座標系的視角以及極座標系的視角,可以寫出複數的三種形式。
複數的 代數形式 用於表示任意複數。
代數形式用於計算複數的加減乘除四個運算比較方便。
複數的 三角形式 和 指數形式,用於表示非零複數。
這兩種形式用於計算複數的乘除兩個運算以及後面的運算較為方便。如果只用高中見過的函數,可以使用三角形式。如果引入了復指數函數,寫成等價的指數形式會更加方便。
單位根
稱 \(x^n=1\) 在複數意義下的解是 \(n\) 次復根。顯然,這樣的解有 \(n\) 個,稱這 \(n\) 個解都是 \(n\) 次 單位根 或 單位復根(the \(n\)-th root of unity)。根據複平面的知識,\(n\) 次單位根把單位圓 \(n\) 等分。
設 \(\omega_n=\operatorname{exp} \frac{2\pi \mathrm{i}}{n}\)(即幅角為 \(2\frac \pi n\) 的單位複數),則 \(x^n=1\) 的解集表示為 \(\{\omega_n^k\mid k=0,1\cdots,n-1\}\)。
如果不加説明,一般敍述的 \(n\) 次單位根,是指從 \(1\) 開始逆時針方向的第一個解,即上述 \(\omega_n\),其它解均可以用 \(\omega_n\) 的冪表示。
性質
單位根有三個重要的性質。對於任意正整數 \(n\) 和整數 \(k\):
推導留給讀者自證。這三個性質在快速傅里葉變換中會得到應用。
本原單位根
為什麼説,上述 \(n\) 個解都是 \(n\) 次單位根,而平時説的 \(n\) 次單位根一般特指第一個?
特指第一個,是為了在應用時方便。
在解方程的視角看來,滿足 \(\omega_n\) 性質的不止 \(\omega_n\) 一個,對於 \(\omega_n\) 的若干次冪也會滿足性質。
稱集合:
中的元素為 本原單位根。任意一個本原單位根 \(\omega\),與上述 \(\omega_n\) 具有相同的性質:對於任意的 \(0<k<n\),\(\omega\) 的 \(k\) 次冪不為 \(1\)。因此,藉助任意一個本原單位根,都可以生成全體單位根。
全體 \(n\) 次本原單位根共有 \(\varphi(n)\) 個。
編程語言中的複數
C 中的複數
在 C99 標準中,有 <complex.h> 頭文件。
在 <complex.h> 頭文件中,提供了 double complex、float complex 和 long double complex 三種類型。
算術運算符'+'、'-'、'*'和'/',可以用於浮點數和複數的任意混合。當表達式兩端有一個為複數時,計算結果為複數。
頭文件 <complex.h> 提供了虛數單位 I,引入此頭文件時,大寫字母 I 不可以作為變量名使用。
對於單個複數,<complex.h> 提供了若干操作:creal 函數用於提取實部,cimag 函數用於提取虛部,cabs 函數用於計算模,carg 函數用於計算輻角主值。
所有的函數根據類型不同,都有三個。例如 creal 函數有 creal、crealf、creall 三個,用於處理對應的 double、float 和 long double 三種類型。末尾什麼都不帶的默認處理 double 類型。以下所有函數均遵從此規律,不再特別説明。
這些函數返回值都是一般的浮點數。可以將普通浮點數直接賦值給複數,但是不可以將複數直接賦值給浮點數,而是需要使用上述提取操作。
函數 conj 用於計算共軛複數,返回值是複數。
函數 cexp 計算復指數,clog 計算對數主值,csin 計算正弦,ccos 計算餘弦,ctan 計算正切。
函數 cpow 計算冪函數,csqrt 計算平方根,casin 計算反正弦,cacos 計算反餘弦,ctan 計算反正切。這部分函數計算的全部都是多值函數的主值。
C++ 中的複數
在 C 裏面的 <ctype.h>,到 C++ 會變成 <cctype>,幾乎所有的頭文件遵從這個命名規律。
但是,<complex.h> 不遵守,C++ 沒有 <ccomplex> 頭文件。C++ 的複數直接是 <complex>,並且裝的東西和 C 完全不一樣。
很有趣。這是因為,在 C++ 的第一個版本 C++98,即已經有了 <complex>,而 C 語言在 C99 才添加。
在 C++ 中,複數類型定義使用 complex<float>、complex<double> 和 complex<long double>。由於面向對象的多態性,下面函數的名字都是唯一的,無需 f 或 l 的後綴。
一個複數對象擁有成員函數 real 和 imag,可以訪問實部和虛部。
一個複數對象擁有非成員函數 real、imag、abs、arg,返回實部、虛部、模和輻角。
一個複數對象還擁有非成員函數:norm 為模的平方,conj 為共軛複數。
一個複數對象還擁有非成員函數 exp、log(底為 \(\mathrm{e}\) 的對數主值)、log10(底為 10 的對數主值,C 中沒有)、pow、sqrt、sin、cos、tan,含義與 C 中的含義相同。
在 C++14 及以後的版本中,定義了 字面量運算符 std::literals::complex_literals::""if, ""i, ""il。例如輸入 100if、100i 和 100il,三者將分別返回 std::complex<float>{0.0f, 100.0f}、std::complex<double>{0.0, 100.0} 以及 std::complex<long double>{0.0l, 100.0l}。這使得我們可以方便地書寫形如 auto z = 4 + 3i 的複數聲明。
參考資料與鏈接
- Complex number - Wikipedia
- Euler's formula - Wikipedia
- Complex number arithmetic - cppreference.com
- std::complex - cppreference.com
-
有關歐拉公式的更多介紹,可以參考兩個視頻:歐拉公式與初等羣論、微分方程概論 - 第五章:在 3.14 分鐘內理解 \(\mathrm{e}^{\mathrm{i}\pi}\)。 ↩
本页面最近更新:,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:OI-wiki
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用