1. 程式人生 > >理解矩陣(二)

理解矩陣(二)

接著理解矩陣。

上一篇裡說“矩陣是運動的描述”,到現在為止,好像大家都還沒什麼意見。但是我相信早晚會有數學系出身的網友來拍板轉。因為運動這個概念,在數學和物理裡是跟微積分聯絡在一起的。我們學習微積分的時候,總會有人照本宣科地告訴你,初等數學是研究常量的數學,是研究靜態的數學,高等數學是變數的數學,是研究運動的數學。大家口口相傳,差不多人人都知道這句話。但是真知道這句話說的是什麼意思的人,好像也不多。簡而言之,在我們人類的經驗裡,運動是一個連續過程,從A點到B點,就算走得最快的光,也是需要一個時間來逐點地經過AB之間的路徑,這就帶來了連續性的概念。而連續這個事情,如果不定義極限的概念,根本就解釋不了。古希臘人的數學非常強,但就是缺乏極限觀念,所以解釋不了運動,被芝諾的那些著名悖論(飛箭不動、飛毛腿阿喀琉斯跑不過烏龜等四個悖論)搞得死去活來。因為這篇文章不是講微積分的,所以我就不多說了。有興趣的讀者可以去看看齊民友教授寫的《重溫微積分》。我就是讀了這本書開頭的部分,才明白“高等數學是研究運動的數學”這句話的道理。

不過在我這個《理解矩陣》的文章裡,“運動”的概念不是微積分中的連續性的運動,而是瞬間發生的變化。比如這個時刻在A點,經過一個“運動”,一下子就“躍遷”到了B點,其中不需要經過A點與B點之間的任何一個點。這樣的“運動”,或者說“躍遷”,是違反我們日常的經驗的。不過了解一點量子物理常識的人,就會立刻指出,量子(例如電子)在不同的能量級軌道上跳躍,就是瞬間發生的,具有這樣一種躍遷行為。所以說,自然界中並不是沒有這種運動現象,只不過巨集觀上我們觀察不到。但是不管怎麼說,“運動”這個詞用在這裡,還是容易產生歧義的,說得更確切些,應該是“躍遷”。因此這句話可以改成:

“矩陣是線性空間裡躍遷的描述”。

可是這樣說又太物理,也就是說太具體,而不夠數學,也就是說不夠抽象。因此我們最後換用一個正牌的數學術語——變換,來描述這個事情。這樣一說,大家就應該明白了,所謂變換,其實就是空間裡從一個點(元素/物件)到另一個點(元素/物件)的躍遷。比如說,拓撲變換,就是在拓撲空間裡從一個點到另一個點的躍遷。再比如說,仿射變換,就是在仿射空間裡從一個點到另一個點的躍遷。附帶說一下,這個仿射空間跟向量空間是親兄弟。做計算機圖形學的朋友都知道,儘管描述一個三維物件只需要三維向量,但所有的計算機圖形學變換矩陣都是4 x 4的。說其原因,很多書上都寫著“為了使用中方便”,這在我看來簡直就是企圖矇混過關。真正的原因,是因為在計算機圖形學裡應用的圖形變換,實際上是在仿射空間而不是向量空間中進行的。想想看,在向量空間裡相一個向量平行移動以後仍是相同的那個向量,而現實世界等長的兩個平行線段當然不能被認為同一個東西,所以計算機圖形學的生存空間實際上是仿射空間。而仿射變換的矩陣表示根本就是4 x 4的。又扯遠了,有興趣的讀者可以去看《計算機圖形學——幾何工具演算法詳解》。

一旦我們理解了“變換”這個概念,矩陣的定義就變成:

“矩陣是線性空間裡的變換的描述。”

到這裡為止,我們終於得到了一個看上去比較數學的定義。不過還要多說幾句。教材上一般是這麼說的,在一個線性空間V裡的一個線性變換T,當選定一組基之後,就可以表示為矩陣。因此我們還要說清楚到底什麼是線性變換,什麼是基,什麼叫選定一組基。線性變換的定義是很簡單的,設有一種變換T,使得對於線性空間V中間任何兩個不相同的物件x和y,以及任意實數a和b,有:
T(ax + by) = aT(x) + bT(y),
那麼就稱T為線性變換。

定義都是這麼寫的,但是光看定義還得不到直覺的理解。線性變換究竟是一種什麼樣的變換?我們剛才說了,變換是從空間的一個點躍遷到另一個點,而線性變換,就是從一個線性空間V的某一個點躍遷到另一個線性空間W的另一個點的運動。這句話裡蘊含著一層意思,就是說一個點不僅可以變換到同一個線性空間中的另一個點,而且可以變換到另一個線性空間中的另一個點去。不管你怎麼變,只要變換前後都是線性空間中的物件,這個變換就一定是線性變換,也就一定可以用一個非奇異矩陣來描述。而你用一個非奇異矩陣去描述的一個變換,一定是一個線性變換。有的人可能要問,這裡為什麼要強調非奇異矩陣?所謂非奇異,只對方陣有意義,那麼非方陣的情況怎麼樣?這個說起來就會比較冗長了,最後要把線性變換作為一種對映,並且討論其對映性質,以及線性變換的核與像等概念才能徹底講清楚。我覺得這個不算是重點,如果確實有時間的話,以後寫一點。以下我們只探討最常用、最有用的一種變換,就是在同一個線性空間之內的線性變換。也就是說,下面所說的矩陣,不作說明的話,就是方陣,而且是非奇異方陣。學習一門學問,最重要的是把握主幹內容,迅速建立對於這門學問的整體概念,不必一開始就考慮所有的細枝末節和特殊情況,自亂陣腳。

