Main Content

inv

Beschreibung

Beispiel

Y = inv(X) berechnet die Inverse einer quadratischen Matrix X.

  • X^(-1) ist äquivalent zu inv(X).

  • x = A\b wird anders berechnet als x = inv(A)*b und wird zur Lösung linearer Gleichungssysteme empfohlen.

Beispiele

alle reduzieren

Berechnen Sie die Inverse einer 3x3-Matrix.

X = [1 0 2; -1 5 0; 0 3 -9]
X = 3×3

     1     0     2
    -1     5     0
     0     3    -9

Y = inv(X)
Y = 3×3

    0.8824   -0.1176    0.1961
    0.1765    0.1765    0.0392
    0.0588    0.0588   -0.0980

Prüfen Sie das Ergebnis. Idealerweise generiert Y*X die Identitätsmatrix. Da inv die Matrixinversion mithilfe einer Gleitkommaberechnung ausführt, ist in der Praxis Y*X ungefähr, jedoch nicht exakt gleich der Identitätsmatrix eye(size(X)).

Y*X
ans = 3×3

    1.0000    0.0000   -0.0000
         0    1.0000   -0.0000
         0   -0.0000    1.0000

Untersuchen Sie, warum die Lösung eines linearen Systems durch Invertieren der Matrix mithilfe von inv(A)*b weniger gut ist als die direkte Verwendung des Backslash als Operator, x = A\b.

Erstellen Sie eine Zufallsmatrix A der Ordnung 500, die so aufgebaut ist, dass ihre Konditionszahl, cond(A), 1e10 und ihre Norm, norm(A), 1 ist. Die exakte Lösung x ist ein Zufallsvektor der Länge 500 und auf der rechten Seite steht b = A*x. Daher ist das System linearer Gleichungen zwar schlecht konditioniert, aber konsistent.

n = 500; 
Q = orth(randn(n,n));
d = logspace(0,-10,n);
A = Q*diag(d)*Q';
x = randn(n,1);
b = A*x;

Lösen Sie das lineare System A*x = b, indem Sie die Koeffizientenmatrix A invertieren. Verwenden Sie tic und toc, um Timing-Informationen abzurufen.

tic
y = inv(A)*b; 
t = toc
t = 0.0331

Ermitteln Sie den absoluten Fehler und den Restfehler der Berechnung.

err_inv = norm(y-x)
err_inv = 3.5877e-06
res_inv = norm(A*y-b)
res_inv = 4.0719e-07

Jetzt lösen Sie dasselbe lineare System mithilfe des Backslash (\) als Operator.

tic
z = A\b;
t1 = toc
t1 = 0.0279
err_bs = norm(z-x)
err_bs = 2.3426e-06
res_bs = norm(A*z-b)
res_bs = 2.6245e-15

Die Berechnung mit Backslash ist schneller und weist einen um mehrere Größenordnungen geringeren Restfehler auf. Die Tatsache, dass err_inv und err_bs beide die Größenordnung 1e-6 aufweisen, spiegelt einfach die Konditionszahl der Matrix wider.

Das Verhalten dieses Beispiels ist typisch. Die Verwendung von A\b anstelle von inv(A)*b ist zwei- bis dreimal schneller und generiert Residuen in der Größenordnung der Maschinengenauigkeit relativ zur Größenordnung der Daten.

Eingabeargumente

alle reduzieren

Eingabematrix, angegeben als quadratische Matrix. Wenn X falsch skaliert oder nahezu singulär ist, verliert die Berechnung von inv an numerischer Genauigkeit. Verwenden Sie rcond oder cond, um die Konditionszahl der Matrix zu überprüfen.

Datentypen: single | double
Unterstützung komplexer Zahlen: Ja

Mehr über

alle reduzieren

Matrixinverse

Eine Matrix X ist invertierbar, wenn eine Matrix Y derselben Größe vorliegt, so dass XY=YX=In, wobei In die nxn-Identitätsmatrix ist. Die Matrix Y wird die Inverse von X genannt.

Eine Matrix ohne Inverse ist singulär. Eine quadratische Matrix ist nur dann singulär, wenn ihre Determinante exakt null ist.

Tipps

  • Es ist nur selten erforderlich, die explizite Inverse einer Matrix zu bilden. Häufig wird inv falsch verwendet, wenn das System linearer Gleichungen gelöst wird Ax = b. x = inv(A)*b ist eine Möglichkeit, die Gleichung zu lösen. Eine bessere Möglichkeit, sowohl im Hinblick auf die Ausführungszeit als auch auf die numerische Genauigkeit, ist die Verwendung des Backslash-Operators für die Matrix (x = A\b). Auf diese Weise wird die Lösung mithilfe des Gaußschen Eliminationsverfahrens generiert, ohne die Inverse explizit zu bilden. Weitere Informationen dazu finden Sie unter mldivide.

Algorithmen

inv führt eine LU-Zerlegung der Eingabematrix aus (oder eine LDL-Zerlegung, wenn es sich um eine hermitesche Eingabematrix handelt). Anschließend verwendet die Funktion die Ergebnisse, um ein lineares System zu bilden, dessen Lösung die Matrixinverse inv(X) ist. Für dünn besetzte Eingaben erstellt inv(X) eine dünn besetzte Identitätsmatrix und verwendet den Backslash, X\speye(size(X)).

Erweiterte Fähigkeiten

Versionsverlauf

Eingeführt vor R2006a

alle erweitern

Siehe auch

| | |