How to use matlab to solve system of equations

linsolve

Solve linear equations in matrix form

Show

Syntax

Description

example

X = linsolve(A,B) solves the matrix equation AX = B, where B is a column vector.

example

[X,R] = linsolve(A,B) also returns the reciprocal of the condition number of A if A is a square matrix. Otherwise, linsolve returns the rank of A.

Examples

collapse all

Solve Linear Equations in Matrix Form

Solve this system of linear equations in matrix form by using linsolve.

[211 −11−1123][xyz]=[23 −10]

A = [ 2 1  1;
     -1 1 -1;
      1 2  3];
B = [2; 3; -10];
X = linsolve(A,B)

From X, x = 3, y = 1 and z = –5.

Compute Condition Number of Square Matrix

Compute the reciprocal of the condition number of the square coefficient matrix by using two output arguments.

syms a x y z
A = [a 0 0; 0 a 0; 0 0 1];
B = [x; y; z];
[X, R] = linsolve(A, B)

X =
 x/a
 y/a
   z
 
R =
1/(max(abs(a), 1)*max(1/abs(a), 1))

Compute Rank of Nonsquare Matrix

If the coefficient matrix is rectangular, linsolve returns the rank of the coefficient matrix as the second output argument. Show this behavior.

syms a b x y
A = [a 0 1; 1 b 0];
B = [x; y];
[X, R] = linsolve(A, B)

Warning: Solution is not unique because the system is rank-deficient.
  In sym.linsolve at 67 
X =
              x/a
 -(x - a*y)/(a*b)
                0
R =
2

Input Arguments

collapse all

A — Coefficient matrix symbolic matrix

Coefficient matrix, specified as a symbolic matrix.

B — Right side of equations symbolic vector | symbolic matrix

Right side of equations, specified as a symbolic vector or matrix.

Output Arguments

collapse all

X — Solution symbolic vector | symbolic matrix

Solution, returned as a symbolic vector or matrix.

R — Reciprocal condition number or rank symbolic number | symbolic expression

Reciprocal condition number or rank, returned as a symbolic number of expression. If A is a square matrix, linsolve returns the condition number of A. Otherwise, linsolve returns the rank of A.

More About

collapse all

Matrix Representation of System of Linear Equations

A system of linear equations is as follows.

a11x1+a12x2+…+a1nxn= b1a21x1+a22x2+…+a2nxn=b2⋯am1 x1+am2x2+…+amnxn=bm

This system can be represented as the matrix equation A ⋅x→=b→, where A is the coefficient matrix.

b→ is the vector containing the right sides of equations.

Tips

  • If the solution is not unique, linsolve issues a warning, chooses one solution, and returns it.

  • If the system does not have a solution, linsolve issues a warning and returns X with all elements set to Inf.

  • Calling linsolve for numeric matrices that are not symbolic objects invokes the MATLAB® linsolve function. This function accepts real arguments only. If your system of equations uses complex numbers, use sym to convert at least one matrix to a symbolic matrix, and then call linsolve.

Version History

Introduced in R2012b

How to use matlab to solve system of equations

mldivide, \

Solve systems of linear equations Ax = B for x

Syntax

Description

example

x = A\B solves the system of linear equations A*x = B. The matrices A and B must have the same number of rows. MATLAB® displays a warning message if A is badly scaled or nearly singular, but performs the calculation regardless.

  • If A is a scalar, then A\B is equivalent to A.\B.

  • If A is a square n-by-n matrix and B is a matrix with n rows, then x = A\B is a solution to the equation A*x = B, if it exists.

  • If A is a rectangular m-by-n matrix with m ~= n, and B is a matrix with m rows, then A\B returns a least-squares solution to the system of equations A*x= B.

x = mldivide(A,B) is an alternative way to execute x = A\B, but is rarely used. It enables operator overloading for classes.

Examples

collapse all

System of Equations

Solve a simple system of linear equations, A*x = B.

A = magic(3);
B = [15; 15; 15];
x = A\B

x = 3×1

    1.0000
    1.0000
    1.0000

Linear System with Singular Matrix

Solve a linear system of equations A*x = b involving a singular matrix, A.

A = magic(4);
b = [34; 34; 34; 34];
x = A\b

Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND =  1.306145e-17.

x = 4×1

    1.5000
    2.5000
   -0.5000
    0.5000

