台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法)
臺灣國立大學郭彥甫Matlab教程筆記(21)
today:
linear equation 線性方程
linear system 線性系統
我們先看第一部分
linear equation
假定一個線性方程組:
下面我們用矩陣的形式表示這個二元一次方程組:Ax=b的形式
WHy matrix form?
可能多元,問題本身很復雜,矩陣方法可以通吃。
下面是一道電路題目:給定電源電壓和電阻值,求解電流值是多少
老師口中的tilde 是波浪線的意思
這道題目的求解需要用到基爾霍夫電流定律和基爾霍夫電壓定律,這里不詳細展開
基爾霍夫電壓定律 voltage law:一個回路電壓和為零
基爾霍夫電流定律 current law:一個節點的流入電流和流出電流代數和為0
列出來的線性方程組如下:
我們需要求解是i,轉化成矩陣是這樣的形式:
得到的矩陣為:
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
例題:
把方程組寫成矩陣的形式,增廣矩陣
利用矩陣的性質,第一行*(-2)加到第二行中,第一行乘以(-1)加到第三行中,得到下面的矩陣(行列式,矩陣的化簡,多出現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])
我們執行這段代碼看看這個方程組解的情況:
以上表示x1=-3;x2=2;x3=1;也就是方程組的解
接著看下一個消去的方法:
LU Factorization追趕法
這個是我一篇博文里記錄的:追趕法
factorization 是因數分解的意思
L:lower-triangular matrix下三角矩陣
U:upper-triangular matrix上三角矩陣
思路是把A矩陣拆分成兩個三角陣
兩個三角陣是這樣的形式:A等于L的逆矩陣乘以U矩陣
因式分解矩陣的目的是:把L的inverse 乘以U代入得到下式,然后把Ux令為y,然后解的問題就轉化為:先求y,然后求x。
這樣處理,因為三角行列式有一半是0,求解起來變得簡單。
知道追趕法的原理了,我們現在來看一下下三角矩陣和上三角矩陣
下面的問題是:如何得到這個L和U矩陣呢?
下圖中左邊乘以很多Li,最終是讓右邊成為一個上三角矩陣(左下角全為零),這些L的目的是一列一列的來計算,一列一列的讓其變成零
通過矩陣乘法,左邊乘
A=inv(L)U
LA=Linv(L)*U
LA=U
怎么算呢?舉個例子
給定一個A矩陣
解體過程:
因為A左邊乘的是一個下三角矩陣,其主對角線上的元素全為1,右上角全為零。
現在,讓L左下角等于什么,使得運算完成只有右邊U的第一列為零?
求解:u(2,1)是L的第二行A的第一列得到的結果,可以求得 L(2,1)=-2
同理u(3,1)=L的第三行A的第一列,可以求得L(3,1)=-4
所以,把這兩個數放進去,計算
然后以此類推: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即可。
通過以上具體的例子,讀者肯定對這個追趕法(上下三角分解法)的原理有了進一步的認識。
下面就看matlab中具體指令是怎么樣的
LU Factorization -lu()函數
還是這個矩陣A,矩陣b
A=[1 1 1;2 3 5 ; 4 6 8];
[L,U,P]=lu(A);
通過函數lu()可以求出原矩陣的上三角矩陣U和下三角陣L
然后:
inv(L)%L矩陣的逆矩陣
算出來,上面兩個式子:
下面筆者實操一下看看具體的matlab實現過程:
代碼:
A=[1 1 1;2 3 5 ; 4 6 8];
[L,U,P]=lu(A)%得到下三角矩陣和上三角陣
得到的結果:
然后需要求inv(L)
invL=inv(L)
求得結果:
然后需要invL*y=b來求解,需要回顧前面老師講的線性方程組的求法:高斯消去法rref()函數
當然要輸入進來b矩陣 b=[1 2 7]’
用高斯消去法求解y
y=rref([invL,b])
求得y矩陣:
同樣的道理,高斯消去法求解x矩陣
這里y的解分別是y1=2,y2=7.5,y3=4;
需要重新整理y矩陣,得到y的解矩陣
y1=y(:,4)
結果:
然后求解x
x=rref([U,y1])
得到x的結果:
x1=x(:,4)
筆者:上次參加上海市數學建模培訓時候,2018年A題關于防熱服的題目,其中關于矩陣的運算用到了追趕法,因為數據量比較大,得到的線性方程組很多,計算量很大,直接來高斯消去法很慢或者解不出來,老師講到的數據處理的技巧就是追趕法的應用。
希望讀者好好體會這個追趕法的使用,可以很好的簡化計算的復雜度,尤其是數據量很大的時候。
【總結一下】
本文記錄了線性方程組的一些解法。
【1】高斯消去法rref()函數。
【2】追趕法:上下三角陣:Ax=b ,A =inv(L)U
得到 y=Ux
先求解:inv(L)*y=b
再求解:Ux=y
總結
以上是生活随笔為你收集整理的台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 辽宁省空置房物业费减免条例?
- 下一篇: 不想买房了违约怎么办?