程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 理解矩陣(三)

理解矩陣(三)

編輯:.NET實例教程

這兩篇文章發表於去年的4月。在第二部分結束的時候,我說:
       “矩陣不僅可以作為線性變換的描述,而且可以作為一組基的描述。而 作為變換的矩陣,不但可以把線性空間中的一個點給變換到另一個點去,而且也能夠把線性空間中的一個坐標系(基)表換到另一個坐標系(基)去。而且,變換點 與變換坐標系,具有異曲同工的效果。線性代數裡最有趣的奧妙,就蘊含在其中。理解了這些內容,線性代數裡很多定理和規則會變得更加清晰、直覺。

這個留在下一篇再寫吧。

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

然而這一拖就是一年半。一年半以來,這兩篇粗糙放肆的文章被到處轉載,以至於在Google的搜索提示中,我的名字跟“矩陣”是一對關聯詞匯。這對於學生時代數學一直很差的我來說,實在是令人惶恐的事情。數學是何等輝煌精致的學問!代表著人類智慧的最高成就,是人與上帝對話的語言。而我實在連數學的門都還沒進去,不要說談什麼理解,就是稍微難一些的題目我也很少能解開。我有什麼資格去談矩陣這樣重要的一個數學概念呢?更何況,我的想法直觀是直觀,未見的是正確的啊,會不會誤人子弟呢?因此,算了吧,到此為止吧,我這麼想。


        是時不時收到的來信逐漸改變了我的想法。

        一年半以來,我收到過不下一百封直接的來信,要求我把後面的部分寫出來。這些來信大部分是國內的網友和學生,也有少數來自正在國外深造的朋友,大部分是鼓勵,有的是誠摯的請求,也有少數嚴厲斥責我不守承諾。不管是何種態度,這都表明他們對我這一點點小小的思考成果的鼓勵,特別是對於我這種思維的視角和嘗試的鼓勵。他們在信中讓我知道,盡管我的數學水平不高,但是我這種從普通人(而不是數學家)視角出發,強調對數學概念和規則的直覺理解的思路,對於很多人是有益的。也許這條路子在數學中絕非正道,也不會走得很遠,但是無論如何,在一定的階段,對一部分人來說,較之目前數學教材普遍采用的思路,這種方式可能更容易理解一些。既然是可能對一部分人有幫助的事情,那麼我就不應該心存太多雜念,應該不斷思考和總結下去。

       所以,下面就是你們來信要求我寫出來的東西。

       首先來總結一下前面兩部分的一些主要結論:

1. 首先有空間,空間可以容納對象運動的。一種空間對應一類對象。
2. 有一種空間叫線性空間,線性空間是容納向量對象運動的。
3. 運動是瞬時的,因此也被稱為變換。
4. 矩陣是線性空間中運動(變換)的描述。
5. 矩陣與向量相乘,就是實施運動(變換)的過程。
6. 同一個變換,在不同的坐標系下表現為不同的矩陣,但是它們的本質是一樣的,所以本征值相同。

        下面讓我們把視力集中到一點以改變我們以往看待矩陣的方式。我們知道,線性空間裡的基本對象是向量,而向量是這麼表示的:

        [a1, a2, a3, ..., an]

       矩陣呢?矩陣是這麼表示的:

        a11, a12, a13, ..., a1n
        a21,

$False$

a22, a23, ..., a2n
                     ...
        an1, an2, an3, ..., ann

        不用太聰明,我們就能看出來,矩陣是一組向量組成的。特別的,n維線性空間裡的方陣是由n個n維向量組成的。我們在這裡只討論這個n階的、非奇異的方陣,因為理解它就是理解矩陣的關鍵,它才是一般情況,而其他矩陣都是意外,都是不得不對付的討厭狀況,大可以放在一邊。這裡多一句嘴,學習東西要抓住主流,不要糾纏於旁支末節。很可惜我們的教材課本大多數都是把主線埋沒在細節中的,搞得大家還沒明白怎麼回事就先被灌暈了。比如數學分析,明明最要緊的觀念是說,一個對象可以表達為無窮多個合理選擇的對象的線性和,這個概念是貫穿始終的,也是數學分析的精華。但是課本裡自始至終不講這句話,反正就是讓你做吉米多維奇,掌握一大堆解偏題的技巧,記住各種特殊情況,兩類間斷點,怪異的可微和可積條件(誰還記得柯西條件、迪裡赫萊條件...?),最後考試一過,一切忘光光。要我說,還不如反復強調這一個事情,把它深深刻在腦子裡,別的東西忘了就忘了,真碰到問題了,再查數學手冊嘛,何必因小失大呢?

        言歸正傳。如果一組向量是彼此線性無關的話,那麼它們就可以成為度量這個線性空間的一組基,從而事實上成為一個坐標系體系,其中每一個向量都躺在一根坐標軸上,並且成為那根坐標軸上的基本度量單位(長度1)。

        現在到了關鍵的一步。看上去矩陣就是由一組向量組成的,而且如果矩陣非奇異的話(我說了,只考慮這種情況),那麼組成這個矩陣的那一組向量也就是線性無關的了,也就可以成為度量線性空間的一個坐標系。結論:矩陣描述了一個坐標系。

        “慢著!”,你嚷嚷起來了,“你這個騙子!你不是說過,矩陣就是運動嗎?怎麼這會矩陣又是坐標系了?”

        嗯,所以我說到了關鍵的一步。我並沒有騙人,之所以矩陣又是運動,又是坐標系,那是因為——

        “運動等價於坐標系變換”。

        對不起,這話其實不准確,我只是想讓你印象深刻。准確的說法是:

       “對象的變換等價於坐標系的變換”。

       或者:

       “固定坐標系下一個對象的變換等價於固定對象所處的坐標系變換。”

       說白了就是:

        “運動是相對的。”        

        讓我們想想,達成同一個變換的結果,比如把點(1, 1)變到點(2, 3)去,