When rcond is between 0 and eps, MATLAB® issues a nearly singular warning, but proceeds with the calculation. When working with ill-conditioned matrices, an unreliable solution can result even though the residual (b-A*x) is relatively small. In this particular example, the norm of the residual is zero, and an exact solution is obtained, although rcond is small.

When rcond is equal to 0, the singular warning appears.

A = [1 0; 0 0];
b = [1; 1];
x = A\b

Warning: Matrix is singular to working precision.

In this case, division by zero leads to computations with Inf and/or NaN, making the computed result unreliable.

Least-Squares Solution of Underdetermined System

Solve a system of linear equations, A*x = b.

A = [1 2 0; 0 4 3];
b = [8; 18];
x = A\b

Linear System with Sparse Matrix

Solve a simple system of linear equations using sparse matrices.

Consider the matrix equation A*x = B.

A = sparse([0 2 0 1 0; 4 -1 -1 0 0; 0 0 0 3 -6; -2 0 0 0 2; 0 0 4 2 0]);
B = sparse([8; -1; -18; 8; 20]);
x = A\B

x = 
   (1,1)       1.0000
   (2,1)       2.0000
   (3,1)       3.0000
   (4,1)       4.0000
   (5,1)       5.0000

Input Arguments

collapse all

A, B — Operands vectors | full matrices | sparse matrices

Operands, specified as vectors, full matrices, or sparse matrices. A and B must have the same number of rows.

  • If A or B has an integer data type, the other input must be scalar. Operands with an integer data type cannot be complex.

Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
Complex Number Support: Yes

Output Arguments

collapse all

x — Solution vector | full matrix | sparse matrix

Solution, returned as a vector, full matrix, or sparse matrix. If A is an m-by-n matrix and B is an m-by-p matrix, then x is an n-by-p matrix, including the case when p==1.

If A has full storage, x is also full. If A is sparse, then x has the same storage as B.

Tips

  • The operators / and \ are related to each other by the equation B/A = (A'\B')'.

  • If A is a square matrix, then A\B is roughly equal to inv(A)*B, but MATLAB processes A\B differently and more robustly.

  • If the rank of A is less than the number of columns in A, then x = A\B is not necessarily the minimum norm solution. You can compute the minimum norm least-squares solution using x = lsqminnorm(A,B) or x = pinv(A)*B.

  • Use decomposition objects to efficiently solve a linear system multiple times with different right-hand sides. decomposition objects are well-suited to solving problems that require repeated solutions, since the decomposition of the coefficient matrix does not need to be performed multiple times.

Algorithms

collapse all

The versatility of mldivide in solving linear systems stems from its ability to take advantage of symmetries in the problem by dispatching to an appropriate solver. This approach aims to minimize computation time. The first distinction the function makes is between full (also called “dense”) and sparse input arrays.

Algorithm for Full Inputs

The flow chart below shows the algorithm path when inputs A and B are full.

How to use matlab to solve system of equations

Algorithm for Sparse Inputs

If A is full and B is sparse then mldivide converts B to a full matrix and uses the full algorithm path (above) to compute a solution with full storage. If A is sparse, the storage of the solution x is the same as that of B and mldivide follows the algorithm path for sparse inputs, shown below.

How to use matlab to solve system of equations

References

[1] Gilbert, John R., and Tim Peierls. “Sparse Partial Pivoting in Time Proportional to Arithmetic Operations.” SIAM Journal on Scientific and Statistical Computing 9, no. 5 (September 1988): 862–874. https://doi.org/10.1137/0909058.

[2] Anderson, E., ed. LAPACK Users’ Guide. 3rd ed. Software, Environments, Tools. Philadelphia: Society for Industrial and Applied Mathematics, 1999. https://doi.org/10.1137/1.9780898719604.

[3] Davis, Timothy A. "Algorithm 832: UMFPACK V4.3 – an unsymmetric-pattern multifrontal method." ACM Transactions on Mathematical Software 30, no. 2 (June 2004): 196–199. https://doi.org/10.1145/992200.992206.

[4] Duff, Iain S. “MA57---a Code for the Solution of Sparse Symmetric Definite and Indefinite Systems.” ACM Transactions on Mathematical Software 30, no. 2 (June 2004): 118–144. https://doi.org/10.1145/992200.992202.

