源自於 https://bime-matlab.blogspot.com/2006/11/103.html
det & rank 指令
利用左除法的求解過程甚為簡單,但有時並不一定有解,有時也可能有多組解。聯立方程式中,型式上其變數與方程式之數目相同,應可以得解。
但有些方程式是相依的,或者其中方程可能由其他兩式相互加減而得的結果,此時即無法無法獲得唯一解,因此過程上仍需先行檢驗。
行列式值與聯立方程式求解有密切的關係。其值若為零,所得之解可能為非唯一組解;若不為零,則可能得到一組解。在MATLAB中,可以使用位階指令rank檢驗。
一魔術函數造成之矩陣A,其行列值及位階分別由det & rank 指令進行檢驗:
舉例:
一魔術函數造成之矩陣A,其行列值及位階分別由det & rank 指令進行檢驗:
>> A=magic(3);
>> A
A =
8 1 6
3 5 7
4 9 2
>> det(A)
ans =
-360
>> rank(A)
ans =
3
===================
A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> det(A)
ans =
5.1337e-13
>> rank(A)
ans =
3
矩陣A雖為4x4,利用行列值檢視,其值為det(A)=0,表示無法獲得單一解。同樣利用rank位階指令檢查,其結果為3階,兩者均顯示與矩陣A相關之聯立方程式可能為多組解。
要檢測一組聯立方程式是否有解,使用上述rank的指令功能可以研判。
例如檢測AX=C這一組聯聯立方程式,先求rank(A)與 rand([A C])之階值,後者[A C]稱為增廣矩陣(Augrmented matrix)。
若所得兩個階值相同,且其階值等於變數個數時,應為有解且其解屬唯一。
若階值小於變數個數時,其解應為多數解,其變數可用兩者之差數之線性組合
範例:
A X = C , X=A\C
>> A=[6 -3 5;10 4 -8;-6 2 3];
>> A
A =
6 -3 5
10 4 -8
-6 2 3
>> C=[12 -20 15]';
>> C
C =
12
-20
15
>> R1=rank(A),R2=rank([A C])
R1 = 3
R2 = 3
由於兩者之階值相同,表示其解存在且為唯一。
>>X=A\C
X =
0.0479
2.1737
3.6467
範例:
>> A=[3 2 1 ; 10 -25 5]
A =
3 2 1
10 -25 5
>> C=[5000 2000]'
C =
5000
2000
>> R1=rank(A),R2=rank([A C])
R1 = 2
R2 = 2
>> T=A\C
T =
1.0e+03 *
1.3579
0.4632
0
T =
1357.9
463.2
0
顯然這組方程式應有解,但由於階數2小於變數個數3,故其解為多數解。
利用左除法亦可得到其中一解,即令T3等於零時,所得之答案。
範例六:
有一電路如圖,接於一電源V上。試求通過各電阻器上之電流。
根據克希荷夫Kirchhoff定律,可以選定三個迴圈建立屬於電壓降之三項聯立方程式,及電流經由A、B、C三點產生分流時所能建立之四個關係方程式得之:
整理此組聯立方程式,其電流變數I有五項,其方程式有五組,故應可得解。茲以矩陣[R][I]=[V]表示,利用左除法即為[I]=[R]\[V]。其各變數矩陣分別為:
程式內容
function Curr=ele_amp(v,r)
% Prog using Kirchihoff's law to find the currents in a circuit.
% Inputs:
% v: Voltage of generators. volts
% r: the resistances r=[r1 r2 r3 r4 r5 r6], in Kohms.
% Outputs:
% Curr: currents through resistors [c1 c2 c3 c4 c5 c6], in mA
% Example: current=ele_amp(100,[1 1 2 5 5 10])
V=[v 0 0 0 0 0]';
R=[r(1) 0 0 0 r(5) r(6);
0 r(2) r(3) 0 -r(5) 0;
0 0 -r(3) r(4) 0 -r(6);
1 0 -1 0 -1 0;
0 1 -1 -1 0 0;
-1 0 0 1 0 -1];
Current=R\V;Curr=Current';
>> current=ele_amp(100,[1 1 2 5 5 10])
Current =
8.0338
17.9704
3.1712
14.7992
4.8626
6.7653
Curr =
8.0338 17.9704 3.1712 14.7992 4.8626 6.7653
current =
8.0338 17.9704 3.1712 14.7992 4.8626 6.7653
>>
沒有留言:
張貼留言