你可以有兩種做法。第一,坐標系不動,點動,把(1, 1)點挪到(2, 3)去。第二,點不動,變坐標系,讓x軸的度量(單位向量)變成原來的1/2,讓y軸的度量(單位向量)變成原先的1/3,這樣點還是那個點,可是點的坐標就變成(2, 3)了。方式不同,結果一樣。

        從第一個方式來看,那就是我在《理解矩陣》1/2中說的,把矩陣看成是運動描述,矩陣與向量相乘就是使向量(點)運動的過程。在這個方式下,

       Ma = b

       的意思是:

       “向量a經過矩陣M所描述的變換,變成了向量b。”

        而從第二個方式來看,矩陣M描述了一個坐標系,姑且也稱之為M。那麼:

        Ma = b

       的意思是:

        “有一個向量,它在坐標系M的度量下得到的度量結果向量為a,那麼它在坐標系I的度量下,這個向量的度量結果是b。”

        這裡的I是指單位矩陣,就是主對角線是1,其他為零的矩陣。

        而這兩個方式本質上是等價的。

        我希望你務必理解這一點,因為這是本篇的關鍵。

        正因為是關鍵,所以我得再解釋一下。

        在M為坐標系的意義下,如果把M放在一個向量a的前面,形成Ma的樣式,我們可以認為這是對向量a的一個環境聲明。它相當於是說:

        “注意了!這裡有一個向量,它在坐標系M中度量,得到的度量結果可以表達為a。可是它在別的坐標系裡度量的話,就會得到不同的結果。為了明確,我把M放在前面,讓你明白,這是該向量在坐標系M中度量的結果。”

       那麼我們再看孤零零的向量b:

       b

 多看幾遍,你沒看出來嗎?它其實不是b,它是:

       Ib

       也就是說:“在單位坐標系,也就是我們通常說的直角坐標系I中,有一個向量,度量的結果是b。”

       而  Ma = Ib的意思就是說:

       “在M坐標系裡量出來的向量a,跟在I坐標系裡量出來的向量b,其實根本就是一個向量啊!”

       這哪裡是什麼乘法計算,根本就是身份識別嘛。

       從這個意義上我們重新理解一下向量。向量這個東西客觀存在,但是要把它表示出來,就要把它放在一個坐標系中去度量它,然後把度量的結果(向量在各個坐標軸上的投影值)按一定順序列在一起,就成了我們平時所見的向量表示形式。你選擇的坐標系(基)不同,得出來的向量的表示就不同。向量還是那個向量,選擇的坐標系不同,其表示方式就不同。因此,按道理來說,每寫出一個向量的表示,都應該聲明一下這個表示是在哪個坐標系中度量出來的。

