天天看點

java虛數複數計算_虛部?從搞懂虛數開始....

本文轉自公衆号 imath, 作者 阮一峰。

一直覺得虛數(imaginary number)很難懂。

中學老師說,虛數就是-1的平方根。

可是,什麼數的平方等于-1呢?電腦直接顯示出錯!

直到今天,我也沒有搞懂。誰能解釋,虛數到底是什麼?它有什麼用?

對于虛數,很多童鞋都有上面的疑問,有人推薦了一篇非常棒的文章《虛數的圖解》。我讀後恍然大悟,醍醐灌頂,原來虛數這麼簡單,一點也不奇怪和難懂!下面,我就用自己的語言,講述我所了解的虛數。

一什麼是虛數

首先,假設有一根數軸,上面有兩個反向的點: 1和-1。

java虛數複數計算_虛部?從搞懂虛數開始....

這根數軸的正向部分,可以繞原點旋轉。顯然,逆時針旋轉180度, 1就會變成-1。

java虛數複數計算_虛部?從搞懂虛數開始....

這相當于兩次逆時針旋轉90度。

java虛數複數計算_虛部?從搞懂虛數開始....

是以,我們可以得到下面的關系式:

( 1) * (逆時針旋轉90度) * (逆時針旋轉90度) = (-1)

如果把 1消去,這個式子就變為:

(逆時針旋轉90度)^2 = (-1)

将'逆時針旋轉90度'記為 i :

i^2 = (-1)

這個式子很眼熟,它就是虛數的定義公式。

是以,我們可以知道,虛數 i 就是逆時針旋轉90度,i 不是一個數,而是一個旋轉量。

二複數的定義

既然 i 表示旋轉量,我們就可以用 i ,表示任何實數的旋轉狀态。

java虛數複數計算_虛部?從搞懂虛數開始....

将實數軸看作橫軸,虛數軸看作縱軸,就構成了一個二維平面。旋轉到某一個角度的任何正實數,必然唯一對應這個平面中的某個點。

隻要确定橫坐标和縱坐标,比如( 1 , i ),就可以确定某個實數的旋轉量(45度)。

數學家用一種特殊的表示方法,表示這個二維坐标:用 号把橫坐标和縱坐标連接配接起來。比如,把 ( 1 , i ) 表示成 1 i 。這種表示方法就叫做複數(complex number),其中 1 稱為實數部,i 稱為虛數部。

為什麼要把二維坐标表示成這樣呢,下一節告訴你原因。

三虛數的作用:加法

虛數的引入,大大友善了涉及到旋轉的計算。

java虛數複數計算_虛部?從搞懂虛數開始....

比如,實體學需要計算'力的合成'。假定一個力是 3 i ,另一個力是 1 3i ,請問它們的合成力是多少?

java虛數複數計算_虛部?從搞懂虛數開始....

根據'平行四邊形法則',你馬上得到,合成力就是 ( 3 i ) ( 1 3i ) = ( 4 4i )。

這就是虛數加法的實體意義。

四虛數的作用:乘法

如果涉及到旋轉角度的改變,處理起來更友善。

java虛數複數計算_虛部?從搞懂虛數開始....

比如,一條船的航向是 3 4i 。

如果該船的航向,逆時針增加45度,請問新航向是多少?

java虛數複數計算_虛部?從搞懂虛數開始....

45度的航向就是 1 i 。計算新航向,隻要把這兩個航向 3 4i 與 1 i 相乘就可以了(原因在下一節解釋):

( 3 4i ) * ( 1 i ) = ( -1 7i )

是以,該船的新航向是 -1 7i 。

如果航向逆時針增加90度,就更簡單了。因為90度的航向就是 i ,是以新航向等于:

( 3 4i ) * i = ( -4 3i )

這就是虛數乘法的實體意義:改變旋轉角度。

五虛數乘法的數學證明

為什麼一個複數改變旋轉角度,隻要做乘法就可以了?

下面就是它的數學證明,實際上很簡單。

java虛數複數計算_虛部?從搞懂虛數開始....

任何複數 a bi,都可以改寫成旋轉半徑 r 與橫軸夾角 θ 的形式。

假定現有兩個複數 a bi 和 c di,可以将它們改寫如下:a bi = r1 * ( cosα isinα )c di = r2 * ( cosβ isinβ )

這兩個複數相乘,( a bi )( c di ) 就相當于

r1 * r2 * ( cosα isinα ) * ( cosβ isinβ )

展開後面的乘式,得到

cosα * cosβ - sinα * sinβ i( cosα * sinβ sinα * cosβ )

根據三角函數公式,上面的式子就等于

cos(α β) isin(α β)

是以,

( a bi )( c di ) = r1 * r2 * ( cos(α β) isin(α β) )

這就證明了,兩個複數相乘,就等于旋轉半徑相乘、旋轉角度相加。