接著往下說,什麼是基呢?這個問題在後面還要大講一番,這裡只要把基看成是線性空間裡的座標系就可以了。注意是座標系,不是座標值,這兩者可是一個“對立矛盾統一體”。這樣一來,“選定一組基”就是說線上性空間裡選定一個座標系。就這意思。

好,最後我們把矩陣的定義完善如下:

“矩陣是線性空間中的線性變換的一個描述。在一個線性空間中,只要我們選定一組基,那麼對於任何一個線性變換,都能夠用一個確定的矩陣來加以描述。”

理解這句話的關鍵,在於把“線性變換”與“線性變換的一個描述”區別開。一個是那個物件,一個是對那個物件的表述。就好像我們熟悉的面向物件程式設計中,一個物件可以有多個引用,每個引用可以叫不同的名字,但都是指的同一個物件。如果還不形象,那就乾脆來個很俗的類比。

比如有一頭豬,你打算給它拍照片,只要你給照相機選定了一個鏡頭位置,那麼就可以給這頭豬拍一張照片。這個照片可以看成是這頭豬的一個描述,但只是一個片面的的描述,因為換一個鏡頭位置給這頭豬拍照,能得到一張不同的照片,也是這頭豬的另一個片面的描述。所有這樣照出來的照片都是這同一頭豬的描述,但是又都不是這頭豬本身。

同樣的,對於一個線性變換,只要你選定一組基,那麼就可以找到一個矩陣來描述這個線性變換。換一組基,就得到一個不同的矩陣。所有這些矩陣都是這同一個線性變換的描述,但又都不是線性變換本身。

但是這樣的話,問題就來了如果你給我兩張豬的照片,我怎麼知道這兩張照片上的是同一頭豬呢?同樣的,你給我兩個矩陣,我怎麼知道這兩個矩陣是描述的同一個線性變換呢?如果是同一個線性變換的不同的矩陣描述,那就是本家兄弟了,見面不認識,豈不成了笑話。

好在,我們可以找到同一個線性變換的矩陣兄弟們的一個性質,那就是:

若矩陣A與B是同一個線性變換的兩個不同的描述(之所以會不同,是因為選定了不同的基,也就是選定了不同的座標系),則一定能找到一個非奇異矩陣P,使得A、B之間滿足這樣的關係:

A = P-1BP

線性代數稍微熟一點的讀者一下就看出來,這就是相似矩陣的定義。沒錯,所謂相似矩陣,就是同一個線性變換的不同的描述矩陣。按照這個定義,同一頭豬的不同角度的照片也可以成為相似照片。俗了一點,不過能讓人明白。

而在上面式子裡那個矩陣P,其實就是A矩陣所基於的基與B矩陣所基於的基這兩組基之間的一個變換關係。關於這個結論,可以用一種非常直覺的方法來證明(而不是一般教科書上那種形式上的證明),如果有時間的話,我以後在blog裡補充這個證明。

這個發現太重要了。原來一族相似矩陣都是同一個線性變換的描述啊!難怪這麼重要!工科研究生課程中有矩陣論、矩陣分析等課程,其中講了各種各樣的相似變換,比如什麼相似標準型,對角化之類的內容,都要求變換以後得到的那個矩陣與先前的那個矩陣式相似的,為什麼這麼要求?因為只有這樣要求,才能保證變換前後的兩個矩陣是描述同一個線性變換的。當然,同一個線性變換的不同矩陣描述,從實際運算性質來看並不是不分好環的。有些描述矩陣就比其他的矩陣性質好得多。這很容易理解,同一頭豬的照片也有美醜之分嘛。所以矩陣的相似變換可以把一個比較醜的矩陣變成一個比較美的矩陣,而保證這兩個矩陣都是描述了同一個線性變換。

這樣一來,矩陣作為線性變換描述的一面,基本上說清楚了。但是,事情沒有那麼簡單,或者說,線性代數還有比這更奇妙的性質,那就是,矩陣不僅可以作為線性變換的描述,而且可以作為一組基的描述。而作為變換的矩陣,不但可以把線性空間中的一個點給變換到另一個點去,而且也能夠把線性空間中的一個座標系(基)表換到另一個座標系(基)去。而且,變換點與變換座標系,具有異曲同工的效果。線性代數裡最有趣的奧妙,就蘊含在其中。理解了這些內容,線性代數裡很多定理和規則會變得更加清晰、直覺。

這個留在下一篇再寫吧。

因為有別的事情要做,下一篇可能要過幾天再寫了。