Skip to content
Related Articles
Get the best out of our app
GFG App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Solution of system of linear equation in MATLAB

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

Let us see how to solve a system of linear equations in MATLAB. Here are the various operators that we will be deploying to execute our task :

  • \ operator : A \ B is the matrix division of A into B, which is roughly the same as INV(A) * B. If A is an NXN matrix and B is a column vector with N components or a matrix with several such columns, then X = A \ B is the solution to the equation A * X = B. A warning message is printed if A is badly scaled or nearly singular. A\EYE(SIZE(A)) produces the inverse of A.
  • linsolve operator : X = LINSOLVE(A, B) solves the linear system A * X = B using LU factorization with partial pivoting when A is square, and QR factorization with column pivoting. A warning is given if A is ill conditioned for square matrices and rank deficient for rectangular matrices.

Example 1 : Non-homogeneous System Ax = b, where A is a square and is invertible. In our example we will consider the following equations :

2x + y - z = 7
x -2y + 5z = -13
3x + 5y - 4z = 18

We will convert these equations into matrices A and b :




% declaring the matrices based on the equations
A = [2 1 -1; 1 -2 5; 3 5 -4]
b = [7; -13; 18]


Output :

A =

   2   1  -1
   1  -2   5
   3   5  -4

b =

    7
  -13
   18

Now we will create an augmented matrix Ab. We will compare the ranks of Ab and A, if the ranks are equal then a unique solution exists.




% creating augmented matrix
Ab = [A b]
  
% checking the ranks
if rank(A) == rank(Ab)
    display("Unique solution exists")
else
    display("Unique solution does not exist")  
end


Output :

Ab =

    2    1   -1    7
    1   -2    5  -13
    3    5   -4   18

Unique solution exists

Now we can find the solution to this system of equations by using 3 methods:

  • conventional way : inv(A) * b
  • using mid-divide routine : A \ b
  • using linsolve routine : linsolve(A, b)




% conventional way of finding solution
x_inv = inv(A) * b 
  
% using mid-divide routine of MATLAB
x_bslash = A \ b 
  
% using linsolve routine of MATLAB
x_linsolve = linsolve(A, b) 


Output :

x_inv =

   2.0000e+00
   8.8818e-16
  -3.0000e+00

x_bslash =

   2.0000e+00
   9.6892e-16
  -3.0000e+00

x_linsolve =

   2.0000e+00
   9.6892e-16
  -3.0000e+00

We can verify the correctness of the solution by finding the error using A * x - b. The error should be 0.




% check for errors
Er1 = A * x_inv - b 
Er2 = A * x_bslash - b 
Er3 = A * x_linsolve - b  


Output :

Er1 =

  -8.8818e-16
  -3.5527e-15
   0.0000e+00

Er2 =

  -1.7764e-15
  -1.7764e-15
   0.0000e+00

Er3 =

  -1.7764e-15
  -1.7764e-15
   0.0000e+00

As all the errors are close to 0, we can say that the solution is correct.

Example 2 : Non-homogeneous system Ax = b, where A is a square and it is not invertible. In our example we will consider the following equations :

2x + 4y + 6z = 7
3x -2y + 1z = 2
1x + 2y + 3z = 5




% declaring the matrices based on the equations
A = [2 4 6; 3 -2 1; 1 2 3]
b = [7; 2; 5]
  
% creating augmented matrix
Ab = [A b]
   
% checking the ranks
if rank(A) == rank(Ab)
    display("Unique solution exists")
else
    display("Unique solution does not exist")  
end
  
% conventional way of finding solution
% gives warning and wrong answer.
x_inv = inv(A) * b 
   
% using mid-divide routine of MATLAB
% this too gives warning and wrong answer. 
x_bslash = A \ b 
  
% check for errors
Er1 = A * x_inv - b 
Er2 = A * x_bslash - b


Output :

A =

   2   4   6
   3  -2   1
   1   2   3

b =

   7
   2
   5

Ab =

   2   4   6   7
   3  -2   1   2
   1   2   3   5

Unique solution does not exist
warning: matrix singular to machine precision
warning: called from
    testing at line 17 column 7
x_inv =

   Inf
   Inf
   Inf

warning: matrix singular to machine precision
warning: called from
    testing at line 21 column 10                                                                                                 
x_bslash =

   -Inf 
   -Inf 
   Inf 

Er1 =

   Inf
   NaN
   Inf

Er2 =

   NaN 
   NaN 
   NaN 

Example 3 : Non-homogeneous system Ax = b where A is not a square. In our example we will consider the following equations :

2a + c - d + e = 2
a + c - d + e = 1
12a + 2b + 8c + 2e = 12




% declaring the matrices based on the equations
A = [2 0 1 -1 1; 1 0 1 -1 1; 12 2 8 0 2] 
b = [2; 1; 12] 
   
% creating augmented matrix
Ab = [A b]
    
% checking the ranks
if rank(A) == rank(Ab)
    display("Solution exists")
else
    display("Solution does not exist")  
end
  
% checking for unique solution
if rank(A) == 5
    display("Unique solution exists")
else
    display("Unique solution does not exist")  
end


Output :

A =

    2    0    1   -1    1
    1    0    1   -1    1
   12    2    8    0    2

b =

    2
    1
   12

Ab =

    2    0    1   -1    1    2
    1    0    1   -1    1    1
   12    2    8    0    2   12

Solution exists
Unique solution does not exist

Example 4 : Homogeneous system Ax = 0 where A is a square and is invertible. In our example we will consider the following equations :

6x + 2y + 3z = 0
4x - y + 2z = 0
2x + y + 5z = 0




% declaring the matrices based on the equations
A = [6 2 3; 4 -1 2; 2 1 5] 
b = [0; 0; 0]
  
% checking for unique solution
if rank(A) == 3
    display("Unique solution exists")
else
    display("Unique solution does not exist")  
endif
  
% trivial solution
x = A \ b
  
% getting a null set. 
% this is obvious as A is invertible. 
% so its null space contains only zero vector
x = null(A)


Output :

A =

   6   2   3
   4  -1   2
   2   1   5

b =

   0
   0
   0

Unique solution exists
x =

   0
   0
   0

x = [](3x0)

Example 5 : Homogeneous system Ax = 0 where A is a square and is not invertible. In our example we will consider the following equations :

1x + 2y + 3z = 0
4x + 5y + 6z = 0
7x + 8y + 9z = 0




% declaring the matrices based on the equations
A = [1 2 3; 4 5 6; 7 8 9] 
b = [0; 0; 0]  
  
% checking for unique solution
if rank(A) == 3
    display("Unique solution exists")
else
    display("Unique solution does not exist")  
endif
  
% trivial solution with warning
x = A \ b
  
% this will return a set containing 
% only one basis vector  of null space of A
% the null space of A is spanned by this vector
% hence this vector or its scalar multiple 
% is the solution of the given homogeneous system
x = null(A)
  
% finding the errors
Err = A*x - b


Output :

A =

   1   2   3
   4   5   6
   7   8   9

b =

   0
   0
   0

Unique solution does not exist
warning: matrix singular to machine precision, rcond = 1.54198e-18
warning: called from
    testing at line 13 column 3
x =

   0
   0
   0

x =

   0.40825
  -0.81650
   0.40825
                                                                                                 
Err =

  -1.3323e-15
  -4.4409e-16
   4.4409e-16

My Personal Notes arrow_drop_up
Last Updated : 28 Jul, 2020
Like Article
Save Article
Similar Reads