Что происходит в моем коде? Я не понимаю, почему я получаю две разные разные матрицы, когда 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
Замечание о вашей проверке равенства: вы не должны использовать '==' для сравнения чисел с плавающей запятой (см. [Что каждый программист должен знать о арифметике с плавающей запятой] (http://floating-point-gui.de /)), а скорее проверьте, что разница чисел меньше, чем очень небольшой порог. Так что скорее сделайте 'equalCheck = abs (inverseMult - inverseMatMult)
Dan
Обратите внимание, что мультипликация multitication является комьютативной только для чисел (скаляров) и скалярного умножения 'A.B'. Умножение матриц и векторное умножение векторов 'AxB' ** не являются ** комьютативными. – Crowley
* Если вы надеваете носки и туфли, тогда вы берете сначала свои туфли, а затем свои носки * ... – percusse