轉自:http://blog.csdn.net/clam_clam/article/details/7184991
最近編寫matlab 程序老是被 \ / 搞混淆。
運算符 名稱 說明
/(向右倒稱為右除) 右除 AB=C A=C/B
\(向左倒稱為左除) 左除 AB=C B=A\C
B\A 就是對應線性方程B*X=A 的解。
\ 左除
/ 右除
1. A\B=inv(A)*B (A左除B=A的逆乘以B)
>> 3\5
ans =
1.6667
3的逆=三分之一,再乘以5.
2. A/B=A*(inv(B)) (A右除B等於A乘以B的逆)
>> 3/5
ans =
0.6000
在傳統的matlab 算法中 右除是先計算矩陣的逆再相乘(matlab 6以前),而左除則不需要計算逆矩陣直接進行相除。通常右除要快 一點,但左 除可避免被矩陣的奇異性帶來的麻煩。
比如下面的例子:
>> G
G =
1 2
>> P
P =
1 1
>> Y=G*P
Y =
3
>> G\Y %左除,結果不是P,但也滿足方程。所以 G\Y 結果不一。
ans =
0
1.5000
>> G*M
ans =
2 %結果也為3
%%%%%%%%%%%%%%%%%%%%%%%%matlab 6.0 以后右除也可以了,不在先inv(P)。
>> Y/P
ans =
3 0
>> E=Y/P
E =
3 0
>> E*P
ans =
3
>> P
P =
1
1
但如果inv(p) 就會出現
??? Error using ==> inv
Matrix must be square.
在看矩陣可逆情況:
>> A
A =
1 2
2 1
>> B
B =
1 2
2 3
>> C=A*B
C =
5 8
4 7
>> C/B %%%= A
ans =
1 2
2 1
>> A\C %%%=B
ans =
1 2
2 3
>> C*inv(B) %% C/B=C*(inv(B)) (C右除B等於C乘以B的逆)
ans =
1 2
2 1
>> inv(A)*C %%驗證了A\C=inv(A)*C (A左除C=A的逆乘以C)
ans =
1.0000 2.0000
2.0000 3.0000
總結:
為了方便記憶對哪個矩陣進行逆運算,規律如下:
在可逆形式下轉換成逆矩陣,右除對右邊矩陣逆,左除對左邊矩陣逆。
1. C/B=C*(inv(B)) (C右除B等於C乘以B的逆)
2. A\C=inv(A)*C (A左除C=A的逆乘以C)