怎么用计算机求逆矩阵,计算机是怎么求解线性方程的(矩阵乘和求逆)
上回我們說到,高斯老哥用消元法解線性方程,大致步驟呢就是給系數矩陣消元,運氣好點呢直接整出上三角系數矩陣,得到方程組的唯一解,運氣不行呢,消著消著發現整不出上三角,這時就得再討論方程是有多解還是無解。
這里所說的"運氣"呢其實可以根據行列式啊,Ax=0是否有解啊判斷得到,具體操作可以看看我聊消元法的那一篇文章。
但是,高斯消元法存在一個問題,就是它是給人做的,比如給第一行乘個倍數加到另一行,或者將矩陣的兩行交換個位置,這些我們手寫計算當然沒什么問題,但是你讓計算機做它就不能忍了,計算機沒那么多判斷的能力,它就想要一種統一的計算模式和計算次數。ok,那我們就來聊一聊計算機是怎么做這些操作的,順便我們能夠知道為什么有很多科學家對矩陣乘法性能的提高有著孜孜不倦的追求。
我們先以一種抽象的方式來看看矩陣和列向量相乘,比如
根據第一節所說,系數方陣的三個列向量為三維空間中的三個獨立向量,用它們可以組成三維空間的任一向量,[x,y,z]分別為這三個向量的擴展倍數,假如我想知道一倍的[1,2,4]與三倍的[3,7,8]的和向量是什么,只需要給[x,y,z]賦值[1,3,0]就可以了,即
那么如果我想知道
[1,2,4]向量與
負三倍的[1,2,4]與一倍的[3,7,8]的和向量以及
負四倍的[1,2,4]與一倍的[4,5,9]的和向量
的組合是什么,就可以運算
將計算過程及結果整理一下就可以得到
此時我們會驚奇得發現居然消元了,第一行居然消元了!只不過在列方向,高斯消元法需要的是在行方向做消元,那如果我對行向量能做一些求和之類的操作問題不就解決了嗎。而這你也不需要擔心,因為有數學大佬已經幫你總結好了,即
根據消元步驟先根據pivot1給23行消元,即
再根據pivot2給第三行消元,即
再將最后一行變為1
以上我們將消元的過程變為了矩陣乘法,我猜這就是計算機做消元的方法,當然,在消元過程中有時要用到兩行交換位置的情況,我們也可以利用矩陣乘得到,比如交換矩陣的前兩行
我們將上述給原矩陣做變換的矩陣叫做初等變換矩陣,初等變換矩陣的逆矩陣非常好求,逆矩陣的定義為AA^{-1}=E,而初等變換矩陣正是E經過了簡單的運算得到的。比如將第一行乘4并加到第二行的變換矩陣,只要從第二行中減去第一行的4倍就變回了單位陣,也就得到了逆矩陣。,即
而交換兩行的變換陣的逆矩陣是它本身
那么更一般的矩陣求逆怎么做呢(已知矩陣可逆),要不怎么說數學家牛逼呢,Gauss-Jordan法使求逆完全可以通過消元來解決,就是這二位
他們表示,假如你想求一個逆矩陣啊,先給原矩陣旁邊整一個單位陣,然后給第一個矩陣開始消元,消元過程中單位陣做同樣的變換,當原來的矩陣變為單位陣時,單位陣就是原矩陣的逆矩陣,首先是Gauss的消元法創造上三角矩陣
然后jordan說你把這個上三角再倒著消元成單位陣就得到逆矩陣啦
不放心的話拿到matlab里驗證一下就ok了。
我們可以看到,化簡求逆都是經過矩陣乘來運算,這種較為統一的運算過程可是把計算機爽死了,我們說的解方程啊,矩陣求逆啊到這里都變成了矩陣的乘法運算,而矩陣乘不僅僅只有這一點應用,在空間中一個向量的放大,縮小,平移,旋轉都是通過乘矩陣的方式來實現,所以在矩陣乘這個計算上一點點的優化都可能使軟件性能發生巨大變化,這也就回答了文章開始的問題,為什么有那么多人不斷追求矩陣乘運算性能的提高。微小的改變卻能導致巨大的性能變化,這可能就是算法之美吧。
總結
以上是生活随笔為你收集整理的怎么用计算机求逆矩阵,计算机是怎么求解线性方程的(矩阵乘和求逆)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 查询maven依赖的网址
- 下一篇: Linux 10GE端口,ES5D001