0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

介紹一種求解線性方程組的算法-高斯消除法

云深之無(wú)跡 ? 來(lái)源:云深之無(wú)跡 ? 作者:云深之無(wú)跡 ? 2022-07-08 09:17 ? 次閱讀

啊,我終于可以寫(xiě)文章了!最近兩天好累哇,先繼續(xù)寫(xiě)上面的算法文章。

這篇文章寫(xiě)的算法是高斯消元,是數(shù)值計(jì)算里面基本且有效的算法之一:是求解線性方程組的算法。

這里再細(xì)寫(xiě)一下:

在數(shù)學(xué)中,高斯消元法,也稱(chēng)為行約簡(jiǎn),是一種求解線性方程組的算法。它由對(duì)相應(yīng)的系數(shù)矩陣執(zhí)行的一系列操作組成。此方法還可用于計(jì)算矩陣的秩、方陣的行列式和可逆矩陣的逆矩陣。該方法以卡爾·弗里德里希·高斯 ( Carl Friedrich Gauss ,1777-1855)的名字命名,盡管該方法的一些特例——盡管沒(méi)有證明——早在公元 179 年左右就為中國(guó)數(shù)學(xué)家所知。

為了對(duì)矩陣執(zhí)行行縮減,可以使用一系列基本行操作來(lái)修改矩陣,直到矩陣的左下角盡可能地用零填充。基本行操作分為三種類(lèi)型:

1.交換兩行,

2.將一行乘以一個(gè)非零數(shù),

3.將一行的倍數(shù)添加到另一行。(減法可以通過(guò)將一行乘以 -1 并將結(jié)果添加到另一行來(lái)實(shí)現(xiàn))

使用這些操作,矩陣總是可以轉(zhuǎn)換為上三角矩陣,實(shí)際上是行梯形矩陣。一旦所有前導(dǎo)系數(shù)(每行中最左邊的非零條目)都為 1,并且包含前導(dǎo)系數(shù)的每一列在其他地方都為零,則稱(chēng)該矩陣為簡(jiǎn)化行梯形形式。這種最終形式是獨(dú)一無(wú)二的;換句話說(shuō),它與所使用的行操作序列無(wú)關(guān)。例如,在下面的行操作序列中(在第一步和第三步對(duì)不同行進(jìn)行兩個(gè)基本操作),第三和第四個(gè)矩陣是行梯形矩陣,最后一個(gè)矩陣是唯一的簡(jiǎn)化行梯隊(duì)形式。

poYBAGLHhgeAC9icAABABfqhBms123.jpg

一個(gè)矩陣的簡(jiǎn)化

使用行操作將矩陣轉(zhuǎn)換為簡(jiǎn)化的行梯形形式有時(shí)稱(chēng)為Gauss-Jordan 消元法。在這種情況下,術(shù)語(yǔ)高斯消元是指過(guò)程,直到它達(dá)到其上三角形或(未簡(jiǎn)化的)行梯形形式。出于計(jì)算原因,在求解線性方程組時(shí),有時(shí)最好在矩陣完全約簡(jiǎn)之前停止行操作。

pYYBAGLHhiCAMBJWAADHrEKAhew355.jpg

我們對(duì)其實(shí)現(xiàn)的操作只有這三個(gè)

如果矩陣與線性方程組相關(guān)聯(lián),則這些操作不會(huì)更改解集。因此,如果一個(gè)人的目標(biāo)是求解線性方程組,那么使用這些行操作可以使問(wèn)題變得更容易。

對(duì)于矩陣中的每一行,如果該行不只包含零,則最左邊的非零條目稱(chēng)為該行的前導(dǎo)系數(shù)(或樞軸)。因此,如果兩個(gè)前導(dǎo)系數(shù)在同一列中,則可以使用類(lèi)型 3的行操作使這些系數(shù)之一為零。然后通過(guò)使用行交換操作,總是可以對(duì)行進(jìn)行排序,以便對(duì)于每個(gè)非零行,前導(dǎo)系數(shù)位于上一行的前導(dǎo)系數(shù)的右側(cè)。如果是這種情況,則稱(chēng)矩陣為行梯形. 所以矩陣的左下部分只包含零,并且所有的零行都在非零行的下方。這里使用“梯隊(duì)”一詞是因?yàn)榭梢源致缘卣J(rèn)為行是按大小排列的,最大的位于頂部,最小的位于底部。

例如,下面的矩陣是行梯形的,它的前導(dǎo)系數(shù)用紅色表示:

