Diese Frage ist ziemlich alt, aber ich werde es trotzdem beantworten, weil es in einigen Google-Suchen fast oben erscheint.
Ich werde für mein Beispiel die magische (N) Funktion verwenden, die ein N-by-N magisches Quadrat zurückgibt.
Ich werde ein magisches 3x3-Quadrat M3 schaffen, nehmen Sie die Pseudo-Inverse PI_M3 und mehren:
prompt_$ M3 = magic(3) , PI_M3 = pinv(M3) , M3 * PI_M3
M3 =
8 1 6
3 5 7
4 9 2
PI_M3 =
0.147222 -0.144444 0.063889
-0.061111 0.022222 0.105556
-0.019444 0.188889 -0.102778
ans =
1.0000e+00 -1.2212e-14 6.3283e-15
5.5511e-17 1.0000e+00 -2.2204e-16
-5.9952e-15 1.2268e-14 1.0000e+00
Wie Sie die Antwort sehen die Identitätsmatrix ist für einige Rundungsfehler speichern. Ich werde den Betrieb mit einem 4x4 magischen Quadrat wiederholen:
prompt_$ M4 = magic(4) , PI_M4 = pinv(M4) , M4 * PI_M4
M4 =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
PI_M4 =
0.1011029 -0.0738971 -0.0613971 0.0636029
-0.0363971 0.0386029 0.0261029 0.0011029
0.0136029 -0.0113971 -0.0238971 0.0511029
-0.0488971 0.0761029 0.0886029 -0.0863971
ans =
0.950000 -0.150000 0.150000 0.050000
-0.150000 0.550000 0.450000 0.150000
0.150000 0.450000 0.550000 -0.150000
0.050000 0.150000 -0.150000 0.950000
Das Ergebnis ist nicht die Identitätsmatrix, bedeutet dies, dass das 4x4 magische Quadrat nicht einen inverses hat. Ich kann dies überprüfen, indem eine der Regeln des Penrose-Pseudo Moore versucht:
prompt_$ M4 * PI_M4 * M4
ans =
16.00000 2.00000 3.00000 13.00000
5.00000 11.00000 10.00000 8.00000
9.00000 7.00000 6.00000 12.00000
4.00000 14.00000 15.00000 1.00000
Die Regel A * B * A = A erfüllt ist. Dies zeigt, dass pinv die inverse Matrix zurückgibt, wenn sie verfügbar ist und die Pseudoinverse, wenn die inverse nicht verfügbar ist. Dies ist der Grund, warum Sie in manchen Situationen einen kleinen Unterschied haben, nur einige Rundungsfehler, und in anderen Situationen bekommen Sie einen größeren Unterschied. es zu zeigen, werde ich die Umkehrung der beiden magischen Quadranten erhalten und sie von der Pseudo-Inverse subtrahieren: [? Warum ist Matlab inv langsam und ungenau]
prompt_$ I_M3 = inv(M3) , I_M4 = inv(M4) , DIFF_M3 = PI_M3 - I_M3, DIFF_M4 = PI_M4 - I_M4
I_M3 =
0.147222 -0.144444 0.063889
-0.061111 0.022222 0.105556
-0.019444 0.188889 -0.102778
warning: inverse: matrix singular to machine precision, rcond = 1.30614e-17
I_M4 =
9.3825e+13 2.8147e+14 -2.8147e+14 -9.3825e+13
2.8147e+14 8.4442e+14 -8.4442e+14 -2.8147e+14
-2.8147e+14 -8.4442e+14 8.4442e+14 2.8147e+14
-9.3825e+13 -2.8147e+14 2.8147e+14 9.3825e+13
DIFF_M3 =
4.7184e-16 -1.0270e-15 5.5511e-16
-9.9226e-16 2.0470e-15 -1.0825e-15
5.2042e-16 -1.0270e-15 4.9960e-16
DIFF_M4 =
-9.3825e+13 -2.8147e+14 2.8147e+14 9.3825e+13
-2.8147e+14 -8.4442e+14 8.4442e+14 2.8147e+14
2.8147e+14 8.4442e+14 -8.4442e+14 -2.8147e+14
9.3825e+13 2.8147e+14 -2.8147e+14 -9.3825e+13
möglich Duplikat (http: // Stackoverflow. com/questions/1419580/why-is-matlabs-inv-langsam-und-ungenaue) – Shai
@Shai, ich glaube, OP könnte von der Lektüre der Antworten auf die Frage profitieren, die Sie verknüpft haben (zumindest wenn OP "inv" für verwendet Lösen von 'x = A^-1 * b'), aber IMO ist dies kein Duplikat. –