計(jì)算機(jī)是怎么求解線性方程的(矩陣乘和求逆)

上回我們說(shuō)到,高斯老哥用消元法解線性方程,大致步驟呢就是給系數(shù)矩陣消元,運(yùn)氣好點(diǎn)呢直接整出上三角系數(shù)矩陣,得到方程組的唯一解,運(yùn)氣不行呢,消著消著發(fā)現(xiàn)整不出上三角,這時(shí)就得再討論方程是有多解還是無(wú)解。

這里所說(shuō)的"運(yùn)氣"呢其實(shí)可以根據(jù)行列式啊,Ax=0是否有解啊判斷得到,具體操作可以看看我聊消元法的那一篇文章。

但是,高斯消元法存在一個(gè)問(wèn)題,就是它是給人做的,比如給第一行乘個(gè)倍數(shù)加到另一行,或者將矩陣的兩行交換個(gè)位置,這些我們手寫(xiě)計(jì)算當(dāng)然沒(méi)什么問(wèn)題,但是你讓計(jì)算機(jī)做它就不能忍了,計(jì)算機(jī)沒(méi)那么多判斷的能力,它就想要一種統(tǒng)一的計(jì)算模式和計(jì)算次數(shù)。ok,那我們就來(lái)聊一聊計(jì)算機(jī)是怎么做這些操作的,順便我們能夠知道為什么有很多科學(xué)家對(duì)矩陣乘法性能的提高有著孜孜不倦的追求。

我們先以一種抽象的方式來(lái)看看矩陣和列向量相乘,比如

根據(jù)第一節(jié)所說(shuō),系數(shù)方陣的三個(gè)列向量為三維空間中的三個(gè)獨(dú)立向量,用它們可以組成三維空間的任一向量,[x,y,z]分別為這三個(gè)向量的擴(kuò)展倍數(shù),假如我想知道一倍的[1,2,4]與三倍的[3,7,8]的和向量是什么,只需要給[x,y,z]賦值[1,3,0]就可以了,即

那么如果我想知道

[1,2,4]向量與

負(fù)三倍的[1,2,4]與一倍的[3,7,8]的和向量以及

負(fù)四倍的[1,2,4]與一倍的[4,5,9]的和向量

的組合是什么,就可以運(yùn)算

將計(jì)算過(guò)程及結(jié)果整理一下就可以得到

此時(shí)我們會(huì)驚奇得發(fā)現(xiàn)居然消元了,第一行居然消元了!只不過(guò)在列方向,高斯消元法需要的是在行方向做消元,那如果我對(duì)行向量能做一些求和之類(lèi)的操作問(wèn)題不就解決了嗎。而這你也不需要擔(dān)心,因?yàn)橛袛?shù)學(xué)大佬已經(jīng)幫你總結(jié)好了,即

根據(jù)消元步驟先根據(jù)pivot1給23行消元,即

再根據(jù)pivot2給第三行消元,即

再將最后一行變?yōu)?

以上我們將消元的過(guò)程變?yōu)榱司仃嚦朔?,我猜這就是計(jì)算機(jī)做消元的方法,當(dāng)然,在消元過(guò)程中有時(shí)要用到兩行交換位置的情況,我們也可以利用矩陣乘得到,比如交換矩陣的前兩行

我們將上述給原矩陣做變換的矩陣叫做初等變換矩陣,初等變換矩陣的逆矩陣非常好求,逆矩陣的定義為AA^{-1}=E,而初等變換矩陣正是E經(jīng)過(guò)了簡(jiǎn)單的運(yùn)算得到的。比如將第一行乘4并加到第二行的變換矩陣,只要從第二行中減去第一行的4倍就變回了單位陣,也就得到了逆矩陣。,即

而交換兩行的變換陣的逆矩陣是它本身

那么更一般的矩陣求逆怎么做呢(已知矩陣可逆),要不怎么說(shuō)數(shù)學(xué)家牛逼呢,Gauss-Jordan法使求逆完全可以通過(guò)消元來(lái)解決,就是這二位

他們表示,假如你想求一個(gè)逆矩陣啊,先給原矩陣旁邊整一個(gè)單位陣,然后給第一個(gè)矩陣開(kāi)始消元,消元過(guò)程中單位陣做同樣的變換,當(dāng)原來(lái)的矩陣變?yōu)閱挝魂嚂r(shí),單位陣就是原矩陣的逆矩陣,首先是Gauss的消元法創(chuàng)造上三角矩陣

然后jordan說(shuō)你把這個(gè)上三角再倒著消元成單位陣就得到逆矩陣?yán)?/p>

不放心的話拿到matlab里驗(yàn)證一下就ok了。

我們可以看到,化簡(jiǎn)求逆都是經(jīng)過(guò)矩陣乘來(lái)運(yùn)算,這種較為統(tǒng)一的運(yùn)算過(guò)程可是把計(jì)算機(jī)爽死了,我們說(shuō)的解方程啊,矩陣求逆啊到這里都變成了矩陣的乘法運(yùn)算,而矩陣乘不僅僅只有這一點(diǎn)應(yīng)用,在空間中一個(gè)向量的放大,縮小,平移,旋轉(zhuǎn)都是通過(guò)乘矩陣的方式來(lái)實(shí)現(xiàn),所以在矩陣乘這個(gè)計(jì)算上一點(diǎn)點(diǎn)的優(yōu)化都可能使軟件性能發(fā)生巨大變化,這也就回答了文章開(kāi)始的問(wèn)題,為什么有那么多人不斷追求矩陣乘運(yùn)算性能的提高。微小的改變卻能導(dǎo)致巨大的性能變化,這可能就是算法之美吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容