poYBAGLHhjeAdBPzAABEx8Bk3mg017.jpg

就像這樣

它是梯形的,因?yàn)榱阈性诘撞?,第二行(第三列)的領(lǐng)先系數(shù)在第一行(第二列)的領(lǐng)先系數(shù)的右側(cè)。

如果矩陣的所有前導(dǎo)系數(shù)都等于 1(這可以通過(guò)使用類(lèi)型 2 的基本行操作來(lái)實(shí)現(xiàn)),并且在包含前導(dǎo)系數(shù)的每一列中,則稱(chēng)矩陣為簡(jiǎn)化行梯形。該列中的其他條目為零(可以通過(guò)使用類(lèi)型 3 的基本行操作來(lái)實(shí)現(xiàn))。

pYYBAGLHhkyAYZqHAABivHgE-Dk248.jpg

假如我們求解這個(gè)方程的解

下表是同時(shí)應(yīng)用于方程組及其相關(guān)增廣矩陣的行縮減過(guò)程。在實(shí)踐中,通常不會(huì)用方程來(lái)處理系統(tǒng),而是使用更適合計(jì)算機(jī)操作的增廣矩陣。行縮減過(guò)程可以概括如下:從L1以下的所有方程中消除x,然后從L2以下的所有方程中消除y。這將使系統(tǒng)變成三角形。然后,使用反向替換,可以解決每個(gè)未知數(shù)。

poYBAGLHhn2AaCG0AADxAZnizmI601.jpg

poYBAGLHhoaAFW-KAADbhzucTD0901.jpg

就好像這樣

其實(shí)還有內(nèi)容,但是公式編輯實(shí)在不會(huì)哇,這里給出程序的偽代碼:

高斯消元法將給定的m × n矩陣A轉(zhuǎn)換為行梯形矩陣。

在下面的偽代碼中,A[i, j]表示矩陣A在第i行和第j列中的條目,索引從 1 開(kāi)始。轉(zhuǎn)換在原地執(zhí)行,這意味著原始矩陣丟失,最終被其行梯形形式替換。

poYBAGLHhrSAXLcuAAC30AsjpMU426.jpg

看不懂?沒(méi)有關(guān)系,大致懂就行

pYYBAGLHhs2AWgGsAACKu13wfHk469.jpg

程序的實(shí)現(xiàn)上面,我們導(dǎo)入這些內(nèi)容

poYBAGLHhuiAR1LVAACZsbKux4o979.jpg

為了精度,導(dǎo)入float64

pYYBAGLHhwSAJKE6AAEwqXi5tEE576.jpg

以及導(dǎo)入的一個(gè)N維的數(shù)組,在內(nèi)部是所以ndarray封裝的

這樣學(xué)習(xí)的態(tài)度是不對(duì)的,我們需要看看Numpy文檔寫(xiě)的:

pYYBAGLHhxeAbUueAACOGYto1lA497.jpg

64位精度浮點(diǎn)數(shù)類(lèi)型:符號(hào)位、11位指數(shù)、52位尾數(shù)。

pYYBAGLHhyyActRMAACdXr_anYg160.jpg

沒(méi)關(guān)系,你不懂的官網(wǎng)文檔滿足你

pYYBAGLHh0WAOttCAAB13v_N_yk224.jpg

NDarray在這里

可在運(yùn)行時(shí)用于鍵入具有給定 dtype 和未指定形狀的數(shù)組。

poYBAGLHh1uATFDZAACQwwqEdGM215.jpg

系數(shù)矩陣,向量是輸入的參數(shù),后面是返回的數(shù)據(jù)類(lèi)型。

poYBAGLHh4OAGJJnAAAc6rScGHI357.jpg

pYYBAGLHh2-ARviCAADA_mc4yUg987.jpg

對(duì)shape函數(shù)感興趣不,內(nèi)部是這樣的

pYYBAGLHh5eAS21XAAAg9xL7Pas833.jpg

這個(gè)也是注解的寫(xiě)法,意思是返回一個(gè)數(shù)組,用0填充:

poYBAGLHh62APYljAAFbzWiYmAY360.jpg

zeros函數(shù)的樣子

第一個(gè)參數(shù),元組,說(shuō)明樣子。后面參數(shù)是類(lèi)型,這里寫(xiě)float。返回值是具有給定形狀、數(shù)據(jù)類(lèi)型和順序的零數(shù)組。

