矩陣乘法的本質是什麼?
矩陣的乘法,本質是一種運動。
我這裡提供一個我認為具有啟發性的模型,來闡述為什麼矩陣乘法是運動。
1 線性空間
1.1 概念
忘掉坐標系,我們從一片空白開始:
我們隨便選個點作為原點,以此原點作兩個單位正交的向量(因為是二維的,所以兩個就夠了):
平面上的某個點,可以這樣表示:
我們簡化一下,這就變為了坐標的形式:
整個二維平面上的點,顯然都可以通過 的方式來表示。
用數學的語言:
就是 所張成的線性空間。
在這個例子里, 張成的線性空間就是整個二維平面。
1.2 線性空間的幾何表示
為了可視化張成的線性空間,我用灰色網格來表示,網格的交點就是整數坐標:
如果 不正交,長度也不相等,那麼依然張成整個二維空間,只是網格有所不同(坐標有所不同):
如果 在一條直線上,那麼就只能張成一維空間:
當然,如果 都是原點,那麼就只能張成零維空間了,也就是點。
2 矩陣乘法的幾何意義
2.1 點與線性空間
在線性代數中,某個點要放到線性空間中討論才有意義,要不然我們連坐標都沒有辦法給出。
比如說一個二維的 ,雖然沒有指明是在哪個線性空間里,但一般我們默認在單位正交基 所張成的線性空間中:
2.2 矩陣乘法的幾何意義
為了方便展示 的幾何意義,我舉個具體的旋轉矩陣, 。
顧名思義, 的效果是讓 通過旋轉,到達目的地,也就是下圖中的 :
可是,矩陣 是怎麼使 運動到 的,這個目的地 又是怎麼確定下來的?
我們來研究下細節吧。
2.3 矩陣乘法的細節
我們先來看一個生活中的例子。坐公交車:
剛開始我們在站台等公交車,公交車來了之後,我們上了公交車。公交車開啊開啊,到了目的地,我們下車之後就發現,哦,原來我們自己已經移動了很遠了啊。
是的,矩陣 就是像公交車一樣,把乘客 搬運到了目的地 。
我們來看看 這輛公交車是怎麼運行的。
乘客 在公交車站候車,這個時候它的坐標是在 張成的空間中:
這輛公交車駛過來了,它是由 的列向量組成的:
讓我們把這輛由 組成的公交車停在公交車站,這個時候 張成的空間和 張成的空間是重疊的:
然後 上到 這輛公交車後,也就是進入了 張成的空間,隨著公交車開動而移動:
會一直開到 指定的位置, 也隨之到了目的地:
下車之後,又回到了 張成的空間,從而完成移動:
我們用公交車來總結這樣一個過程:
雖然有點啰嗦,但是其中的坐標切換是非常重要的,線代可能比較複雜的部分就是基的變換。能很好的理解坐標切換,就能更好的理解相似矩陣、特徵向量分解這些定義。
順便說一句,上面為了動畫效果,讓 運動到目的地 是連續的。實際上是瞬移過去的,可能比起公交車來,矩陣 更像是機器貓的任意門吧:
2.4 如果不是方陣呢?
比如說這樣的矩陣呢:
這取決於我們怎麼看待 了,如果我們把 看作:
那麼 就是二維的。但是把 看作:
那麼 就是三維的,就可以繼續沿用公交車模型。
3 公交車模型的啟發性
一個好的模型應該具有啟發性,我們來看看通過公交車這個模型有哪些啟發性。
3.1 矩陣和矩陣相乘
之前說了 是使 運動到 ,那麼矩陣 乘以矩陣 是怎麼回事呢?
公交車可以坐很多人的:
只是結果又是一個新的矩陣,這個是公交車模型沒有辦法包容的。
3.2 矩陣的秩與公交車的運行範圍
現實的公交車是有站牌的,上面寫明了公交車的運行範圍:
矩陣公交車的秩也表明了公交車的運行範圍。
之前的旋轉矩陣 , 張成的空間為二維空間,也就是秩為2,所以整個二維空間都可以到達:
如果是這個矩陣 ,它的列空間是一維的,那麼只有圖上直線所在空間可以到達:
這個問題可以進一步查看 這個回答 。
3.3 特徵值與公交車的速度
公交車的移動,也就是某種運動(雖然是瞬移),對於運動最重要的就是速度和方向:
- 特徵值就是運動的速度
- 特徵向量就是運動的方向
關於這點,可以參看我的回答 如何理解矩陣特徵值?
4 總結
模型,終究是幫助理解的,它有它的局限性,我們辯證的看待它就好了。
本題目前下面的解釋都是線性代數教材上的各種定義,但都太過複雜了。我嘗試寫一個淺顯的解釋:
小明今天要做飯,消耗2斤肉,1斤蔬菜。肉每斤20元,蔬菜每斤5元,則一共需多少花費?
這個問題的答案很簡單:
我們用向量相乘的方法寫出來:
如果小明第二天有另一種做飯的方法,需要消耗1斤肉,4斤蔬菜,那麼這兩種方法的花費各是多少呢?我們顯然需要另算這第二種方法的花費。把這個做飯方式寫在第二個矩陣(向量是寬度或長度為1的矩陣)里:
小明家附近還有另一個菜市場,那裡肉每斤15元,蔬菜每斤10元。那麼,小明如果去這個菜市場,花費又是多少呢(分別計算上述兩種做飯方式)?我們把這另外的一種價格寫進第一個矩陣里:
這樣我們看到了一個矩陣乘法的例子。在左邊的這個矩陣的每一行,都代表了一種價目表;在右邊的矩陣的每一列,都代表了一種做飯方式。那麼所有可能的組合所最終產生的花費,則在結果矩陣中表示出來了。
小明有一天成為了餐廳大廚,小紅做掌柜兼管算賬。我們假設物價不變。小紅髮現,如果今天買10斤肉花了A元,明天買20斤肉就得花2A元。如果買一斤肉要花C元,買1斤菜要花D元,那麼買一斤肉和一斤菜就要花(C+D)元。每天小明彙報今日的材料消耗之後,小紅便會將材料消耗轉為需要花的錢數。如果材料消耗翻倍,花的錢數也翻倍。另外,如果去不同的菜市場,也會得到不同的花錢數量。
小明每月送來一張長列表,裡面是每日的材料消耗;而經過小紅的處理,這張列表會轉為每日,在不同的菜市場購買這些材料的花費。材料消耗翻倍,花費也翻倍。我們管這種從材料列錶轉為開銷表的過程,就叫做一個線性映射。這也即是矩陣乘法的意義。
最後補充一點。線性代數的引入方式因教材不同而不同。從代數學自身的體系來講,可能從線性空間引入是相對完備的;但是從一般我們學習知識的理解順序來講,從線性方程組引入最為合適。因為只要還記得雞兔同籠,就很容易理解線性方程組,從而推廣到矩陣,然後是線性變換,線性空間。按這樣順序講授的教材推薦華章數學譯叢的:線性代數.原書第8版.Leon.S.J.著.張文博譯.機械工業出版社.2010
開門見山,直接給答案:矩陣乘法的本質是線性空間運動的描述!為了解釋清楚這個問題,我們需要補充一些線性代數學習過程中被忽略的基礎知識。文章較長,大致分為兩個部分。第一部分介紹線性代數裡面最基礎的部分:空間、坐標系和坐標。第二部分揭示矩陣乘法的本質。基礎較好可以直接跳到第二部分。
----------------------------------------------第一部分,空間與坐標系的建立----------------------------------------
首先,線性代數裡面的線性主要的意思就是線性空間里的線性變換。線性變換或線性映射是把中學的線性函數概念進行了重新定義,強調了函數的變數之間的變換的意義。線性函數的概念在初等數學和高等數學中含義不盡相同(高等數學常常把初等數學的關鍵概念進行推廣或進一步抽象化,初等數學的概念就變成了高等數學概念的一個特例)。
在中學的初等數學裡,我們知道,函數f(x)=kx+b(k和b 是不變數),稱為一元線性函數,因為在平面直角坐標系中這個函數的圖形就是一條直線,就是變數(包括自變數和因變數)之間的關係描述為一條直線,所以把這種函數形象地稱為「線性」函數;如果b=0 ,這個函數的外觀就變成f(x)=kx的形式了,這是一條過原點的直線。顯然,過原點的直線是最簡單的線性函數。
在大學的代數裡面,為了線性函數的進一步推廣(如推廣至雙線性函數、多線性函數、線性空間、線性泛函…)的遠大未來,我們忍痛割「尾」,把一元線性函數 f (x)= kx + b的b割捨掉,成了f(x)=kx的形式。呵呵,簡單點說,只有過原點的最簡單的直線f (x)= kx才被稱為一元線性函數。
為什麼?只因為不過原點的直線不滿足我們對線性函數的比例性的要求。
線性函數表現為直線,這只是幾何意義。那麼所謂「線性」的代數意義是什麼呢?實際上,最基本的意義只有兩條:可加性和比例性。用數學的表達來說就是:對加法和數乘封閉。
然後說說空間(space),這個概念是現代數學的命根子之一。對於空間的理解需要更抽象一些,簡單的說,能裝東西的就是空間。比如計算機內有存儲單元,那麼就有內存空間;我們上課有課表,那麼就有課表空間;有一個能裝載夢境的東西,我們可以叫它盜夢空間。對於數學來說,數學家定義的空間里裝載的當然是能運算的東西。從拓撲空間開始,一步步往上加定義,可以形成很多空間。線形空間其實還是比較初級的,如果在裡面定義了範數,就成了賦范線性空間。賦范線性空間滿足完備性,就成了巴那赫空間;賦范線性空間中定義角度,就有了內積空間,內積空間再滿足完備性,就得到希爾伯特空間,如果空間里裝載所有類型的函數,就叫泛函空間。
總之,空間有很多種。你要是去看某種空間的數學定義,大致都是「存在一個集合,在這個集合上定義某某概念,然後滿足某些性質」,就可以被稱為空間。這未免有點奇怪,為什麼要用「空間」來稱呼一些這樣的集合呢?大家將會看到,其實這是很有道理的。
我們一般人最熟悉的空間,毫無疑問就是我們生活在其中的(按照牛頓的絕對時空觀)的三維空間,從數學上說,這是一個三維的歐幾里德空間,我們先不管那麼多,先看看我們熟悉的這樣一個空間有些什麼最基本的特點。仔細想想我們就會知道,這個三維的空間:
1. 由很多(實際上是無窮多個)位置點組成
2. 這些點之間存在相對的關係
3. 可以在空間中定義長度、角度
4. 這個空間可以容納運動
上面的這些性質中,最最關鍵的是第4條。這裡我們所說的運動是從一個點到另一個點的移動(變換),而不是微積分意義上的「連續」性的運動。第1、2條只能說是空間的基礎,不算是空間特有的性質,凡是討論數學問題,都得有一個集合,大多數還得在這個集合上定義一些結構或關係,並不是說有了這些就算是空間。而第3條太特殊,其他的空間不需要具備,更不是關鍵的性質。只有第4條是空間的本質,也就是說:容納運動是空間的本質特徵。
認識到了這些,我們就可以把我們關於三維空間的認識擴展到其他的空間。事實上,不管是什麼空間,都必須容納和支持在其中發生的符合規則的運動(變換)。你會發現,在某種空間中往往會存在一種相對應的變換,比如拓撲空間中有拓撲變換,線性空間中有線性變換,仿射空間中有仿射變換,其實這些變換都只不過是對應空間中允許的運動形式而已。因此只要知道,「空間」是容納運動的一個對象集合,而變換則規定了對應空間的運動。
下面我們來看看線性空間。線性空間的定義任何一本書上都有,但是既然我們承認線性空間是個空間,那麼有兩個最基本的問題必須首先得到解決,那就是:
1. 空間是一個對象集合,線性空間也是空間,所以也是一個對象集合。那麼線性空間是什麼樣的對象的集合?或者說,線性空間中的對象有什麼共同點嗎?
2. 線性空間中的運動如何表述的?也就是,線性變換是如何表示的?
我們先來回答第一個問題,回答這個問題的時候其實是不用拐彎抹角的,可以直截了當的給出答案。線性空間中的任何一個對象,通過選取坐標系(基)和坐標的辦法,都可以表達為向量的形式。只要你找到合適的坐標軸(也就是基),就建立了一個坐標系,就可以用坐標(表示成向量的形式)表示線性空間里任何一個對象。換句話說,給你一個空間,你就能用基和坐標來描述這個空間中的對象!這裡頭大有文章,因為向量表面上只是一列數,但是由於向量的有序性,除了這些數本身攜帶的信息之外,還在對應位置上攜帶信息。為什麼在程序設計中數組最簡單,卻又威力無窮呢?根本原因就在於此。
由三維擴展到四維的空間的確難以想像,我想給出個人的幾點認識供讀者參考:對於笛卡兒坐標系,二維坐標系的兩個坐標軸互相正交並構成一個平面空間;三維坐標系的坐標軸互相正交且第三個坐標軸垂直於其餘兩個坐標軸平面,三個坐標軸構成一個立體空間;則四維坐標系中的四個坐標軸互相正交,第四軸必然與其餘的三維立體空間垂直,四個坐標軸構成一個超多面體空間…
四維空間的物理解釋就是愛因斯坦的時空理論,三維物理空間之外增加了一個與之垂直的時間軸(垂直或正交的意思應理解為不相關,時間和空間在低於光速的尺度內就是沒有關係的兩個事物,這就是牛頓的世界)。你,作為一個有生命周期的高級動物實際上是個四維動物,因為你的肉體既佔有了一個三維小空間同時又佔有了另外一維的時間軸上的一段。N 維空間的出現實際上是人們在抽象他所觀察到的宇宙事物時出現的概念。
實際上,在以後的線性代數學習中,坐標軸的正交不是必須的,取消了正交的要求後,我們在平面上就可以畫出來大於四維以上的空間來了,你就理解了由n 個向量張成的n個空間的理論,進而想像高維空間的圖像也就不是一個困難的事情了。
如果有一個線性空間,就能建立一個坐標系,選取一組基和坐標來描述這個空間里的對象。舉一個通俗一點的例子,我們學習的教室就是一個空間,先定義它為「教室空間」好了,教室空間中有桌子、椅子、黑板、粉筆、黑板擦,為了說明問題我們就先假設只有這幾樣東西。那麼我們怎麼描述這個空間呢?選取基和坐標對吧:根據我們對空間中基的要求:完備性和無關性,我們選取的「坐標軸」為{桌子、椅子、黑板、粉筆、黑板擦},基的維數是5維的。那麼坐標怎麼選取呢?坐標就是每件東西的數量,有了基和坐標,我們就能描述我們定義的「教室空間」了,就是這麼簡單。再舉一個例子,雞兔同籠的問題大家應該都聽過,這裡也可以定義一個空間,暫且取名「籠子空間」吧,在籠子空間中,「坐標軸」就是{雞的兩隻腳和一個頭,兔的四隻腳和一個頭},基的維數是2維的。坐標就是雞和兔的數目。再回頭觀察我們的「籠子空間」和「教室空間」,我們發現教室空間裡面的基彼此不包含彼此,具體來說就是桌子不包含椅子的成分,粉筆不包含黑板的成分,我們說基彼此正交。而籠子空間中的兩個基都有頭和腳,但彼此不能線性表示對方。這時,基就不是正交的。下面回到我們線性代數中的線性空間。線性空間裡面裝的都是向量。那麼這組基怎麼選取呢?我們知道,線性空間里的基本對象是向量,所以,基一定也是向量。但有一些要求:對基的要求是數量要夠,還要線性無關。
總結一下:我們首先確立一個叫空間的東西,空間裡面裝著要研究的對象,比如「教室空間」。為了描述對象和對象的運動,就要選取空間中最基本的元素作為基,把基前面的係數叫做坐標,於是建立了坐標系和坐標。注意:「坐標軸」,也就是基,可以是桌子椅子等任何東西,只是在線性代數中我們把基選成了向量。世界是物質的,物質是運動的,接下來肯定要研究一下線性空間中的運動是怎麼實現的。
----------------------------------------------第二部分,矩陣乘法描述運動----------------------------------------
線性空間中的運動,被稱為線性變換。也就是說,你從線性空間中的一個點運動到任意的另外一個點,都可以通過一個線性變化來完成。那麼,線性變換如何表示呢?很有意思,在線性空間中,當你選定一組基之後,不僅可以用一個向量來描述空間中的任何一個對象,而且可以用矩陣乘法來描述該空間中的任何一個運動(變換)。而使某個對象發生對應運動的方法,就是用代表那個運動的矩陣,乘以代表那個對象的向量。
簡而言之,在線性空間中選定基之後,向量(坐標)刻畫對象,矩陣刻畫對象的運動,用矩陣與向量的乘法施加運動。
如果以後有人問你矩陣乘法是什麼,那麼你就可以響亮地告訴他,矩陣乘法的本質是運動的施加。到現在為止,好像大家都還沒什麼意見。但是我相信早晚會有數學系出身的網友來拍板轉。因為運動這個概念,在數學和物理里是跟微積分聯繫在一起的。我們學習微積分的時候,總會有人照本宣科地告訴你,初等數學是研究常量的數學,是研究靜態的數學,高等數學是變數的數學,是研究運動的數學。大家口口相傳,差不多人人都知道這句話。但是真知道這句話說的是什麼意思的人,好像也不多。簡而言之,在我們人類的經驗里,運動是一個連續過程,從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的某一個點躍遷到另一個線性空間V的另一個點的運動。這句話里蘊含著一層意思,就是說一個點不僅可以變換到同一個線性空間中的另一個點,而且可以變換到另一個線性空間中的另一個點去。不管你怎麼變,只要變換前後都是線性空間中的對象,這個變換就一定是線性變換,也就一定可以用一個矩陣來描述。最後我們把矩陣乘法定義完善如下:
「矩陣乘法是線性空間中的線性變換的一個描述。在一個線性空間中,只要我們選定一組基,那麼對於任何一個線性變換,都能夠用一個確定的矩陣乘法來加以描述。」
見下圖:
對於矩陣乘法,主要是考察一個矩陣對另一個矩陣所起的變換作用。其作用的矩陣看作是動作矩陣,被作用的矩陣可以看作是由行或列向量構成的幾何圖形。同樣,如果一連串的矩陣相乘,就是多次變換的疊加么。而矩陣左乘無非是把一個向量或一組向量(即另一個矩陣)進行伸縮或旋轉。乘積的效果就是多個伸縮和旋轉的疊加!比如S=ABCDEF會把所有的矩陣線性變化的作用力傳遞並積累下去,最終得到一個和作用力S。工業上的例子就是機器人的手臂,機械臂上的每個關節就是一個矩陣(比如可以是一個旋轉矩陣),機械臂末端的位置或動作是所有關節運動的綜合效果。這個綜合效果可以用旋轉矩陣的乘法得到。
本文是在整理孟岩老師的《理解矩陣》和任廣千、胡翠芳老師的《線性代數的幾何意義》基礎上形成的,只是出於一種對數學的愛好!有興趣的讀者建議閱讀原文。也歡迎下載《神奇的矩陣》和《神奇的矩陣第二季》最新版本了解更多有關線性代數和矩陣的知識。
線性變換的複合。
對於的矩陣,定義線性變換
那麼我們有
兩個線性變換的疊加。
-----
私以為這種本質是什麼的問題在很多時候是無法討論的,一個概念可以從很多種方面做出詮釋,究竟哪一種才算是本質呢?
矩陣源於方程組的簡化記法,抓住這一點,很容易找到矩陣乘法不得不如此定義的原因
y1 = a11 * x1 + a12 * x2 + a13 * x3
y2 = a21 * x1 + a22 * x2 + a23 * x3
y3 = a31 * x1 + a32 * x2 + a33 * x3
會被簡寫為Y=AX
那麼很自然,你可以寫出Z=BY
從而得到Z=BAX
然後就能推出BA應該是什麼形式
這就是矩陣乘法定義的由來
拿向量Y等於矩陣A乘以向量X來說,可從不同的視角來觀察,觀察的結果真是:
橫看成嶺側成峰啊。
首先,比如由X到Y,就可看成線性變換,A是變換矩陣,這就是線性代數第二章的內容,但變換的機理要在第五章才能看明白。
A的作用其實是旋轉和拉長,不容易發現的是,A的特徵值才是X在待征向量方向投影的伸長率,A的行列式值是X端點、原點和投影點所圍面積的放大率,面積最後放大的結果就是Y的端點、原點及Y在特徵向量方向投影點所圍面積。
坐標變換是特殊的變換,只旋轉不拉伸向量長度。
其次,如果把A看成是幾個列向量的集合,那麼X各元素就可看成各列向量疊加時的加權比重,Y就成了A中列向量線性組合後的向量,這就是第四章的線性表示。
再次,如果我們把目光盯在由Y到A上,這又如何看待呢?坐標分解,理解也很簡單,想像直角坐標系中的向量向坐標軸投影就可以了。
最後,如何Y到X呢?逆變換嘛。
完線性空間上的線性變換。
本文分為三節。可能談不上本質,但確實很有助於直觀地理解矩陣乘法,在此賣弄一小下,講講自己的淺薄理解,如有不對之處懇請批評指正。
本文閱讀指南:
第一節、第三節在國內教材中似乎並不多見,建議細讀。第二節我寫的不是很清晰嚴謹,但介紹這方面內容的文章/課件在網上有很多,建議略讀第二節之後另尋優秀材料。
第一節:線性組合——我曾經在那個很火的 Gilbert Strang 2000年在MIT教的線性代數課上學到了對矩陣乘法的很好的理解方式。
第二節:空間投影——這是特徵向量、PCA數據分析等內容的基礎。
第三節:飢餓的大怪獸——一個純粹基於求和公式的形象化理解,很多人應該自己都想到了。
- 何為線型組合
不嚴格地講,兩個「東西」a和b的線性組合是a的倍數加上b的倍數。比如,如果a和b是兩個標量,那麼就是a和b的一個線性組合,而就不是a和b的一個線性組合(但是它是和的一個線性組合)。
所以一個行向量和一個列向量相乘得到的,其實就是根據所描述的倍數對的各個元素進行線型組合。(當然你也可以理解為根據所描述的倍數對的元素進行線性組合,暫且按下不表。)
- 何為矩陣
對矩陣的解讀有很多種。為了下面對矩陣乘法的解讀,我們可以把矩陣看做是幾個列向量左右並排一起,
或者是幾個行向量上下堆疊在一起
- 一個矩陣乘以一個列向量
還記得課本上的分塊矩陣矩陣的乘法嗎?再結合上面「何為線型組合」中所說的「根據所描述的倍數對的各個元素進行線型組合」,這裡其實就是根據的描述對矩陣中的列向量進行線型組合。
- 一個行向量乘以一個矩陣
類似地,
是根據的描述,對矩陣中的行向量進行線型組合。
- 一個(被視為一坨列向量的)矩陣乘以一個(被視為一坨列向量的)矩陣
對於一個矩陣A和B相乘,還記得分塊矩陣乘法這個定理嗎?如果我們把A視為一個整塊,把B按照列分為一塊一塊,那麼我們可以得到
一個(被視為一坨列向量的)矩陣乘以一個列向量是什麼含義,我們上面已經講過了。
是由個列向量羅列而成的,對應著對中列向量種線型組合方式。那麼就可以被視為根據的描述,對中的列向量進行多種線型組合。每一種線型組合得到一個列向量,我們要看看這多種不同的線型組合方式分別給了我們什麼樣的線型組合結果。
- 一個(被視為一坨行向量的)矩陣乘以一個(被視為一坨行向量的)矩陣
同理,
可以被視為根據的描述,對中的行向量進行多種線型組合。每一種線型組合得到一個行向量,我們要看看這多種不同的線型組合方式分別給了我們什麼樣的線型組合結果。
- 再讀其他答案
再看看其他知友的答案,比如一些關於線性空間、多元方程組、坐標系轉換與旋轉之類的,是不是本文的解釋在特定應用環境下的解釋?
========== 第 二 節 ==========這一節我寫的不是很清晰嚴謹,但介紹這方面內容的文章/課件在網上有很多,建議略讀本節之後另尋優秀材料。
- 對向量相乘的另一種解讀——空間投影
好,以上從「線性組合」的角度理解矩陣相乘就先告一段落。下面我們來從另一個更抽象的角度——空間投影——來理解矩陣相乘。不要懼怕「抽象」,你看,下面這個空間投影的例子就很簡單嘛: - 向量相乘——一個向量往另一個向量上投影
對於向量和單位向量相乘,可以看做是把投影到的方向上後得到的長度,是個標量。如果再乘以一個,得到的就是在的方向上的投影,是個矢量(向量)。
圖片引自維基百科Vector projection
上圖中,的長度是1。
向量在向量上的投影的長度是。這是個標量哦。
如果想得到圖中的綠色箭頭,要再乘以單位向量來表明這個長度為的箭頭到底指向哪個方向。即。
另外順便提一句,向量和點乘,其實就是「行矩陣」乘以「列矩陣」。不明白的話在紙上簡單推導一下就能看出來啦。
如果向量的長度不是1,那麼求得的就是向量在方向上以為單位1投影所得到的長度。
- 一個向量同時往多個向量上投影
向量,其實就是空間中的一個箭頭。同一個箭頭,在不同的向量空間(可理解為「不同的坐標系」)里,會有不同的數值來描述他。
一個向量空間由一組被稱為「基底」(basis,簡稱「基」)的向量來描述,比如我們平時最常見的一種三位坐標系就可以看做是由、、三個「標準正交基」組成。(標準:長度為單位1;正交:兩兩垂直;基:向量;轉置符號T表示列向量。)我們給這三個列向量命名為、、。在這個空間中的一個列向量分別投影到這三個方向上,分別得到的長度該如何計算呢?
看!我們並行地同時地計算了在三個方向上的投影長度!
如果這三個基向量分別是、、,那麼矩陣乘以一個列向量
這就是在同時計算在、、方向上的投影長度。但需要注意的是,投影后的長度會有改變,因為和的長度並不是1了。
我們剛剛說過,一組基描述了一個空間。每次都說「由、、所描述的空間」太啰嗦了,乾脆直接就說「由描述的向量空間」吧!……唔,一個矩陣描述了一個空間,有點意思了……
這個乘法操作其實是在問:對於(處在由所描述的空間里的)箭頭,投影到由所描述的空間里,會用什麼樣的數值來呢?
這個問題等同於是在問:對於(處在由所描述的空間里的)箭頭,投影到由所描述的空間里,在、、這三個基上的長度分別是多少呢?
求得的結果告訴了我們這個問題的答案:在空間里,箭頭在方向上、以為單位一,長度為;在方向上、以為單位一,長度為;在方向上、以為單位一,長度為。(如果這段話沒讀明白,請先把這段話里所有的變數上標「撇」去掉後讀一遍。)
簡而言之:是箭頭在空間/坐標系里的坐標值。
在這個坐標值是箭頭在空間里的樣子。在這個坐標值的指導下,我們該如何畫出箭頭(在原空間里的)的樣子呢?答:這個箭頭,它在上的分量是(別忘了這個分量只是標量,矢量是箭頭在空間里的坐標表示);它在上的分量是;它在上的分量是。
所以,這個箭頭(矢量)畫出來就是。(想像一下物理力學裡的分力/合力。)
等等,不對……由於和不是單位向量,其實在這兩個分量上被scale了。所以正確的結果應該是,其中.
這個式子好複雜啊……等一下,積之和,這不是個線性組合嗎?整理一下之後他就是 吶!
本節小結:
1.矩陣描述了一個空間。(通常要求矩陣里的向量是線性無關的,這一點很重要,但暫且不表)
2.把投影到了空間中,得到的是箭頭在空間里的坐標。
3.是利用空間里的坐標,重新構建箭頭在空間里的坐標。(如果里的向量不是單位向量,那麼分量的長度會變化。同樣,要求里的向量是一組有效的、線性無關的基。)
- 一個(被視為一坨行向量的)矩陣乘以一個列向量
矩陣的好處是可以幫助我們適應「並行計算」。還是從分塊矩陣的角度來看:
其中每一個在乘以的時候都不用擔心受到其他行的干擾。看上面式子最右側的結果,它的意思就是把依次投影到各個向量上。(複習:是一個標量嗎?)
表示把向量投影到空間中。
- 一個(被視為一坨行向量的)矩陣乘以一個(被視為一坨列向量的)矩陣
還是那句話 ,矩陣的好處是可以幫助我們適應「並行計算」。
這是在同時求多個列向量在空間里的投影。
- 一個(被視為一坨行向量的)矩陣乘以一個(被視為一坨列向量的)矩陣——標題和上一小節相同哦
既然矩陣可以描述一個空間,那憑什麼只能讓投到,不能讓投到?嗯,可以的!上式就是這樣,把X視為一個空間,把里的列投影到(用的列所描述的)一個向量空間里。和上一小節相比,只不過行和列都顛倒了。 - 思考題
如果大小為m乘n的矩陣,其各列組成了一組標準正交基,那麼對於大小為n乘k的矩陣,表示什麼?(提示:)
- 下一步的學習方向
接下來,你可以大膽地去學習並理解特徵值與特徵向量、主成分分析(PCA)、譜分解(Spectral decomposition)、奇異值分解(SVD)。
========== 第 三 節 ==========
本節介紹幾個雜七雜八的理解方式。以下的向量均為列向量。
- 向量點乘——飢餓的大怪獸
在我的腦子裡,就像一個飢餓的怪獸一樣,有一張向左的嘴和一張向上的嘴,同步地吞噬著向右蠕動的和向下蠕動的。
如果是矩陣乘以矩陣,那麼也是個矩陣,矩陣的每一個元素都是一個大怪獸。 - 只關注結果矩陣中的某一個元素時
使用大怪獸模型理解:,即的第行和的第列相乘。 - 向量u的二次函數
使用大怪獸模型理解:對於第行第列的元素,在以的方式看待時,第行的任何元素都會與的第個元素相乘一次且只有一次;在以的方式看待時,第列的任何元素都會與的第個元素相乘一次且只有一次;不可能與和的其他元素相乘。
- 配對
還是使用大怪獸模型理解:得到一個矩陣,其中矩陣里的每個位於位置的怪獸能且只能吃到一個食物:。所以其實就是在兩兩配對嘛!
- 一個(被視為一坨列向量的)矩陣乘以一個(被視為一坨行向量的)矩陣
可理解為個形如的矩陣相加。注意,是個矩陣而不是標量。
就是一個類似excel表格,來表示方程組。
我在程序中用到過,程序根據輸入條件動態生成一個線性方程組,可能有幾萬個變數,用來計算最優化解,這樣用矩陣代表時比較方便,在程序中可以用數組或或list數據結構來遍歷。如果用人工算計算量太大沒人願意干。另外矩陣演算法根據情況可以進一步分解在多處理器實現並行演算法,這樣計算機在多核處理器上時更快。
計算機圖形學中因為形體需要坐標變換或非線性影射,需要在矩陣中做各類運行,可以很方便用乘法,因為圖形就是一個矩陣,你打遊戲時,顯卡實質在做各種矩陣運算,這類函數很多都定義好了,如果寫程序你只要調用api,傳入計算參數,參數多以矩陣形式表示。飛行器 坐標變換可以用四元數來實現姿態解算。
你看到的電腦圖像世界,實際上是矩陣模擬出來的,很多問題可以映射成矩陣問題。
矩陣用乘法表示方程時在計算機程序設計時簡化了運算,但在變數數量小手工算時反而增加了運算。
可能剛開始學線性代數會覺得矩陣乘法很 "人為". 實際上, 選定坐標 (基) 之後, 線性變換的複合就對應著這種的矩陣乘法, 所以這種乘法並不 "人為".
一個更加結構化的解釋是, 一個群, 如果具有仿射代數簇的結構 (大致相當於裡面的點都是某些多項式的公共零點), 則這個群, 一定是某些方陣按方陣乘法構成的群 (即域上的仿射代數群實際是線性代數群).依次進行兩個變換。
矩陣乘法實質就是空間的線性變換,關於矩陣的理解推薦看看本人的一篇專欄,講的不深且不一定專業,但是希望可以給你帶來點不一樣的理解
知乎專欄
對矩陣最本質的描述是線性變換,而矩陣乘法就是線性變換的複合。除此以外,矩陣還可以用來描述:線性組合;坐標變換;線性方程組。
矩陣的乘法本質就是兩個線性映射的複合
空間中存在一個向量,記為 X
對向量x施加某種變換?,記為 ?X
而變換可以用矩陣描述,有 ?~A
所以 有 ?X=AX
即 矩陣是對某種變換的description
另外,有特徵值的定義公式: λX=AX
我們考慮最簡單的變換-線性變換,A當作為線性變換的描述,則有 左=一個沒有方向的實數λ點乘一個向量X=對這個向量施加描述為A的線性變換?=右 , 可以看到左=右,所以左邊和右邊的方向是一致的,是沒有改變的!既然方向沒變,那不禁要問:對向量X施加線性變換?究竟有沒有改變向量X?如果有,那改變了X的什麼??
答案是:改變了。
對X施加線性變換?雖然沒有改變X的方向,但是改變了向量X的大小,而這個大小變化的尺度就用λ表示。
同理,當?為其他變換時亦成立。
綜上,有
向量A的本質:即對某種變換?的description
特徵值λ的本質:對向量X施加某種變換?,向量X的伸縮尺度即為λ。
且有:
?~A~λ
所以我們做題時總感覺變換、矩陣和特徵值之間總有一種不可描述的關係,就是因為這三個傢伙都是在圍繞著變換轉圈圈。到這裡不禁感嘆,代數學的本質其實就是?,其他什麼矩陣、特徵值、二次型、線性空間、酉空間、各種高維空間、基、坐標,甚至看似無關的行列式,都在圍繞著?轉圈圈,而?就是一種武功-瞬間移動,所以誰再說分析學是活的,代數是死的,那他肯定是沒學會代數,代數才是真正的活生生。
而分析學是研究函數的科學,有下面幾種形式的研究:
①正面對函數硬剛:用分析學四大法寶:有極限=收斂、連續性、可導性、可積性研究該函數,討論他們的這四大性質。
②正面剛不行的話,換個體位再剛:將這個正面剛不動的函數等價展開成泰勒級數or傅里葉級數,再討論四大性質,繼續剛。
③另外,微積分這對逆的關係,在計算中起到了極為重要的運用,而黎曼積分則對實際問題求高維空間物體的「體積」發揮了極大的運用,至於多大?應該是唯一方法。
oh,題主問矩陣乘法的意義?
答曰:施加變換。
在@Brown Chen 的基礎上把這個步驟詳細寫出來,比如一個2D平面上的點(),我們對它進行一次線性變換(暫時排除平移),得到():
如果再對這個坐標再進行另外的一次線性變換,得到():
好了,這個時候,如果我們想直接知道從()---&>()的變換是怎樣的,只需要做簡單的代換就可以了,可以得到:
()----&>() ()------&> ()
寫的好看點是:
而從()-----&> () 同樣是這樣的形式,只不過服從一定的計算方法:
同樣:
這樣以後,就歸納出了矩陣,和矩陣的乘法。乘法的法則其實就是上面的方法。
矩陣乘法的不可交換性也可以從這樣的線性變換推導出來。
諸位有興趣可以看這個答案,從高中代數引申到線性代數。還算深入淺出吧。
如何直觀理解矩陣和線性代數?
1.矩陣乘矢量y=Mx:矩陣的每一列mi都是一個矢量,所有的列組成一個基底,x是這個基底下的坐標,y是標準基底I下的坐標。所以矩陣乘矢量是把M下的坐標x換成了I下的坐標(坐標變換)
2.矩陣乘矩陣Y=MX:將X的每一列xi看成M下的坐標,則Y的每一列看成I下的坐標,道理同1。此時是一組矢量(基)的坐標變換——基X為M下的表示,變換成在I下的表示Y
反對大多數答案。
看了這麼多答案,都是用一個更高階的概念來解釋一個低階的概念。根本講不通嘛。你拿線性空間講矩陣,有啥意義?能把矩陣運算規則的來源講解清楚?線性也好,空間也罷,以及映射複合等等概念,都是對矩陣乘法的規律的描述,不是對矩陣乘法的定義的解釋好嘛?
在我看來,矩陣乘法是加權求和的記法。如果引入代數的概念,那麼2個矩陣描述的是(多個)(n元一次方程組)。3個以及以上矩陣相乘描述的是方程組的因式分解的規律,即方程組嵌套關係。
以上三種,已經解釋清楚了矩陣乘法。
先從純數的角度說起。
首先,把左矩陣看做m個橫,右矩陣看做n個豎。
其次,每個橫豎相乘可以理解為數的加權求和。
舉一個例子:三*川
把這些橫和豎排列組合得所有情況找出來並計算它們的乘積並按順序排成新的矩陣形式的過程就是矩陣乘法的過程。任何一個橫豎相乘都不影響其他橫豎的結果。所有排列組合結果即為
11,12,13
21,22,23
31,32,33
直覺上,把橫豎線相交後就能得到所有的點的下標。它們和每種排列組合的情況一一對應。記為田。三橫三豎。大家可以推廣到任意行任意豎。
每一種組合情況都是一根橫一根豎的乘法,即加權求和。左橫為映射,右豎為數的組合。
再舉一個例子,我去超市買3斤蘋果,價格一斤5塊。
那麼從從蘋果的斤數到我的花費這個轉換可以表示為數乘。即15=5*3。
把5看做映射,把3看做要變換的元素。一次乘法,就是單位的變換,從斤變到人民幣。一個變數變換為另一個變數。
現實生活中,我不會僅僅買蘋果,說不定還會買桃子。也就是說,不是一個變數到另一個變數的變換,而是多個變數到多個變數的變換。假設桃子一斤10塊我買了6斤。
那麼從斤數到錢數的計算即為5*3+10*6。這就是一次加權求和。一次加權求和,可以理解為多個變數到一個變數的變換。乘法可以變換單位,加法只能同單位的數相加。如果結合坐標系變換來理解,加法和乘法就更好了。
從映射的角度,我們把數(5,10)看做左橫,把(3,6)看做右豎,即為橫豎的乘積來指代加權求和。記法為一 *丨。
買了這些東西,不僅僅花了我的錢,我吃掉後還提供給我能量,我還要繳稅。你看,斤數不僅變成錢數,還變成了卡路里,還變成了稅款,還能增加我女朋友對我的滿意度。也就是說多個變數變為了多個變數。記在一起為三 *丨。如果引入方程,這個記法描述的就是一個多元一次方程組哦。
如果加上我女朋友,她也在這兩個超市買了固定量的蘋果桃子。那麼記在一起即為 三*兒。這個記法,就是多個方程組。僅此而已嘛。
至此,一個最簡單的矩陣所具有的現實意義已經表達完畢。我們可以擴展到任意行任意列,只有一個限制條件,每一行每一列所包含的元素個數必須一樣,即橫豎線維數必須一樣,加權求和的運算才有意義。這是僅有的矩陣乘法的限制了。
每次加權求和代表的含義,就是我們自己要做的工作,我們負責為矩陣乘法賦予意義。矩陣乘法負責計算多變數到多變數的變換。即矩陣乘法僅僅是數的運算的一種抽象,它不管數到底代表什麼,它只關心數的運算規律。
我們可以用矩陣來抽象我們各自的問題。
舉個例子,左矩陣已知,右矩陣未知,結果已知的情況下,我們可以用y=Ax來描述這一規律。然後求解x這個矩陣。
推薦閱讀:
※泰勒展開只在一點上,怎麼保證整個函數能夠趨近?
※在有原函數表達式的情況下,為什麼需要用微分求得近似函數?
※控制理論都包括哪些內容?應該怎樣進行學習?最好能推薦幾本書。
※奇異矩陣與退化矩陣有什麼不同?