首頁 > theory > math > > 正文

透析矩陣,由淺入深娓娓道來—高數-線性代數-矩陣

發布人:zhoulujun    點擊:

矩陣的一些數學知識相信大家已經忘記的差不多了,何況在學習的時候可能都是懵懵懂懂,這里抽絲剝繭講透矩陣。

線性代數在科學領域有很多應用的場景,如下:

transformuse-the-scene.jpeg

矩陣,是線性代數中涉及的內容,

20170928204805587192568.png

線性代數是用來描述狀態和變化的,而矩陣是存儲狀態和變化的信息的媒介,可以分為狀態(靜態)和變化(動態)信息來看待。

描述一個事物的狀態需要在一個選好的坐標系(什么樣的向量空間)中進行,所以矩陣所包含的信息從來都是成對出現(坐標值和坐標系)。而基就是坐標系的信息,可以將其拆分出來。

當把矩陣以動態信息來看待時,其信息的側重點在于變化二字。這時的矩陣可以看做是一個方程。

通過矩陣內所描述的變化規則從一個狀態變換到另一個狀態。變換可以理解為事物本身的變化,也可以理解為坐標系的變化。


矩陣的本質:

探討矩陣的本質的話,可以先看這篇文章:

理解矩陣(最通俗易懂的教程——高數-線性代數-矩陣

其思路概括來說如下:

  • 首先要有空間的概念,如果不考慮嚴謹的定義,你可以用我們熟知的二維或者三維空間來想象:里面有無窮多的點,通過某些動作,可以從一個點“移動”到另一個點,容納運動是空間的本質特征。

  • 線性空間也是一種空間,線性空間是容納向量對象運動的。如果選定了坐標系,那么一個向量可以用它在每個維度上的坐標值來表示,比如二維空間里可以表示為[x, y],三維空間可以表示為[x, y, z],更高維雖然無法想象,但仍然可以用類似的數學方式表示出來。

  • 向量共有兩種形式,一種為列向量,一種為行向量。雖然我們可能比較習慣行向量,但在這里,我們默認使用列向量。比如[-1,2]就這樣表示:


  • 我們可以通過某種運算,把空間里的一個點“移動”另一個位置。比如我們想把[-1,2]移動到[5,2],可以執行如下運算:


  • 上圖中左邊的這個變量,就是一個矩陣,所以矩陣是線性空間中運動(變換)的描述。

換言之,矩陣的乘法,本質是一種運動。但除此以外,還有另外一種理解方式。

我們知道,運動是相對的,把[-1,2]變成[5,2],除了“移動”,還可以通過變換坐標系的方式實現。也就是說,找到這樣的一個坐標系,在那里,同樣的一個向量可以表示為[5,2]。

在這個情況下,對上面那個矩陣相乘例子而言,里面的那個2x2方陣就可以理解為一個坐標系,在這個坐標系下,[-1,2]這個向量可以表示為[5,2]。

34.gif


比如上面這個動圖中,通過坐標系變化,把紅色向量[0,1]、綠色向量[1,0]變成了[3,0]和[1,-2]。

因此,矩陣的實質就是將坐標整體線性變換



矩陣的基本定義:

  • 矩陣:有m*n個數排成m行n列的數表成為m行n列矩陣,簡稱m x n矩陣,記為A。

  • 負矩陣:-A稱為矩陣A的負矩陣

  • 行矩陣:只有一行的矩陣稱為行矩陣,又稱為行向量;A=(a1 a2 ...an) 

  • 列矩陣:只有一列的矩陣稱為列矩陣,又稱為列向量;

  • 同型矩陣:兩個矩陣行數列數均相等,稱他們為同型矩陣;

  • 相等:  若兩個矩陣是同型矩陣,且它們的對應元素相等,成這兩個矩陣相等。

  • 零矩陣:元素都是零的矩陣。注意:不同型的零矩陣是不同的。

  • 系數矩陣:線性方程組的系數構成的矩陣稱為系數矩陣。

  • 方陣:當矩陣的行數與列數相等的時候,稱之為方陣

  • 奇異矩陣:對應的行列式等于0的方陣。即當|A| = 0時。

  • 非奇異矩陣:對應的行列式不等于0的方陣。即|A|≠0時。

  • 數量矩陣:如果一個矩陣的對角線元素全部相同,其余元素都是0,這個矩陣叫數量矩陣,又叫純量矩陣。

  • 對角矩陣:簡稱對角陣(默認為正對角陣)。是一個主對角線之外的元素皆為 0 的矩陣。對角線上元素可以為 0 或其它值。記為 A = diag(λ1,λ2,..,λn)  ; 分為正對角陣和反對角陣。


20170928203618130742890.jpeg

  • 對稱矩陣:是元素以主對角線為對稱軸對應相等的矩陣對陣矩陣定義為:A=AT(A的轉置),對稱矩陣的元素A(i,j)=A(j,i).

  • 反對稱矩陣:反對稱矩陣(又稱斜對稱矩陣)定義是:A= - AT(A的轉置前加負號) 它的第Ⅰ行和第Ⅰ列各數絕對值 相等,符號相反,于是,對于對角線元素,A(i,i)=-A(i,i),有2A(i,i)=0

     Screen Shot 2017-09-28 at 19.43.36.png

  • 單位矩陣:主對角線上的元素為1,其它元素為0的矩陣。用E表示

    例如一個 3 × 3的矩陣:

    單位矩陣

    別的矩陣和單位矩陣相乘,得到的結果就是其自身:A × I = A

  • 行列式行列式(Determinant)是數學中的一個函數,將一個n×n的矩陣A映射到一個標量,記作 det(A)或 |A|。行列式可以看做是有向面積或體積的概念在一般的歐幾里得空間中的推廣。

    在任意的一個方陣都存在這樣的一個標量,稱作該方陣的行列式.

    41.jpeg


    20170928191311778895029.jpeg


  • 余子式:代數余子式是這樣定義的,對于一個方陣M,給定行、列元素的代數余子式等于對應的余子式的有符號的行列式

    我們把上面的這句定義給提煉一下,某個矩陣的代數余子式是行列式,那么我們已經注意到了,某個矩陣的余子式是一個矩陣.這樣我們就知道兩者的不同之處了,一個是標量,一個是矩陣,這就是兩者的不同之處.好了,了解完兩者的不同之處之后,我們來看代數余子式的計算方法是怎么定義的,如下所示.


    只有上面的公式讓我們感到很無助不是,那么接下來我們用一個接著余子式的示例來求解對應的代數余子式.如下所示

    20170928191923970199077.jpeg

    那么說了這么多余子式和代數余子式的知識,到底對我們的行列式的求解有什么幫助呢?其實,我們是可以利用余子式和代數余子式直接計算任意n維方陣的行列式,首先,我們找到矩陣的任意一行i(i不大于最大行數),然后,列數j依次增加.具體的計算公式如下所示.

    那么有了公式之后避免不了就是驗證,接下來我們就用公式來推導4x4方陣的行列式.由于有了計算公式的便利,我們計算起來就比較方便了,但是我們要仔細判斷每一個項的正負(自己驗證的時候沒注意,驗證出錯兩三遍).這里,我選擇的i =1(自己驗證的時候可自行選擇i) ,具體的驗證過程如下所示.(由于其中的項過多,所以分兩步截圖.)

    20170928191923369128990.jpeg

    20170928191923139080047.jpeg


    通過上面我們發現,行數列數越多的方陣行列式的復雜度就會越高.復雜度會呈指數增長.我們計算到4x4的就已經非常的麻煩了(其實4x4的行列式我們已經夠用了),那么要是在來個10x10的方陣行列式,我們豈不要瘋掉?這里,書中提到了一種行列式的計算方式叫做"主元選擇"的計算方式,感興趣的小伙伴可自行查詢資料.

    上面我們已經說完了行列式,但是說了一大堆,我們還是懵圈的,那么行列式是用來干什么的呢?或者說是行列式代表著什么意義呢?其實,在2D中行列式代表著以基向量為兩邊的平行四邊形的有符號面積.在3D環境中則代表著以基向量為三邊的平行六面體有符號體積.我們看以下示例來驗證我們的想法.

    20170928192640574823977.jpeg

    如圖所示,在2D環境中有基向量v = [3 0] ,u = [1 2].那么它的面積是3x2 = 6,它的行列式是3x2-1x0 = 6,我們發現行列式是和面積相等的(當然了,如果基向量v = [-3 0] ,行列式最終計算出來的值為-6)

    接下來,我們看一下在3D環境中的有三個基向量u = [2 0 0],v = [1 2 0],w= [0 0 1],如圖所示

    20170928192640847251211.jpeg

    然后我們計算由上面三個基向量所圍成的正六面體的體積為1x2x2 = 4,計算的三個基向量所組成的矩陣的行列式.發現兩者的絕對值是相等的.如下所示.

    20170928192640733871745.jpeg

  • 伴隨矩陣:矩陣A的伴隨矩陣就是其余子矩陣的轉置矩陣,記做:



    用伴隨矩陣求逆矩陣

    20170928200749427330374.png

    這個是我自己想飛算法:

    math.png

  • 逆矩陣:設A是數域上的一個n階方陣,若在相同數域上存在另一個n階矩陣B,使得: AB=BA=E。則我們稱B是A的逆矩陣,而A則被稱為可逆矩陣。記作: A-1

    A × A-1 = I

    那么我該如何計算方陣M的逆呢?在我看的3D圖形上是給出了如下的方法.

    在上面的公式中矩陣的行列式我們知道如何求解,那么adj M是什么鬼?adj M叫做矩陣M的伴隨矩陣,定義為矩陣M的代數余子式矩陣的轉置矩陣(挺繞口).沒事,我們看一下示例是如何解釋的這個的.假設矩陣M如下所示.

    矩陣A的|A|的行列式還可以如此計算:


    Screen Shot 2017-09-28 at 20.13.49.png


  • 拉普拉斯展開

    在數學中,拉普拉斯展開(或稱拉普拉斯公式)是一個關于行列式的展開式。將一個n×n矩陣B的行列式進行拉普拉斯展開,即是將其表示成關于矩陣B的某一行(或某一列)的n個元素的(n-1)×(n-1)余子式的和。行列式的拉普拉斯展開一般被簡稱為行列式按某一行(或按某一列)的展開。由于矩陣B有n行n列,它的拉普拉斯展開一共有2n種。拉普拉斯展開的推廣稱為拉普拉斯定理,是將一行的元素推廣為關于k行的一切子式。它們的每一項和對應的代數余子式的乘積之和仍然是B的行列式。研究一些特定的展開可以減少對于矩陣B之行列式的計算,拉普拉斯公式也常用于一些抽象的推導中。

    Screen Shot 2017-11-03 at 17.22.07.png

  • 轉置矩陣

    轉置矩陣其實是原來矩陣的行變成了新矩陣的列,以一個90°的角度進行了旋轉。下面兩個圖就是矩陣A和它的轉置矩陣AT

    Screen Shot 2017-09-28 at 18.19.00.png

    1396375-aaedf975aeb7453e.jpeg

    37.png

    矩陣轉置的推理

           將一個矩陣轉置之后,再次轉置一次,便會得到原來的矩陣.

            對于任意的對角矩陣D,都有轉置矩陣DT=D,包括單位矩陣I也是如此.

    正交矩陣:


    先來看一下正交矩陣是如何定義的,若方陣M是正交的,則當且僅當M與他的轉置矩陣M^T的乘積等于單位矩陣,那么就稱矩陣M為正交矩陣.

    MTM=I

    在矩陣的逆中我們知道,矩陣的逆和矩陣的乘積為單位矩陣I,由此推理,我們可以知道,如果該矩陣為正交矩陣,那么矩陣的逆和轉置矩陣是相等的.

    MT=M-1

    那么正交矩陣存在的意義是什么呢?其實如果一個矩陣是正交矩陣,那么矩陣的逆和轉置矩陣是相等的.轉置矩陣是非常簡單計算的,而計算矩陣的逆如果使用代數余子式計算是非常的麻煩,所以我們可以直接計算轉置矩陣然后直接得到該矩陣的逆.


矩陣的運算:


  • 加法運算:

    1.png

    例如:


    顏色相同的方框數字進行相加,例如這里: 8 + 3 = 11,6 + 10 = 16

  • 減法運算:

    需要注意的是,進行加減運算的兩個矩陣維度必須是相同的。

    矩陣乘以標量

    4.png

    類似,矩陣除以標量不再贅述

  • 矩陣相乘

    6.png



    5.gif

    需要注意的是:

    1.左邊矩陣的列數,要和右邊矩陣的行數相同。

    2.相乘的位置不能互換.A × B ≠ B × A

    3.相乘的次序不影響結果( A × B ) × C = A × ( B × C )

矩陣的本質就是線性方程式,兩者是一一對應關系。如果從線性方程式的角度,理解矩陣乘法就毫無難度。

下面是一組線性方程式。

20170928183407233474570.png

矩陣的最初目的,只是為線性方程組提供一個簡寫形式。

20170928183407832046702.png

老實說,從上面這種寫法,已經能看出矩陣乘法的規則了:系數矩陣第一行的2和1,各自與 x 和 y 的乘積之和,等于3。不過,這不算嚴格的證明,只是線性方程式轉為矩陣的書寫規則。

下面才是嚴格的證明。有三組未知數 x、y 和 t,其中 x 和 y 的關系如下。

20170928183407888095426.png

x 和 t 的關系如下。

20170928183407859317254.png

有了這兩組方程式,就可以求 y 和 t 的關系。從矩陣來看,很顯然,只要把第二個矩陣代入第一個矩陣即可。

20170928183407595060173.png

從方程式來看,也可以把第二個方程組代入第一個方程組。


20170928183653225200012.png

上面的方程組可以整理成下面的形式。

20170928183653162875418.png

最后那個矩陣等式,與前面的矩陣等式一對照,就會得到下面的關系。

20170928183653742042817.png

矩陣乘法的計算規則,從而得到證明。



矩陣相乘的應用:

先看一個例子:

某公司有四個工廠生產三種產品,已知每種產品的產量,利潤和占地空間,因為工廠設在不同的地方,所以老板想調整一下各個工廠的產品輸出,所以你告訴老板每個工廠的現有利潤和占地空間。

產量:噸

工廠\產品P1p2p3
524
382
604
016

利潤:萬元  空間:平方米

產品利潤空間
P124
P213
P332

一般求解是這樣的:產量利潤=總利潤,產量空間=總空間

所以就是那12個結果,都會算

如果用矩陣來表示呢

9.png

直接拿(產量)*(利潤,空間)就能直觀的看到結果了。

這里是矩陣乘法的簡單應用。



4X4齊次矩陣

兩條平行線會相交嗎?

在沒有認識到齊次空間之前,我們知道兩條平行線是不能相交的,但是兩條平行線真的不能相交嗎?我們看下面這幅圖,我們都知道兩條鐵軌是平行的,但是這兩條平行的鐵軌在無窮遠處會相交于一點.這對嗎?在笛卡爾2D坐標系中, 我們用 (x, y) 表示笛卡爾空間中的一個 2D 點,而處于無限遠處的點 (∞,∞) 在笛卡爾空間里是沒有意義的。所以我們是無法解釋這種現象的,但是在齊次空間中,我們可以解釋這種現象.

帶著上面的兩個問題,我們開始我們的齊次坐標之旅.其實齊次空間的出現主要是用于投影問題的解決.所謂齊次坐標就是將一個原本是n維的向量用一個n+1維向量來表示. 4D齊次空間有4個分量分別是(x,y,z,w),第四個是w,稱為齊次坐標.那么在3D笛卡爾坐標系中可以使用其次坐標表示為(x/w,y/w,z/w).


那么我們就解決第一個問題,解釋兩條平行線投射到一個2D平面中相交于一點.我們知道在2D笛卡爾坐標系中用Ax+By+C= 0表示一條直線.兩條平行直線相交的話,要關聯兩個方程式.如下所示.



在笛卡爾坐標系中,上述的兩者如果相交,那么C=D=0,也就是兩者是同一條過原點的直線.顯然是解釋不了兩條平行線相交于一點的.如果我們引入齊次坐標的概念的話,我們把x/w, y/w 代替 x, y 放到投影空間里,如下所示.


上面的方程式組可以轉換為下面的方程式組.

在C≠D的情況下,那么對方程組求解,就是w = 0兩條直線相交,那么就是(x,y,0).兩條直線相交于無限遠處.


那么引進齊次坐標有什么必要,它有什么優點呢?

1.它提供了用矩陣運算把二維、三維甚至高維空間中的一個點集從一個坐標系變換到另一個坐標系的有效方法.

2.它可以表示無窮遠的點。n+1維的齊次坐標中如果h=0,實際上就表示了n維空間的一個無窮遠點。對于齊次坐標[a,b,h],保持a,b不變, 點沿直線 ax+by=0 逐漸走向無窮遠處的過程.


矩陣的幾何解釋

與其說矩陣的幾何意義這么生澀難懂,不如說的是矩陣在幾何中到底是有什么作用呢?一般來說,方陣可以描述任意的線性變換.,也就說,在幾何當中,我們用矩陣表示幾何體的空間變換.比如我們在程序中常用的平移、旋轉、縮放等等.(沒事,這時候說的可能很生澀,看到最后你就會明白怎么回事的)


為了更好的理解矩陣的幾何意義,我們先用一個簡單的示例來說明一下.如果我們把一張圖片放入一個2D的坐標系中(為了給下面做鋪墊,向量形式為[x,y,0]),并且規定它的大小為邊長為1的正方形.向量p = [0,1,0],向量q = [1,0,0].如下圖所示.

現在我們就單獨的看圖片的右上頂點 [1,1,0] (可看做向量).


首先我們先把[1,1,0]這個向量拆分一下.如下所示.

緊接著.我們要定義一下,p,q和r定義為指向 +x,+y,+z方面的單位向量.然后用單位向量表示圖片的右上頂點 [1,1,0] .如下所示.

現在,向量[1,1,0]就被表示成p,q和r的線性變換了.向量p,q和r被稱為基向量.這里的基向量是笛卡爾坐標系.但是事實上,一個坐標系能用任意的3個基向量表示.當然了,這三個向量不在同一個平面.向量p,q和r創建一個3x3的矩陣M.如下所示.

當然了,矩陣M可不單單只有上面的一種形式,上面的只能算是一種形式,記住我們說過的,一個坐標系能用任意的3個基向量表示.接下來,我們再次研究一個向量和一個矩陣相乘.(圖形變換的開始部分),先看一下公式.

我們還是要借助一開始棟哥的那個坐標系圖形.如果矩陣M如下所示.那么圖形將不會發生任何變換.



接下來,我們就搞起圖形變換了.如果矩陣M發生了如下改變,那么圖形會有什么樣的變化呢?

在矩陣M中.向量p從[1 0 0]變換到[2 1 0],q從[0 1 0]變換到[-1 2 0],r未發生變化.然后我們圖形的右上點會再次發生縮放和旋轉的變換.


得到效果圖如下所示.

上面是2D中的變換,3D中的變化一樣類似.例如現在有向量OB[1 1 1],如下圖所示.


同時矩陣M如下所示.


結果變換之后,向量的圖像如下所示.


平移矩陣

在3D圖形:矩陣與線性變換我說過幾種線性變換,比如旋轉,縮放,鏡像等等,唯獨沒有平移,但是在日常開發過程中,平移應該算的上我們很常用的一種仿射變換了.那么這是為什么呢?根據書上所說,矩陣的乘法性質所決定的,零向量總是變換成零向量,所以任何矩陣的乘法表達的變換是不會有平移的.但是我們卻可以使用4X4平移矩陣表示3D環境中的平移變換,使用3X3平移矩陣表示2D環境中的平移變換.(假設w不變且w = 1)具體公式如下所示.



旋轉矩陣

關于平面向量的逆時針旋轉: 

已知任意一個向量OA=(x,y),把向量OA繞其起點O沿逆時針方向旋轉α角得到向量OB=(xcosα-ysinα,xsiaα+ycosα)。推導如下:

20170928205627767154890.png

20170928205627856595825.png

可以反推導出旋轉的矩陣:

3038868-a1715e0a9135e58e.png


縮放矩陣:

未完待續%…,等閑了點,再整理補充!



參考文章:

線代基本概念

機器學習筆記004 | 矩陣和向量,提升效率的數學工具

線性代數之矩陣理解

理解矩陣乘法理解矩陣乘法 

AI學習筆記:[0]什么是矩陣

3D圖形:矩陣的相關知識

3D圖形:矩陣的行列式,矩陣的逆、正交矩陣、齊次矩陣

高級動畫學習心得筆記(五)變換


推薦閱讀:

【通俗理解線性代數】 -- 矩陣與空間的基和坐標

【通俗理解線性代數】 -- 矩陣的相似對角化

矩陣

數組和矩陣

矩陣特征值分解與奇異值分解含義解析及應用

從矩陣與空間操作的關系理解CSS3的transform

線性代數導論11——矩陣空間、秩1矩陣和小世界圖

如何直觀理解矩陣和線性代數?

矩陣特征值分解與奇異值分解含義解析及應用


傳送門:3D數學基礎 圖形與游戲開發.pdf