poYBAGLHh8OAJf8PAACOvr3F_Zo594.jpg

首先,reversed 函數(shù)返回一個(gè)反轉(zhuǎn)的迭代器。這個(gè)為什么倒著算呢?是因?yàn)榈怪銓?duì)算法來(lái)講有一些優(yōu)點(diǎn)。

內(nèi)部再套一個(gè)函數(shù),內(nèi)部對(duì)列處理,下面的代碼就是實(shí)現(xiàn)使用倍數(shù)的關(guān)系對(duì)一整行處理,[]是相當(dāng)于數(shù)組的index寫(xiě)法,下面是將處理結(jié)果應(yīng)用到行,最后打印X。

上面這個(gè)函數(shù)是高斯函數(shù)的一個(gè)子函數(shù),作用是給出最簡(jiǎn)的階梯行列式。

pYYBAGLHh9iACEL9AAB_gCG9M08521.jpg

我們要算這個(gè)

pYYBAGLHh_CAd2WqAAAzHNCBO-I861.jpg

輸入的時(shí)候這樣輸入,先別繼續(xù)看,我們看高斯分解

poYBAGLHiAqAAay2AACU1QREN3w426.jpg

這個(gè)檢查寫(xiě)的很簡(jiǎn)單

poYBAGLHiB6AZ3x5AABQzgMdRdg630.jpg

接下來(lái)

poYBAGLHiDuAHDrDAAFEvc6A4ec344.jpg

連接我們的矩陣,要求有相應(yīng)的形狀

pYYBAGLHiE6AQ-UCAAD_RsdJ8z0011.jpg

這個(gè)例子不錯(cuò)

0是按照行展開(kāi),1是列,None是直接接龍。

poYBAGLHiGSAdrCJAACtzaPERVI469.jpg

這段實(shí)現(xiàn)的是上面的偽代碼

pYYBAGLHiHuAP0WdAADX17TMPg8702.jpg

一個(gè)很有趣的變量名

poYBAGLHiI6AL9ecAAAhEdt5c1Q468.jpg

調(diào)用的時(shí)候就是這樣,輸入一個(gè)大元組,里面有兩個(gè)小元組

poYBAGLHiKSAadagAABkC7venq4857.jpg

審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7525

    瀏覽量

    88325
  • 矩陣
    +關(guān)注

    關(guān)注

    0

    文章

    423

    瀏覽量

    34596
  • 迭代器
    +關(guān)注

    關(guān)注

    0

    文章

    44

    瀏覽量

    4329

原文標(biāo)題:Python實(shí)現(xiàn)所有算法-高斯消除法

