MATLAB基础教程(6)——使用matlab求解线性方程组
目錄
今日任務(wù):
一般方程:
方程組(目前僅討論方程個數(shù)和未知數(shù)個數(shù)一樣的情況):
額外知識?
咦,咋跑題了
左除和右除
今日總結(jié):
今日任務(wù):
在數(shù)學(xué)中經(jīng)常遇見的一個問題就是方程求解,特別是線性代數(shù)中,很經(jīng)常遇見線性方程組的求解問題,今天就來用Matlab來探討線性方程組的求解問題。
一般方程:
一般來講,我們看到的方程都是這個樣式的:,其中a、b都是常數(shù),很顯然,這時候 x 的解就是b/a。
也就是說,我們拿后面的值除以前面的系數(shù),即可得到解X。
方程組(目前僅討論方程個數(shù)和未知數(shù)個數(shù)一樣的情況):
剛剛我們講的是一般方程,那推廣到線性方程組,假設(shè)我們現(xiàn)在有個這樣的方程:
相信大家運(yùn)用高中知識也能很快的求出這個方程的答案,但是,如果四階?五階甚至更高呢?不如轉(zhuǎn)換為矩陣的方法。
根據(jù)線性代數(shù)的知識,我們可以得到這樣一個增廣矩陣:
那我們令系數(shù)矩陣是A,結(jié)果矩陣是B,這個解矩陣X該怎么算呢?
額外知識?
此部分提供給還未學(xué)過線性代數(shù)的同學(xué)看,如果知道基本知識可以先行跳過。
上面的矩陣方程可以視為這樣的矩陣方程:
其中,令X為未知數(shù)的矩陣,前面的三乘三的系數(shù)矩陣稱為A,等號右邊的結(jié)果矩陣稱為B,方程組即可表述為:
AX = B,求X。
矩陣A的列數(shù)和矩陣X的行數(shù)相同時才可寫成此種形式,因?yàn)楫?dāng)A的列數(shù)(這里是三列)等于X的行數(shù)(這里是三行)才能進(jìn)行矩陣乘法運(yùn)算。
矩陣乘法運(yùn)算是這樣的:
易看出:如果A是 n 行 m 列,則X需要是?m 行 s?列才可相乘,且結(jié)果矩陣必是 n 行 s 列。
所以按照上面的運(yùn)算法則,我們就可以看出,矩陣方程和原來的方程組是等價(jià)的。
咦,咋跑題了
我們已經(jīng)得到了方程組對應(yīng)的矩陣方程:,那么編程的第一件事就應(yīng)該是在程序里面表述這個方程組。下面看代碼:
%% 方程組求解clc;clear;A = [4 1 -2;2 2 1;3 1 -1];% 定義一個3行3列的矩陣A,行與行之間使用分號隔開,每一行之間的元素使用空格隔開B = [1;2;3]; %定義矩陣Bdisp(A);disp(B); %顯示A和B現(xiàn)在我們便可以在程序中得到兩個矩陣,分別是A和B,定義的時候也可以不換行,但是換行定義看起來畢竟方便、易讀。
運(yùn)行代碼就能看到我們定義的這兩個矩陣:
同樣,我們也可以在右邊的工作區(qū)查看我們的這兩個變量:
在這個工作區(qū),我們看到的數(shù)據(jù)會更加的直觀,就像圖中這樣:
?
現(xiàn)在,我們得到了兩個矩陣,萬事俱備,只欠東風(fēng),我們現(xiàn)在只需要一個除法即可得出這個解矩陣X。
現(xiàn)在在最后面加入這個代碼:
X = A\B; % 左除disp(X);可能會有些人覺得奇怪,怎么A在左邊并且這個寫的是斜杠呢?
如果我們學(xué)習(xí)過矩陣便知道,矩陣的乘法是沒法前后調(diào)換的,即 AB 不等于 BA,也就是說,AX = B,要求這個X,我們需要在兩邊的左邊同時除以A(嚴(yán)謹(jǐn)說法叫做乘以A的逆矩陣),即 1/A * A *X = 1/A * B,也叫做左除,而在matlab中,左除符號就是這個“ \ ”符號,所以應(yīng)這樣使用,即 A \ B代表 1/A * B(嚴(yán)謹(jǐn)來說,就是A的逆矩陣*B),即可得到X。
運(yùn)行后我們便可看到解矩陣的結(jié)果:
大家可以手動動手驗(yàn)證一下看看對不對哈哈哈。
左除和右除
上面講的是左除,下面我們來說說右除,也就是在右邊乘以1/A(嚴(yán)謹(jǐn)說法叫做A的逆矩陣),那么這個方程組應(yīng)該是這樣的:
XA = B
如果A和B不變的話,對應(yīng)的矩陣應(yīng)該是這樣的:
然后根據(jù)乘法的運(yùn)算法則,可以發(fā)現(xiàn),這個方程是沒法解的(因?yàn)楦揪蜎]法乘,前面矩陣1列,后面矩陣3行,不相等,沒法進(jìn)行乘法運(yùn)算)
所以,如果進(jìn)行這樣的乘法運(yùn)算,我們需要把X的解矩陣變換(注意,變換后乘出來的結(jié)果和之前的方程組不一樣,不一樣!):
那么根據(jù)運(yùn)算律,我們可以得到現(xiàn)在的方程組是:
注:不一定有解,畢竟是現(xiàn)改的。
那么這個X如何求呢?
根據(jù)原方程: XA = B,我們需要在等號兩端的右邊同時乘以 1/A(嚴(yán)謹(jǐn)來說是A的逆矩陣),即:
X * A * 1/A = B * 1/A(左右千萬不能放錯) ==> X = B*1/A
在代碼中,右除是這樣寫的(注意代碼改動,因?yàn)榫仃嘊變了):
%% 方程組求解,右除clc;clear;A = [4 1 -2;2 2 1;3 1 -1];% 定義一個3行3列的矩陣A,行與行之間使用分號隔開,每一行之間的元素使用空格隔開B = [1 2 3]; %定義矩陣Bdisp(A);disp(B); %顯示A和BX = B/A; % 右除disp(X);然后運(yùn)行:
咦,居然有解!!!!
今日總結(jié):
總結(jié)
以上是生活随笔為你收集整理的MATLAB基础教程(6)——使用matlab求解线性方程组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bcb隐藏窗口_BCB隐藏Windows
- 下一篇: 因子分析——matlab