转自: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以前),而左除则不需要计算逆矩阵直接进行相除。通常右除要快 一点,但左 除可避免被矩阵的奇异性带来的麻烦。 比如下面的例子: [plain] view plain copy >> 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. 在看矩阵可逆情况: [plain] view plain copy >> 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)