Compute the inverse of a 3-by-3 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
Check the results. Ideally,
Y*X produces the identity matrix. Since
inv performs the matrix inversion using floating-point computations, in practice
Y*X is close to, but not exactly equal to, the identity matrix
ans = 3×3 1.0000 0.0000 -0.0000 0 1.0000 -0.0000 0 -0.0000 1.0000
Solve Linear System
Examine why solving a linear system by inverting the matrix using
inv(A)*b is inferior to solving it directly using the backslash operator,
x = A\b.
Create a random matrix
A of order 500 that is constructed so that its condition number,
1e10, and its norm,
1. The exact solution
x is a random vector of length 500, and the right side is
b = A*x. Thus the system of linear equations is badly conditioned, but consistent.
n = 500; Q = orth(randn(n,n)); d = logspace(0,-10,n); A = Q*diag(d)*Q'; x = randn(n,1); b = A*x;
Solve the linear system
A*x = b by inverting the coefficient matrix
toc to get timing information.
tic y = inv(A)*b; t = toc
t = 0.0188
Find the absolute and residual error of the calculation.
err_inv = norm(y-x)
err_inv = 5.3997e-06
res_inv = norm(A*y-b)
res_inv = 4.9027e-07
Now, solve the same linear system using the backslash operator
tic z = A\b; t1 = toc
t1 = 0.0176
err_bs = norm(z-x)
err_bs = 4.2512e-06
res_bs = norm(A*z-b)
res_bs = 3.5452e-15
The backslash calculation is quicker and has less residual error by several orders of magnitude. The fact that
err_bs are both on the order of
1e-6 simply reflects the condition number of the matrix.
The behavior of this example is typical. Using
A\b instead of
inv(A)*b is two to three times faster, and produces residuals on the order of machine accuracy relative to the magnitude of the data.
X is invertible
if there exists a matrix
Y of the same size such
n identity matrix.
Y is called the inverse of
A matrix that has no inverse is singular. A square matrix is singular only when its determinant is exactly zero.
It is seldom necessary to form the explicit inverse of a matrix. A frequent misuse of
invarises when solving the system of linear equations Ax = b. One way to solve the equation is with
x = inv(A)*b. A better way, from the standpoint of both execution time and numerical accuracy, is to use the matrix backslash operator
x = A\b. This produces the solution using Gaussian elimination, without explicitly forming the inverse. See
mldividefor further information.
inv performs an LU decomposition of the
input matrix (or an LDL decomposition if the input matrix is Hermitian).
It then uses the results to form a linear system whose solution is
the matrix inverse
inv(X). For sparse inputs,
a sparse identity matrix and uses backslash,
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
Singular matrix inputs can produce nonfinite values that differ from MATLAB® results.
Run code in the background using MATLAB®
backgroundPool or accelerate code with Parallel Computing Toolbox™
This function fully supports thread-based environments. For more information, see Run MATLAB Functions in Thread-Based Environment.
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.
Xmust be nonsparse.
invfunction prints a warning if
Xis badly scaled or nearly singular. The
invis unable to check for this condition. Take action to avoid this condition.
For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.
This function fully supports distributed arrays. For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Version HistoryIntroduced before R2006a
R2022a: Improved performance when inverting large triangular matrices
inv function shows improved performance when operating on
large triangular matrices.
For example, inverting a 5,000-by-5,000 upper triangular matrix is about 3.7x faster than in the previous release.
function timingInv rng default A = randn(5e3); [~,R] = lu(A); tic Y = inv(R); toc end
The approximate execution times are:
R2021b: 1.1 s
R2022a: 0.3 s
The code was timed on a Windows® 10, Intel®
Xeon® CPU W-2133 @ 3.60 GHz test system by calling the