2021年6月3日 星期四

行列式與反矩陣

 行列式與反矩陣

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

在工程數學或線性代數中,行列式與反矩陣是常用的矩陣特性。尤其在討論聯立方程式之解的過程中更常用到。反矩陣有如一個矩陣的倒數,一個方矩陣若為A,則其反矩陣可以A-1表示,而其與原矩陣之關係為:

AA-1=I A-1A=I
其中,I稱為單位矩陣(Identity matrix),其大小為方矩陣,而對角線元素值均為1。在MATLAB中有一個指令稱為eye,可以用以建立這種單位矩陣。

>> a=[1 2 ; 3 4];
>> b=inv(a)
b =
   -2.0000    1.0000
    1.5000   -0.5000
>> c=a*b
c =
    1.0000         0
    0.0000    1.0000

>> c=b*a

c =
    1.0000         0
    0.0000    1.0000

>> eye(2)  %單位矩陣(Identity matrix)
ans =
     1     0
     0     1

>> A=rand(4)

A =
    0.6948    0.4387    0.1869    0.7094
    0.3171    0.3816    0.4898    0.7547
    0.9502    0.7655    0.4456    0.2760
    0.0344    0.7952    0.6463    0.6797

>> B=inv(A)
B =
   -0.0503    0.8024    0.8645   -1.1895
    1.4711   -3.2118   -0.0787    2.0627
   -3.2986    3.6604    1.2312   -1.1216
    1.4180    0.2363   -1.1225    0.1848

>> B*A
ans =
    1.0000   -0.0000   -0.0000   -0.0000
         0        1.0000    0.0000         0
   -0.0000   -0.0000    1.0000    0.0000
    0.0000    0.0000     0.0000    1.0000

>> A*B
ans =
    1.0000         0           0          -0.0000
    0.0000    1.0000   -0.0000         0
    0.0000         0       1.0000          0
         0            0      -0.0000       1.0000

A、B及I均為方矩陣,且A矩陣之行列式值或det(A)需不得為零,否則其反矩陣不能存在。此種矩陣不存在的情形,稱為奇異矩陣(singular)。一個矩陣若具奇異特性,則其行列值為零,
>> det(A)
ans =  -0.1222

>> det(B)
ans =  -8.1864

一個矩陣若具奇異特性,則其行列值為零,例如:

D=magic(4)

D =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

d=det(D)
d = 0

行值式之值為零,表示其反矩陣不存在,故即使用inv(D)指令也會產生一些數字,但其結果並不可靠,而且會有一些警告訊息出現,例如:

dd=inv(D)

Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 1.306145e-017.
dd =
1.0e+014 *
0.9382 2.8147 -2.8147 -0.9382
2.8147 8.4442 -8.4442 -2.8147
-2.8147 -8.4442 8.4442 2.8147
-0.9382 -2.8147 2.8147 0.9382

上述結果之值也變成很大,顯然不是正確的值。不信的話可以用AA-1=I, A-1A=I 印證一下(在此至少證實一下「垃圾進拉圾出(Gabage in, gabage out」這句名言)。

所以,某矩陣是否為奇異矩陣,可以使用det進行檢驗。其值若為零則屬奇異矩陣。

沒有留言:

張貼留言

WOKWI LED + MQTT Node-Red SQLite

WOKWI LED + MQTT Node-Red SQLite const char *mqtt_broker = "broker.mqtt-dashboard.com" ; const char *topic1 = "alex9ufo/e...