2016-04-25 3 views
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

Замечание о вашей проверке равенства: вы не должны использовать '==' для сравнения чисел с плавающей запятой (см. [Что каждый программист должен знать о арифметике с плавающей запятой] (http://floating-point-gui.de /)), а скорее проверьте, что разница чисел меньше, чем очень небольшой порог. Так что скорее сделайте 'equalCheck = abs (inverseMult - inverseMatMult) Dan

+1

Обратите внимание, что мультипликация multitication является комьютативной только для чисел (скаляров) и скалярного умножения 'A.B'. Умножение матриц и векторное умножение векторов 'AxB' ** не являются ** комьютативными. – Crowley

+0

* Если вы надеваете носки и туфли, тогда вы берете сначала свои туфли, а затем свои носки * ... – percusse

ответ

9

Вы полагаете, некорректное идентичность - это должно быть:

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

(см полезный список обратимых матриц идентичностей here.)

Так что если вы измените эту строку:

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

к:

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

, то вы должны получить ожидаемый результат. (Обратите внимание, что проверка равенства может по-прежнему сбой из-за ошибок округления, но вы должны убедиться, что две матрицы результатов идентичны разумному числу значимых цифр.)

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 и, следовательно, уравнение (A * B)^- 1 = (б)^- 1 * (а)^- 1 имеет место, тогда как

(a * b)^- 1 = (a)^- 1 * (b)^- 1 не выполняется.

Надеюсь, это поможет!

Смежные вопросы