[5] Davis, Timothy A., John R. Gilbert, Stefan I. Larimore, and Esmond G. Ng. “Algorithm 836: COLAMD, a Column Approximate Minimum Degree Ordering Algorithm.” ACM Transactions on Mathematical Software 30, no. 3 (September 2004): 377–380. https://doi.org/10.1145/1024074.1024080.

[6] Amestoy, Patrick R., Timothy A. Davis, and Iain S. Duff. “Algorithm 837: AMD, an Approximate Minimum Degree Ordering Algorithm.” ACM Transactions on Mathematical Software 30, no. 3 (September 2004): 381–388. https://doi.org/10.1145/1024074.1024081.

[7] Chen, Yanqing, Timothy A. Davis, William W. Hager, and Sivasankaran Rajamanickam. “Algorithm 887: CHOLMOD, Supernodal Sparse Cholesky Factorization and Update/Downdate.” ACM Transactions on Mathematical Software 35, no. 3 (October 2008): 1–14. https://doi.org/10.1145/1391989.1391995.

[8] Davis, Timothy A. “Algorithm 915, SuiteSparseQR: Multifrontal Multithreaded Rank-Revealing Sparse QR Factorization.” ACM Transactions on Mathematical Software 38, no. 1 (November 2011): 1–22. https://doi.org/10.1145/2049662.2049670.

Extended Capabilities

Tall Arrays Calculate with arrays that have more rows than fit in memory.

This function supports tall arrays with the limitation:

For the syntax Z = X\Y, the array X must be a scalar or a tall matrix with the same number of rows as Y.

For more information, see Tall Arrays for Out-of-Memory Data.

C/C++ Code Generation Generate C and C++ code using MATLAB® Coder™.

Usage notes and limitations:

  • For sparse matrix inputs, the language standard must be C99 or later.

GPU Code Generation Generate CUDA® code for NVIDIA® GPUs using GPU Coder™.

Usage notes and limitations:

  • For sparse matrix inputs, the language standard must be C99 or later.

Thread-Based Environment Run code in the background using MATLAB® backgroundPool or accelerate code with Parallel Computing Toolbox™ ThreadPool.

This function fully supports thread-based environments. For more information, see Run MATLAB Functions in Thread-Based Environment.

GPU Arrays Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.

Usage notes and limitations:

  • If A is rectangular, then it must also be nonsparse.

  • The MATLAB mldivide function prints a warning if A is badly scaled, nearly singular, or rank deficient. The gpuArray mldivide is unable to check for this condition. Take action to avoid this condition.

  • 64-bit integers are not supported.

For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).

Distributed Arrays Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.

Usage notes and limitations:

  • The MATLAB mldivide function prints a warning if A is badly scaled, nearly singular, or rank deficient. The distributed array mldivide is unable to check for this condition. Take action to avoid this condition.

For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).

Version History

Introduced before R2006a

expand all

R2022b: Improved performance with small matrices

The mldivide function shows improved performance when solving linear systems A*x = b with a small coefficient matrix A. The performance improvement applies to real matrices that are 16-by-16 or smaller, and complex matrices that are 8-by-8 or smaller.

For example, this code solves a linear system specified by a real 12-by-12 matrix. The code is about 1.7x faster than in the previous release.

function mldividePerf
A = rand(12);
for k = 1:1e5
    x = A\A;
end
end

The approximate execution times are:

R2022a: 0.72 s

R2022b: 0.42 s

The code was timed on a Windows® 10, Intel® Xeon® CPU W-2133 @ 3.60 GHz test system using the timeit function:

R2022a: LDL factorization no longer used for full matrices

The LDL factorization is no longer used for full matrices that are Hermitian indefinite. Instead, the LU factorization is used for these matrices.

Can we solve equations in MATLAB?

Symbolic Math Toolbox™ offers both symbolic and numeric equation solvers. This topic shows you how to solve an equation symbolically using the symbolic solver solve . To compare symbolic and numeric solvers, see Select Numeric or Symbolic Solver.

What is are the command used in MATLAB to solve system of linear equations?

Solve System of Linear Equations Using solve syms x y z eqn1 = 2*x + y + z == 2; eqn2 = -x + y - z == 3; eqn3 = x + 2*y + 3*z == -10; Solve the system of equations using solve . The inputs to solve are a vector of equations, and a vector of variables to solve the equations for.

What is the best way to solve linear systems in MATLAB?

mldivide is the recommended way to solve most linear systems of equations in MATLAB®.