2021年6月3日 星期四

線性聯立方程式矩陣解法

 線性聯立方程式矩陣解法

源自於http://bime-matlab.blogspot.com/2006/11/102.html

所謂線性方程式係指方程式中之變數僅屬一階者,其幕次不能大於一,且任何項中不得有兩變數相乘或相除之情形。在矩陣表示法上,通常採用[A][x]=[b]之型式,其解為[x]=[A]\[b]或[x]=[b]/[A]。

對於線性聯立方程式目前已經發展出許多種解法,其中包括變數迭代消去法及克雷蒙法(Creamer's Method)。目前MATLAB 所使用之解法則以變數迭代消去法為主,或稱為高斯(Gauss Elimination)消去法。這是利用兩線性方程式分別乘以某特定常數,使其與另一方程式之同一變數係數相同,因而兩式相減得以消除該變數。如此展轉消除,最後可以得聯立方程之解。茲舉例說明如下:


3x +4y =10
5x -2y =8
由上式整理之後,可得果為y = 1;代入原式任一式可得x = 2,終得解。如果利用第九章之繪圖指令可以繪出此兩條曲線,由其交點即可得到相同的解。

ezplot('3*x+4*y-10',[-10,10]);hold on
ezplot('5*x-2*y-8',[-10,10])


利用這樣的解法並不是解線性方程式之重點,因為線性代數方程式可用矩陣的型式表示,甚至以矩陣之乘除法可以得解。以上面之聯立線性方程式為例,可以化成AX=C之型式,設x=x1,y=x2:



左除法求解


利用MATLAB求解時,只要用矩陣倒除即可,或稱為左除法。例如一組聯立方程式以矩陣表示為[A][X]=[C]時,其未知數項[X]可以利用MATLAB倒除的指令求得,即[X]=[A]\[C]:
A=[3 4;5 -2];
C=[10;8];
X=A\C

X =
2
1
結果立即得到x1=2、x2=1。

反矩陣法求解


解上式矩陣有時可用反矩陣法。反矩陣有倒數的意義,但在矩陣中必須為方矩陣,且須為非特異矩陣(non-singular)。通常用(-1)次方表示之,如A-1 。其基本特質為與原矩陣相乘後,將得到單位矩陣I:

A-1A=AA-1=I

以此乘於AX=C之兩側,可得:

A-1AX=A-1C  或A-1AX=IX=X= A-1C

在MATLAB反矩陣A-1 之求法為inv(A);I或稱為單位矩陣,表示為eye(A)。就上面之聯立方程式之解,可以用MATLAB演算如下:

A=[3 4;5 -2];
C=[10;8];
X=inv(A)*C
X =
2.0000
1.0000

%範例:有一組聯立方程式如下:
%   6x - 3y +5z = 12
% 10x + 4y -8z =-20
%  -6x + 2y +3z = 15
A=[6 -3 5; 10  4  -8;-6 2 3]
C=[12 ;-20; 15]
x=A\C
Y=inv(A)*C
A =
     6    -3     5
    10     4    -8
    -6     2     3

C =
    12
   -20
    15
x =
    0.0479
    2.1737
    3.6467
Y =
    0.0479
    2.1737
    3.6467
可用以反求C值,C=Ax,其結果也正確。
>> d=A*Y
d =
   12.0000
  -20.0000
   15.0000

>> D=A*x
D =
   12.0000
  -20.0000
   15.0000

沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...