文章出處:【微信號(hào):TT1827652464,微信公眾號(hào):云深之無(wú)跡】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MATLAB應(yīng)用求線性方程組的通解

    理解線性方程組直接法與迭代法思想,掌握常用算法的設(shè)計(jì),掌握用MATLAB實(shí)現(xiàn)的數(shù)值解法。1、編寫(xiě)列主元消去法程序,并舉例子。編寫(xiě)LU分解法程序,并舉例子。對(duì)兩算法作出對(duì)比。利用MAT
    發(fā)表于 11-03 15:45

    matlab求解線性方程組問(wèn)題

    我最近在尋找個(gè)矩陣,需要用matlab來(lái)求取一組線性方程組,而且方程當(dāng)中都含有些符號(hào)參數(shù)。求取過(guò)程中出現(xiàn)的結(jié)果是ans=[1*1 sy
    發(fā)表于 03-29 09:06

    請(qǐng)教哪里有l(wèi)abview解線性方程組的資料,最好有具體例子的,謝謝!

    請(qǐng)教哪里有l(wèi)abview解線性方程組的資料,最好有具體例子的,謝謝!麻煩請(qǐng)附個(gè)超鏈接或者直接上傳,謝謝!
    發(fā)表于 07-27 17:38

    labview求解線性方程組

    ` 本帖最后由 shangxinol 于 2018-10-12 17:11 編輯 各位大佬好,我有個(gè)非線性方程組需要利用Labview來(lái)求解,且希望能夠2ms內(nèi)求解完成。精度可以
    發(fā)表于 10-12 17:05

    特定消諧PWM技術(shù)中非線性方程組解法的研究

    本文首先討論了消諧技術(shù)與傳統(tǒng)SPWM技術(shù)相比的優(yōu)點(diǎn),然后研究了特定肖諧技術(shù)中求解線性方程組的有效方法通過(guò)定規(guī)律給出初值即可隨基波變化的解的軌跡,用此方法可求出開(kāi)
    發(fā)表于 11-19 18:27 ?28次下載

    線性方程組并行迭代解法的新思路

    針對(duì)求解大型線性方程組,利用改進(jìn)后的MGS方法和分治策略,給出了一種求解任意相容性線性方程組通解或不相容性
    發(fā)表于 05-10 11:25 ?16次下載

    一種求解線性約束優(yōu)化全局最優(yōu)的新方法

    本文提出了一種求解線性約束優(yōu)化的全局最優(yōu)的新方法—它是基于利用非線性互補(bǔ)函數(shù)和不斷增加新的約束來(lái)重復(fù)解庫(kù)恩-塔克條件的非線性方程組的新方法
    發(fā)表于 08-11 10:53 ?16次下載

    凸約束非線性方程組的非單調(diào)信賴域算法

    凸約束非線性方程組的非單調(diào)信賴域算法
    發(fā)表于 10-25 12:20 ?13次下載

    特定消諧PWM技術(shù)中非線性方程組解法的研究

    本文首先討論了特定消諧技術(shù)與傳統(tǒng)SPWM技術(shù)相比的優(yōu)點(diǎn),然后研究了特定消諧技術(shù)中求解線性方程組的有效方法,通過(guò)按定規(guī)律給出初值即可解出隨基波變化的解的軌跡,用此方法可求出開(kāi)關(guān)角數(shù)小于100時(shí)的兩
    發(fā)表于 05-11 15:26 ?7次下載

    基于并聯(lián)機(jī)器人非線性方程求解

    的過(guò)程中還存在解不唯的問(wèn)題。為了避免上述問(wèn)題,根據(jù)多元函數(shù)的Taylor公式推導(dǎo)出了一種基于三元非線性方程組牛頓迭代法的并聯(lián)機(jī)器人運(yùn)動(dòng)學(xué)正解算法;同時(shí),基于其數(shù)學(xué)原理,也可以得到并聯(lián)
    發(fā)表于 12-01 16:08 ?2次下載
    基于并聯(lián)機(jī)器人非<b class='flag-5'>線性方程</b><b class='flag-5'>求解</b>

    變頻電源特定消諧技術(shù)中非線性方程組解法的研究

    的數(shù)學(xué)模型及其非線性方程組用牛頓迭代法求解的步驟,總結(jié)出了非線性方程組中開(kāi)關(guān)角兩解給初值的規(guī)律,蛤出了開(kāi)關(guān)角兩解隨基波幅值變化的軌跡;設(shè)
    發(fā)表于 12-15 10:05 ?1次下載
    變頻電源特定消諧技術(shù)中非<b class='flag-5'>線性方程組</b>解法的研究

    基于壓縮存儲(chǔ)技術(shù)求解壓力Poisson方程的BICGSTAB算法

    基于投影算法所得壓力Poisson方程進(jìn)行數(shù)值離散,對(duì)離散系統(tǒng)形成的稀疏線性方程組,由于線性方程組的系數(shù)矩陣存在大量的零元素,為降低內(nèi)存存儲(chǔ),以
    發(fā)表于 01-14 16:04 ?0次下載

    使用MATLAB編程實(shí)現(xiàn)里查森迭代法線性方程組求解的資料和程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用MATLAB編程實(shí)現(xiàn)里查森迭代法線性方程組求解的資料和程序免費(fèi)下載。
    發(fā)表于 08-09 16:56 ?0次下載
    使用MATLAB編程實(shí)現(xiàn)里查森迭代法<b class='flag-5'>線性方程組</b><b class='flag-5'>求解</b>的資料和程序免費(fèi)下載

    基于除法畸變模型的鏡頭線性標(biāo)定方法

    針對(duì)魚(yú)眼鏡頭的高精度標(biāo)定需求,提岀一種基于除法畸變模型的線性標(biāo)定方法。通過(guò)除法模型將題轉(zhuǎn)換為線性方程組
    發(fā)表于 05-19 11:39 ?7次下載

    MATLAB矩陣運(yùn)算、線性方程組求解、特征值與特征向量

    MATLAB是個(gè)數(shù)學(xué)軟件,它對(duì)矩陣運(yùn)算、線性方程組求解、特征值與特征向量等方面提供了強(qiáng)大的支持。
    的頭像 發(fā)表于 06-16 16:06 ?2679次閱讀