2016-04-25 15 views
2

私のコードでは何が起こっていますか?なぜ私は2つの異なる行列を得ているのか理解できません。なぜなら、a^-1 * b^-1 =(a * b)^ - 1は別の言語で書こうとしましたが、同じ不等式が得られます。行列の法則と構文matlab

入力:

A = [3 5 2; 2 1 -1; 1 2 2]; 
B = [6 -2 4; 6 4 -12; 12 2 8]; 

inverseA = A^(-1); 
inverseB = B^(-1); 

inverseMult = inverseA * inverseB; 
inverseMatMult = (A*B)^(-1); 

equalityCheck = inverseMult == inverseMatMult; 

disp(inverseMult) 
disp(inverseMatMult) 
disp(equalityCheck) 

が出力:

-0.4038 -0.0863 0.1974 
    0.3224 0.0923 -0.1478 
    -0.1518 -0.0804 0.0804 

    -0.0317 0.0615 0.0694 
    0.1190 -0.2619 -0.1667 
    -0.0357 -0.0089 0.0625 

    0  0  0 
    0  0  0 
    0  0  0 
+2

'equalityCheck'の注意:浮動小数点数を比較するために' == 'を使うべきではありません(浮動小数点演算については、どのプログラマが知っておくべきことがあるのか​​を見てください)。(http://floating-point-gui.de /))、むしろ数の差が非常に小さい閾値よりも小さいことをチェックする。そうではなく、 'threshold'が' 1e-10'のような小さい数である場合、 'equalityCheck = abs(inverseMult - inverseMatMult) Dan

+1

注意してください。多項式は、数(スカラー)とスカラー倍加 'A.B'に対してのみ有効です。行列の乗算とベクトルの乗算 'AxB'は** comuitativeではありません。 – Crowley

+0

*靴と靴を履いたら、まず靴を履いてから靴下を取る* – percusse

答えて

9

あなたは間違ったアイデンティティを想定している - それは次のようになります。

(A*B)^-1 = B^-1 * A^-1 

(正則行列アイデンティティhereの便利なリストを参照してください。 )

ですから、この行変更する場合:

inverseMatMult = (A*B)^(-1); 

た:

inverseMatMult = (B*A)^(-1); 

は、あなたが期待される結果を取得する必要があります。 (等価性チェックは丸め誤差のためにまだ失敗することがありますが、2つの結果行列が合理的な有効数字と同じであることがわかります)

1

方程式を再チェックしたい場合があります。

(a * b)^ - 1 =(b)^ - 1 *(a)^ - 1;

  function [t2,t3,t4]= matrixidentity() 
      a = [3 5 2; 2 1 -1; 1 2 2]; 
      b = [6 -2 4; 6 4 -12; 12 2 8]; 
      t=a^-1;t1=b^-1; 
      t2=(a*b)^-1; 
      t3=t1*t; 
      t4=t*t1; 
      end 




      t2 = 

        -0.0317 0.0615 0.0694 
        0.1190 -0.2619 -0.1667 
        -0.0357 -0.0089 0.0625 


      t3 = 

        -0.0317 0.0615 0.0694 
        0.1190 -0.2619 -0.1667 
        -0.0357 -0.0089 0.0625 


      t4 = 

       -0.4038 -0.0863 0.1974 
        0.3224 0.0923 -0.1478 
       -0.1518 -0.0804 0.0804 

ここでは、そのT2 == T3を見ることができるので、式(* b)は^ - 1 =(B)^ - 1つの*は、(A)^ - 1(

のに対し、保持していますa * b)^ - 1 =(a)^ - 1 *(b)^ - 1は成り立たない。

希望すると助かります!