日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法)

發(fā)布時間:2025/4/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

臺灣國立大學(xué)郭彥甫Matlab教程筆記(21)

today:
linear equation 線性方程
linear system 線性系統(tǒng)

我們先看第一部分

linear equation

假定一個線性方程組:

下面我們用矩陣的形式表示這個二元一次方程組:Ax=b的形式

WHy matrix form?

可能多元,問題本身很復(fù)雜,矩陣方法可以通吃。
下面是一道電路題目:給定電源電壓和電阻值,求解電流值是多少

老師口中的tilde 是波浪線的意思

這道題目的求解需要用到基爾霍夫電流定律和基爾霍夫電壓定律,這里不詳細(xì)展開
基爾霍夫電壓定律 voltage law:一個回路電壓和為零
基爾霍夫電流定律 current law:一個節(jié)點的流入電流和流出電流代數(shù)和為0

列出來的線性方程組如下:

我們需要求解是i,轉(zhuǎn)化成矩陣是這樣的形式:

得到的矩陣為:

usually when solving linear equations:
1.
A and b are known
2.
x is unknown

solving linear equations求解線性方程

兩類方法:
1.消去法 successive elimination (through factorization)
2.克拉姆法則(Cramer’s method)

第一類消去法里面又分類

第一種:高斯消去法Gaussian Elimination

例題:


把方程組寫成矩陣的形式,增廣矩陣

利用矩陣的性質(zhì),第一行*(-2)加到第二行中,第一行乘以(-1)加到第三行中,得到下面的矩陣(行列式,矩陣的化簡,多出現(xiàn)0,便于計算和分析)下圖得到上三角

這樣就可以計算出來x3等于多少 ,x3=1(只看第三行)
然后把x3=1帶入到第二個方程,解出來x2,然后再代入到第一個方程,解出來x1

這個過程就是高斯消去法的思路

下面我們看在matlab中如何使用Gaussian Elimination

Gaussian Elimination --rref()

首先把方程組表示成為增廣矩陣的形式


代碼表示:
[A b]表示的是一個增廣矩陣

A=[1 2 1 ;2 6 1;1 1 4];
b=[2;7;3];
R=rref([A b])

我們執(zhí)行這段代碼看看這個方程組解的情況:

以上表示x1=-3;x2=2;x3=1;也就是方程組的解

接著看下一個消去的方法:

LU Factorization追趕法

這個是我一篇博文里記錄的:追趕法
factorization 是因數(shù)分解的意思
L:lower-triangular matrix下三角矩陣
U:upper-triangular matrix上三角矩陣

思路是把A矩陣拆分成兩個三角陣


兩個三角陣是這樣的形式:A等于L的逆矩陣乘以U矩陣

因式分解矩陣的目的是:把L的inverse 乘以U代入得到下式,然后把Ux令為y,然后解的問題就轉(zhuǎn)化為:先求y,然后求x。
這樣處理,因為三角行列式有一半是0,求解起來變得簡單。

知道追趕法的原理了,我們現(xiàn)在來看一下下三角矩陣和上三角矩陣


下面的問題是:如何得到這個L和U矩陣呢?
下圖中左邊乘以很多Li,最終是讓右邊成為一個上三角矩陣(左下角全為零),這些L的目的是一列一列的來計算,一列一列的讓其變成零

通過矩陣乘法,左邊乘
A=inv(L)U
LA=Linv(L)*U
LA=U

怎么算呢?舉個例子

給定一個A矩陣

解體過程:
因為A左邊乘的是一個下三角矩陣,其主對角線上的元素全為1,右上角全為零。
現(xiàn)在,讓L左下角等于什么,使得運算完成只有右邊U的第一列為零?


求解:u(2,1)是L的第二行A的第一列得到的結(jié)果,可以求得 L(2,1)=-2
同理u(3,1)=L的第三行A的第一列,可以求得L(3,1)=-4
所以,把這兩個數(shù)放進(jìn)去,計算

然后以此類推:L1A左邊還要乘以L2(也是一個下三角矩陣:對角線還是1)

L2(3,2)需要填什么使得右邊U第二列下面也變成零(使之不斷朝向上三角矩陣靠近)
同理,L2(3,2)=-2
這樣就算出來U上三角矩陣長什么樣子

而且,我們有了L2和L1,所有下三角矩陣也有了 L=L2*L1

下一步呢?
算出來L的inverse, 和b矩陣,來求y矩陣

求出來y之后,用u矩陣和y矩陣來求x即可。

通過以上具體的例子,讀者肯定對這個追趕法(上下三角分解法)的原理有了進(jìn)一步的認(rèn)識。
下面就看matlab中具體指令是怎么樣的

LU Factorization -lu()函數(shù)

還是這個矩陣A,矩陣b

A=[1 1 1;2 3 5 ; 4 6 8];
[L,U,P]=lu(A);
通過函數(shù)lu()可以求出原矩陣的上三角矩陣U和下三角陣L
然后:
inv(L)%L矩陣的逆矩陣


算出來,上面兩個式子:

下面筆者實操一下看看具體的matlab實現(xiàn)過程:

代碼:
A=[1 1 1;2 3 5 ; 4 6 8];
[L,U,P]=lu(A)%得到下三角矩陣和上三角陣
得到的結(jié)果:

然后需要求inv(L)
invL=inv(L)
求得結(jié)果:


然后需要invL*y=b來求解,需要回顧前面老師講的線性方程組的求法:高斯消去法rref()函數(shù)
當(dāng)然要輸入進(jìn)來b矩陣 b=[1 2 7]’


用高斯消去法求解y
y=rref([invL,b])
求得y矩陣:

同樣的道理,高斯消去法求解x矩陣
這里y的解分別是y1=2,y2=7.5,y3=4;
需要重新整理y矩陣,得到y(tǒng)的解矩陣

y1=y(:,4)
結(jié)果:

然后求解x
x=rref([U,y1])
得到x的結(jié)果:

x1=x(:,4)


筆者:上次參加上海市數(shù)學(xué)建模培訓(xùn)時候,2018年A題關(guān)于防熱服的題目,其中關(guān)于矩陣的運算用到了追趕法,因為數(shù)據(jù)量比較大,得到的線性方程組很多,計算量很大,直接來高斯消去法很慢或者解不出來,老師講到的數(shù)據(jù)處理的技巧就是追趕法的應(yīng)用。

希望讀者好好體會這個追趕法的使用,可以很好的簡化計算的復(fù)雜度,尤其是數(shù)據(jù)量很大的時候。

【總結(jié)一下】
本文記錄了線性方程組的一些解法。
【1】高斯消去法rref()函數(shù)。
【2】追趕法:上下三角陣:Ax=b ,A =inv(L)U
得到 y=Ux
先求解:inv(L)*y=b
再求解:Ux=y

總結(jié)

以上是生活随笔為你收集整理的台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。