MATLAB新手簡明使用教程(五)——使用matlab求解線性方程組——新手來看,保證看懂。

前期回顧

在上期教程中,我們學習了下面的知識點:

  1. 如何聲明、定義、調用函數(文件)。
  2. 給函數傳遞參數、接受函數的返回值。
  3. matlab中矩陣的簡單使用和下標索引。
  4. 給我們代碼模塊化
  5. matlab中for循環(遍歷)的使用。
  6. 如何從一個文件調用另一個函數文件。

本期目標:

在數學中經常遇見的一個問題就是方程求解,特別是線性代數中,很經常遇見線性方程組的求解問題,今天就來用Matlab來探討線性方程組的求解問題。

正文開始啦

一般方程:

一般來講,我們看到的方程都是這個樣式的:ax = b,其中a、b都是常數,很顯然,這時候 x 的解就是b/a。

也就是說,我們拿後面的值除以前面的係數,即可得到解X。

方程組(目前僅討論方程個數和未知數個數一樣的情況):

剛剛我們講的是一般方程,那推廣到線性方程組,假設我們現在有個這樣的方程:

\left\{\begin{matrix} 4x_{1} + x_{2} -2x_{3} = 1 \\2x_{1} + 2x_{2} + x_{3} = 2 \\3x_{1} + x_{2} - x_{3} = 3 \end{matrix}\right.

相信大家運用高中知識也能很快的求出這個方程的答案,但是,如果四階?五階甚至更高呢?不如轉換爲矩陣的方法。

根據線性代數的知識,我們可以得到這樣一個增廣矩陣:

\begin{bmatrix} 4 & 1 & -2 & 1\\ 2 & 2 & 1 & 2\\ 3 & 1 & -1 & 3 \end{bmatrix}

那我們令係數矩陣是A,結果矩陣是B,這個解矩陣X該怎麼算呢?

額外知識 

此部分提供給還未學過線性代數的同學看,如果知道基本知識可以先行跳過。

上面的矩陣方程可以視爲這樣的矩陣方程:\begin{bmatrix} 4 & 1 & 2\\ 2 & 2 & 1\\ 3 & 1 & -1 \end{bmatrix}\begin{bmatrix} x_{1}\\ x_{2}\\ x_{3} \end{bmatrix} = \begin{bmatrix} 1\\ 2\\ 3 \end{bmatrix}

其中,令X爲未知數的矩陣,前面的三乘三的係數矩陣稱爲A,等號右邊的結果矩陣稱爲B,方程組即可表述爲:

AX = B,求X。

矩陣A的列數和矩陣X的行數相同時纔可寫成此種形式,因爲當A的列數(這裏是三列)等於X的行數(這裏是三行)才能進行矩陣乘法運算。

矩陣乘法運算是這樣的:\begin{bmatrix} a_{11} & a_{12}\\ a_{21} & a_{22} \end{bmatrix}\begin{bmatrix} b_{1}\\ b_{2} \end{bmatrix}=\begin{bmatrix} a_{11}*b_{1} + a_{12}*b_{2} \\ a_{21}*b_{1} + a_{22}*b_{2} \end{bmatrix}

易看出:如果A是 n 行 m 列,則X需要是 m 行 s 列纔可相乘,且結果矩陣必是 n 行 s 列。

所以按照上面的運算法則,我們就可以看出,矩陣方程和原來的方程組是等價的。

回到正文:

我們已經得到了方程組對應的矩陣方程:\begin{bmatrix} 4 & 1 & 2\\ 2 & 2 & 1\\ 3 & 1 & -1 \end{bmatrix}\begin{bmatrix} x_{1}\\ x_{2}\\ x_{3} \end{bmatrix} = \begin{bmatrix} 1\\ 2\\ 3 \end{bmatrix},那麼編程的第一件事就應該是在程序裏面表述這個方程組。下面看代碼:

%% 方程組求解
clc;
clear;
A = [4 1 -2;
     2 2  1;
     3 1 -1];
% 定義一個3行3列的矩陣A,行與行之間使用分號隔開,每一行之間的元素使用空格隔開
B = [1;
     2; 
     3]; %定義矩陣B
disp(A);disp(B); %顯示A和B

現在我們便可以在程序中得到兩個矩陣,分別是A和B,定義的時候也可以不換行,但是換行定義看起來畢竟方便、易讀。

運行代碼就能看到我們定義的這兩個矩陣:

同樣,我們也可以在右邊的工作區查看我們的這兩個變量:

在這個工作區,我們看到的數據會更加的直觀,就像圖中這樣:

現在,我們得到了兩個矩陣,萬事俱備,只欠東風,我們現在只需要一個除法即可得出這個解矩陣X。

現在在最後面加入這個代碼:

X = A\B;  % 左除
disp(X);

可能會有些人覺得奇怪,怎麼A在左邊並且這個寫的是斜槓呢?

如果我們學習過矩陣便知道,矩陣的乘法是沒法前後調換的,即 AB 不等於 BA,也就是說,AX = B,要求這個X,我們需要在兩邊的左邊同時除以A(嚴謹說法叫做乘以A的逆矩陣),即 1/A * A *X = 1/A * B,也叫做左除,而在matlab中,左除符號就是這個“ \ ”符號,所以應這樣使用,即 A \ B代表 1/A * B(嚴謹來說,就是A的逆矩陣*B),即可得到X。

運行後我們便可看到解矩陣的結果:

大家可以手動動手驗證一下看看對不對哈哈哈。

左除和右除

上面講的是左除,下面我們來說說右除,也就是在右邊乘以1/A(嚴謹說法叫做A的逆矩陣),那麼這個方程組應該是這樣的:

XA = B

如果A和B不變的話,對應的矩陣應該是這樣的:

\begin{bmatrix} x_{1}\\ x_{2}\\ x_{3} \end{bmatrix}\begin{bmatrix} 4 & 1 & 2\\ 2 & 2 & 1\\ 3 & 1 & -1 \end{bmatrix} = \begin{bmatrix} 1\\ 2\\ 3 \end{bmatrix}

然後根據乘法的運算法則,可以發現,這個方程是沒法解的(因爲根本就沒法乘,前面矩陣1列,後面矩陣3行,不相等,沒法進行乘法運算)

所以,如果進行這樣的乘法運算,我們需要把X的解矩陣變換(注意,變換後乘出來的結果和之前的方程組不一樣,不一樣!):

\begin{bmatrix} x_{1} & x_{2} & x_{3} \end{bmatrix}\begin{bmatrix} 4 & 1 & 2\\ 2 & 2 & 1\\ 3 & 1 & -1 \end{bmatrix} = \begin{bmatrix} 1& 2& 3 \end{bmatrix}

那麼根據運算律,我們可以得到現在的方程組是:

\left\{\begin{matrix} 4x_{1} + 2x_{2} + 3x_{3} = 1\\ x_{1} + 2x_{2} + x_{3} = 2\\ 2x_{1} + x_{2} - x_{3} = 3 \end{matrix}\right.

注:不一定有解,畢竟是現改的。

那麼這個X如何求呢?

根據原方程: XA = B,我們需要在等號兩端的右邊同時乘以 1/A(嚴謹來說是A的逆矩陣),即:

X * A * 1/A = B * 1/A(左右千萬不能放錯) ==> X = B*1/A

在代碼中,右除是這樣寫的(注意代碼改動,因爲矩陣B變了):

%% 方程組求解,右除
clc;
clear;
A = [4 1 -2;
     2 2  1;
     3 1 -1];
% 定義一個3行3列的矩陣A,行與行之間使用分號隔開,每一行之間的元素使用空格隔開
B = [1 2 3]; %定義矩陣B
disp(A);disp(B); %顯示A和B
X = B/A;  % 右除
disp(X);

然後運行:

嗯。。。竟然還是有解的哈哈哈哈。

結束語:

今天我們學習瞭如下的知識:

  1. 在matlab中定義矩陣。
  2. 線性代數矩陣乘法運算、求解知識。
  3. 關於矩陣乘法左除、右除的區別。
  4. 在matlab中求解兩種矩陣方程的方法。

今天就到此結束啦,東西雖少,但是乾貨滿滿,希望大家馬上學會!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章