表示的方式,就是 Ma,也就是說,有一個向量,在M矩陣表示的坐標系中度量出來的結果為a。我們平時說一個向量是[2 3 5 7]T,隱含著是說,這個向量在 I 坐標系中的度量結果是[2 3 5 7]T,因此,這個形式反而是一種簡化了的特殊情況。

        注意到,M矩陣表示出來的那個坐標系,由一組基組成,而那組基也是由向量組成的,同樣存在這組向量是在哪個坐標系下度量而成的問題。也就是說,表述一個矩陣的一般方法,也應該要指明其所處的基准坐標系。所謂M,其實是 IM,也就是說,M中那組基的度量是在 I 坐標系中得出的。從這個視角來看,M×N也不是什麼矩陣乘法了,而是聲明了一個在M坐標系中量出的另一個坐標系N,其中M本身是在I坐標系中度量出來的。

       回過頭來說變換的問題。我剛才說,“固定坐標系下一個對象的變換等價於固定對象所處的坐標系變換”,那個“固定對象”我們找到了,就是那個向量。但是坐標系的變換呢?我怎麼沒看見?

       請看:

       Ma = Ib

       我現在要變M為I,怎麼變?對了,再前面乘以個M-1,也就是M的逆矩陣。換句話說,你不是有一個坐標系M嗎,現在我讓它乘以個M-1,變成I,這樣一來的話,原來M坐標系中的a在I中一量,就得到b了。

       我建議你此時此刻拿起紙筆,畫畫圖,求得對這件事情的理解。比如,你畫一個坐標系,x軸上的衡量單位是2,y軸上的衡量單位是3,在這樣一個坐標系裡,坐標為(1,1)的那一點,實際上就是笛卡爾坐標系裡的點(2, 3)。而讓它原形畢露的辦法,就是把原來那個坐標系:

       2 0
       0 3

       的x方向度量縮小為原來的1/2,而y方向度量縮小為原來的1/3,這樣一來坐標系就變成單位坐標系I了。保持點不變,那個向量現在就變成了(2, 3)了。

       怎麼能夠讓“x方向度量縮小為原來的1/2,而y方向度量縮小為原來的1/3”呢?就是讓原坐標系:

      2 0
      0 3

       被矩陣:

       1/2   0
         0   1/3

       左乘。而這個矩陣就是原矩陣的逆矩陣。

       下面我們得出一個重要的結論:

        “對坐標系施加變換的方法,就是讓表示那個坐標系的矩陣與表示那個變化的矩陣相乘。”

        再一次的,矩陣的乘法變成了運動的施加。只不過,被施加運動的不再是向量,而是另一個坐標系。

        如果你覺得你還搞得清楚,請再想一下剛才已經提到的結論,矩陣MxN,一方面表明坐標系N在運動M下的變換結果,另一方面,把M當成N的前綴,當成N的環境描述,那麼就是說,在M坐標系度量下,有另一個坐標系N。這個坐標系N如果放在I坐標系中度量,其結果為坐標系MxN。

        在這裡,我實際上已經回答了一般人在學習線性代數是最困惑的一個問題,那就是為什麼矩陣的乘法要規定成這樣。

簡單地說,是因為:

        1. 從變換的觀點看,對坐標系N施加M變換,就是把組成坐標系N的每一個向量施加M變換。

        2. 從坐標系的觀點看,在M坐標系中表現為N的另一個坐標系,這也歸結為,對N坐標系基的每一個向量,把它在I坐標系中的坐標找出來,然後匯成一個新的矩陣。

        3. 至於矩陣乘以向量為什麼要那樣規定,那是因為一個在M中度量為a的向量,如果想要恢復在I中的真像,就必須分別與M中的每一個向量進行內積運算。我把這個結論的推導留給感興趣的朋友吧。應該說,其實到了這一步,已經很容易了。

        綜合以上1/2/3,矩陣的乘法就得那麼規定,一切有根有據,絕不是哪個神經病胡思亂想出來的。
  
        我已經無法說得更多了。矩陣又是坐標系,又是變換。到底是坐標系,還是變換,已經說不清楚了,運動與實體在這裡統一了,物質與意識的界限已經消失了,一切歸於無法言說,無法定義了。道可道,非常道,名可名,非常名。矩陣是在是不可道之道,不可名之名的東西。到了這個時候,我們不得不承認,我們偉大的線性代數課本上說的矩陣定義,是無比正確的:

        “矩陣就是由m行n列數放在一起組成的數學對象。”

        好了,這基本上就是我想說的全部了。還留下一個行列式的問題。矩陣M的行列式實際上是組成M的各個向量按照平行四邊形法則搭成一個n維立方體的體積。對於這一點,我只能感歎於其精妙,卻無法揭開其中奧秘了。也許我掌握的數學工具不夠,我希望有人能夠給我們大家講解其中的道理了。

        我不知道是否講得足夠清楚了,反正這一部分需要您花些功夫去推敲。

        此外,請大家不必等待這個系列的後續部分。以我的工作情況而言,近期內很難保證繼續投入腦力到這個領域中,盡管我仍然對此興致濃厚。不過如果還有(四)的話,可能是一些站在應用層面的考慮,比如對計算機圖形學相關算法的理解。但是我不承諾這些討論近期內會出現了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved