吐槽一下:矩陣本身不難,但是矩陣的寫作太蛋疼了 <code>(⊙﹏⊙)汗</code> 還好有<code>Numpy</code>,不然真的崩潰了...
<code>LaTex</code>有沒有一個內建了很多常用<code>公式</code>以及<code>推導</code>或者含<code>題庫</code>的線上編輯器?
代碼褲子:https://github.com/lotapp/BaseCode
線上程式設計系:https://mybinder.org/v2/gh/lotapp/BaseCode/master
數學基礎:https://www.cnblogs.com/dotnetcrazy/p/9294292.html
Numpy基礎:https://www.cnblogs.com/dotnetcrazy/p/9309555.html
線上預覽:http://github.lesschina.com/python/ai/math/矩陣專欄.html
矩陣:是一個按照長方陣列排列的複數或實數集合。
通俗講就是:把數排成m行n列後,然後用中括号把它們包覆,這種形式的組合就是矩陣了~ eg:
$\begin{bmatrix} &a_{11}&a_{12}&a_{13}&...&a_{1n} \\ &a_{21}&a_{22}&a_{23}&...&a_{2n} \\ &a_{31}&a_{32}&a_{33}&...&a_{3n} \\ &\vdots&\vdots&\vdots&\ddots&\vdots\\ &a_{m1}&a_{m2}&a_{m3}&...&a_{mn} \\ \end{bmatrix}$
比如上面這個示例就是一個<code>m × n</code>的矩陣(m行n列的矩陣),如果<code>m=n</code>那麼就叫做<code>n階方陣</code>,eg:
$\begin{bmatrix} 1&2&3 \\ 4&5&6 \\ 7&8&9 \end{bmatrix}$
這個就是<code>3階</code>方陣
如果回到中學,老師肯定都是通過一次方程組來引入矩陣(逆天的老師是這麼講的):
$\begin{cases}x_1+x_2=-1\\2x_1-x_2=4\\3x_1+5x_2=-7\\\end{cases}$ ==> $\begin{bmatrix}1&1\\2&-1\\3&5\end{bmatrix}\begin{bmatrix}x_1\\x_2\end{bmatrix}=\begin{bmatrix}-1\\4\\-7\end{bmatrix}$
如果你方程組都忘記怎麼解的話...好吧還是說下吧:“比如這題,可以先把x2移到右邊,這樣x1就等于一個表達式了(x1=-x2-1),然後帶入第二個表達式就可以解出x1和x2了,一次的其實兩個表達式就可以解出了,剩下的你可以把值帶進去驗證一下”
加減比較簡單,就是對應元素相加減 (隻有<code>行列都相同的矩陣</code>才可以進行)
就不用麻煩的<code>LaTex</code>一行行打了,咱們用更友善的 NumPy 來示範一下矩陣加法(不懂代碼的直接看結果,不影響閱讀的)
Numpy有專門的矩陣函數(np.mat),用法和<code>ndarray差不多</code>,我們這邊使用經常使用<code>ndarray</code>類型,基礎忘記了可以去檢視一下:Numpy基礎
擴充:矩陣的加法運算滿足交換律:A + B = B + A (乘法不行)
In [1]:
In [2]:
In [3]:
Out[3]:
In [4]:
Out[4]:
In [5]:
Out[5]:
In [6]:
In [7]:
In [8]:
In [9]:
這個也比較簡單,就是和每個元素相乘,eg:<code>2×A</code>,A原本的每一個元素都擴大了兩倍
數除其實就是乘以倒數(1/x)
In [10]:
In [11]:
Out[11]:
In [12]:
In [13]:
Out[13]:
矩陣乘法還是要用<code>LaTex</code>示範一下的,不然有些朋友可能還是覺得比較抽象:(大家有什麼好用的LaTex線上編輯器可以推薦的)
拿上面那個方程組來示範一下:
$\begin{bmatrix}1&1\\2&-1\\3&5\end{bmatrix}\begin{bmatrix}x_1\\x_2\end{bmatrix} ==> \begin{cases}x_1+x_2\\2x_1-x_2\\3x_1+5x_2\end{cases}$
稍微變化一下就更形象了:
$\begin{bmatrix}1&1\\2&-1\\3&5\end{bmatrix}\begin{bmatrix}x_1&y_1\\x_2&y_2\end{bmatrix} ==> \begin{cases}x_1+x_2\\2x_1-x_2\\3x_1+5x_2\end{cases} \begin{cases}y_1+y_2\\2y_1-x_2\\3y_1+5y_2\end{cases}==>\begin{bmatrix}x_1+x_2&y_1+y_2\\2x_1-x_2&2y_1-y_2\\3x_1+5x_2&3y_1+5y_2\end{bmatrix}$
舉個簡單的例子:A×B
$\begin{bmatrix} 1&2 \\3&4 \end{bmatrix}\begin{bmatrix} 4&3 \\2&1 \end{bmatrix}=\begin{bmatrix} 1*4+2*2&1*3+2*1 \\3*4+4*2&3*3+4*1 \end{bmatrix}=\begin{bmatrix} 8&5 \\20&13 \end{bmatrix}$
以後記不得怎麼乘就自己推一下,值得注意的是:
兩個矩陣的乘法僅當第一個矩陣A的列數(column)和另一個矩陣B的行數(row)相等才可以進行計算
你這樣想就記得了:$\begin{bmatrix} 1&2 \\3&4 \end{bmatrix}\begin{bmatrix} x_1 \end{bmatrix} 還原成方程組就是這樣\begin{cases}1*x_1+2*?\\3*x_1+4*?\end{cases}\\這是什麼鬼?至少得這樣吧:\begin{bmatrix} 1&2 \\3&4 \end{bmatrix}\begin{bmatrix} x_1 \\x_2 \end{bmatrix}$
In [14]:
In [15]:
Out[15]:
程式驗證了我們上面的運算結果,還得注意一下:
<code>A×B</code>和<code>B×A</code>是不一樣的,eg:B×A
$\begin{bmatrix} 4&3 \\2&1 \end{bmatrix}\begin{bmatrix} 1&2 \\3&4 \end{bmatrix}=\begin{bmatrix} 4*1+3*3&4*2+3*4 \\2*1+1*3&2*2+1*4 \end{bmatrix}=\begin{bmatrix} 13&20 \\5&8 \end{bmatrix}$
如果你乘着乘着就忘記到底怎麼乘,就把右邊的矩陣換成x1,x2,然後就會了
In [16]:
In [17]:
Out[17]:
In [18]:
In [19]:
In [20]:
In [21]:
Out[21]:
幂乘比較簡單,就是每個元素開平方,不一定是方陣
必須是方陣才能進行幂運算,比如<code>A²=A×A</code>(矩陣相乘前提:<code>第一個矩陣A的行=第二個矩陣A的列==>方陣</code>)
In [22]:
In [23]:
Out[23]:
In [24]:
Out[24]:
In [25]:
In [26]:
Out[26]:
In [27]:
來個小結 + 擴充:
矩陣的加法運算滿足交換律:<code>A + B = B + A</code>
矩陣的乘法滿足結合律和對矩陣加法的配置設定律:
結合律:<code>(AB)C = A(BC)</code>
左配置設定律:<code>(A + B)C = AC + BC</code>
右配置設定律:<code>C(A + B) = CA + CB</code>
矩陣的乘法與數乘運算之間也滿足類似結合律的規律;與轉置之間則滿足倒置的
配置設定律:<code>c(A + B) = cA + cB</code>
結合律:<code>c(AB) = (cA)B = A(cB)</code>
矩陣乘法不滿足交換律 一般來說,矩陣A及B的乘積AB存在,但BA不一定存在,即使存在,大多數時候<code>AB ≠ BA</code>
零矩陣就是所有的元素都是0
$ \begin{bmatrix} 0&0&0 \\ 0&0&0 \\ 0&0&0 \end{bmatrix} $
同樣的:全1矩陣就是所有元素都是1
$ \begin{bmatrix} 1&1&1 \\ 1&1&1 \\ 1&1&1 \end{bmatrix} $
Out[2]:
Out[6]:
Out[7]:
Out[8]:
Out[10]:
轉置矩陣 :将矩陣的行列互換得到的新矩陣(行列式不變)
<code>m行×n列</code>的矩陣行和列交換後就變成了<code>n行×m列</code>的矩陣,eg:<code>3行×2列</code> ==> <code>2行×3列</code>
$\begin{bmatrix}1&2 \\3&4 \\5&6\end{bmatrix}^T ==> \begin{bmatrix}1&3&5 \\2&4&6\end{bmatrix}$
矩陣的轉置滿足配置設定律:
$(A + B)^T = A^T + B^T$
$(AB)^T = B^TA^T$
再次提醒:兩個矩陣的乘法僅當第一個矩陣A的列數(column)和另一個矩陣B的行數(row)相等才可以進行計算
上三角矩陣 :主對角線以下都是零的方陣
$\begin{bmatrix} 2&9&4&7 \\ 0&7&3&3 \\ 0&0&6&1 \\ 0&0&0&1 \end{bmatrix}$
下三角矩陣 :主對角線以上都是零的方陣
$\begin{bmatrix} 2&0&0&0 \\ 3&7&0&0 \\ 5&6&7&0 \\ 1&2&3&4 \end{bmatrix}$
性質(行列式後面會說)
上(下)三角矩陣的行列式為對角線元素相乘
上(下)三角矩陣乘以系數後也是上(下)三角矩陣
上(下)三角矩陣間的加減法和乘法運算的結果仍是上(下)三角矩陣
上(下)三角矩陣的逆矩陣也仍然是上(下)三角矩陣
Out[22]:
對角矩陣 :主對角線之外的元素皆為0的方陣 (機關矩陣屬于對角矩陣中的一種)
$\begin{bmatrix}0&0&0 \\0&0&0 \\0&0&0\end{bmatrix} \begin{bmatrix}1&0&0 \\0&1&0 \\0&0&1\end{bmatrix} \begin{bmatrix}2&0&0 \\0&2&0 \\0&0&2\end{bmatrix} \begin{bmatrix}3&0&0 \\0&9&0 \\0&0&6\end{bmatrix}$
擴充:對角矩陣的運算包括和、差運算、數乘運算、同階對角陣的乘積運算,且結果仍為對角陣
而且有意思的是:對角矩陣的矩陣幂運算等于其對應元素的幂運算
$\begin{bmatrix}3&0&0 \\0&9&0 \\0&0&6\end{bmatrix}^n = \begin{bmatrix}3^n&0&0 \\0&9^n&0 \\0&0&6^n\end{bmatrix}$
Out[25]:
In [28]:
In [29]:
Out[29]:
In [30]:
Out[30]:
機關矩陣 :機關矩陣是個方陣(行列相等),從左上角到右下角的對角線(稱為主對角線)上的元素均為1。其他全都為0,eg:
$ \begin{bmatrix} 1&0&0 \\ 0&1&0 \\ 0&0&1 \end{bmatrix} $
任何<code>矩陣</code> x <code>機關矩陣</code> 都等于其<code>本身</code> (反過來也一樣(這個和1×a=a×1一個道理))
In [31]:
Out[31]:
In [32]:
In [33]:
In [34]:
In [35]:
Out[35]:
In [36]:
Out[36]:
對稱矩陣 :元素以主對角線為對稱軸對應相等的方陣
對稱矩陣的轉置是它本身:$A^T=A$
In [37]:
In [38]:
In [39]:
Out[39]:
In [40]:
In [41]:
In [42]:
In [43]:
Out[43]:
逆矩陣 :設A是數域上的一個n階方陣,若在相同數域上存在另一個n階矩陣B,使得:<code>AB=BA=E</code> 則我們稱B是A的逆矩陣(表示為$A^{-1}$),而A則被稱為可逆矩陣
通俗話講就是:原矩陣×逆矩陣=逆矩陣×原矩陣=機關矩陣
可能一看到逆矩陣,大家就想到代數餘子式 ,不過逆天要說的是,代數餘子式就和我們程式員面試題一樣,有些題目就是又繁瑣實際運用又沒多大意義的題目一樣,很多時候面試官都不看面試題一眼,同樣的那些出題老師自己解題一般都不會使用。我這邊介紹一下友善簡單的方法“消元法”
比如求$\begin{bmatrix}3&2 \\1&2\end{bmatrix}^{-1}$,就可以表示為:
$\begin{bmatrix}3&2 \\1&2\end{bmatrix}\begin{bmatrix}x_{11}&x_{12} \\x_{21}&x_{22}\end{bmatrix}=\begin{bmatrix}1&0 \\0&1\end{bmatrix}$
轉換成方程組:
$\begin{cases} \begin{bmatrix}3&2 \\1&2\end{bmatrix}\begin{bmatrix}x_{11} \\x_{21}\end{bmatrix}=\begin{bmatrix}1 \\0\end{bmatrix}\\ \begin{bmatrix}3&2 \\1&2\end{bmatrix}\begin{bmatrix}x_{12} \\x_{22}\end{bmatrix}=\begin{bmatrix}0 \\1\end{bmatrix} \end{cases} ==> 求方程組\begin{cases}3x_{11}+2x_{21}=1\\1x_{11}+2x_{21}=0\end{cases}和\begin{cases}3x_{12}+2x_{22}=0\\1x_{12}+2x_{22}=1\end{cases}的解$
這樣很輕松就能解出逆矩陣了
$\begin{cases}x_{11}=\frac{1}{2}\\x_{21}=-\frac{1}{4} \end{cases}\\\begin{cases}x_{12}=-\frac{1}{2}\\x_{22}=\frac{3}{4} \end{cases}\\ ==> \begin{bmatrix}\frac{1}{2}&-\frac{1}{2} \\-\frac{1}{4}&\frac{3}{4} \end{bmatrix}$
In [44]:
In [45]:
Out[45]:
如果隻是2階方陣,有更簡單的公式(隻能2階使用,而消元法不受限制)矩陣是否可逆就看分母是否為0
$\large{\begin{bmatrix}a_{11}&a_{12} \\a_{21}&a_{22}\end{bmatrix}=\frac{1}{a_{11}a_{22}-a_{12}a_{21}}\begin{bmatrix}a_{22}&-a_{12} \\-a_{21}&a_{11}\end{bmatrix}}$
比如求$\begin{bmatrix}3&2 \\1&2\end{bmatrix}^{-1}$:
$\frac{1}{3×2-2×1}\begin{bmatrix}2&-2 \\-1&3\end{bmatrix}=\begin{bmatrix}\frac{1}{2}&-\frac{1}{2} \\-\frac{1}{4}&\frac{3}{4} \end{bmatrix}$
非方陣可以求 僞逆矩陣 <code>AXA=A,XAX=X</code>
判斷矩陣是否可逆:
$$det\begin{bmatrix}a_{11}&a_{12} \\a_{21}&a_{22}\end{bmatrix}=a_{11}a_{12}-a_{12}a_{21}\\det\begin{bmatrix}a_{11}&a_{12}&a_{13} \\a_{21}&a_{22}&a_{23}\\a_{31}&a_{32}&a_{33}\end{bmatrix}=a_{11}a_{22}a_{33}+a_{12}a_{23}a_{31}+a_{13}a_{21}a_{32}-a_{13}a_{22}a_{31}-a_{12}a_{21}a_{33}-a_{11}a_{23}a_{32}$$
方法很多(比如還可以通過餘子式),公式其實有規律,你可以先摸索下(給個提示):
項
正負
a11a22
+
a12a21
-
a11a22a33
a11a23a32
a12a21a33
a12a23a31
a13a21a32
a13a22a31
程式比較簡單:<code>np.linalg.det(A)</code>
In [46]:
In [47]:
In [48]:
In [49]:
In [50]:
Out[50]:
In [51]:
Out[51]:
In [52]:
In [53]:
Out[53]:
In [54]:
Out[54]:
In [55]:
Out[55]:
In [56]:
Out[56]:
In [57]:
作者:毒逆天
出處:https://www.cnblogs.com/dotnetcrazy
打賞:<b>18i4JpL6g54yAPAefdtgqwRrZ43YJwAV5z</b>
本文版權歸作者和部落格園共有。歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接!