Solution of system of linear equation in MATLAB - GeeksforGeeks

28 Jul, 2020
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 equationsA = [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 matrixAb = [A b]  % checking the ranksif 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 solutionx_inv = inv(A) * b   % using mid-divide routine of MATLABx_bslash = A \ b   % using linsolve routine of MATLABx_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 errorsEr1 = 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 equationsA = [2 4 6; 3 -2 1; 1 2 3]b = [7; 2; 5]  % creating augmented matrixAb = [A b]   % checking the ranksif 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 errorsEr1 = 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 equationsA = [2 0 1 -1 1; 1 0 1 -1 1; 12 2 8 0 2] b = [2; 1; 12]    % creating augmented matrixAb = [A b]    % checking the ranksif rank(A) == rank(Ab)    display("Solution exists")else    display("Solution does not exist")  end  % checking for unique solutionif 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 equationsA = [6 2 3; 4 -1 2; 2 1 5] b = [0; 0; 0]  % checking for unique solutionif rank(A) == 3    display("Unique solution exists")else    display("Unique solution does not exist")  endif  % trivial solutionx = A \ b  % getting a null set. % this is obvious as A is invertible. % so its null space contains only zero vectorx = 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 equationsA = [1 2 3; 4 5 6; 7 8 9] b = [0; 0; 0]    % checking for unique solutionif rank(A) == 3    display("Unique solution exists")else    display("Unique solution does not exist")  endif  % trivial solution with warningx = 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 systemx = null(A)  % finding the errorsErr = 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

MATLAB
Advanced Computer Subject
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
ML | Linear Regression
System Design Tutorial
Copying Files to and from Docker Containers
Python | Decision tree implementation
Decision Tree Introduction with example
ML | Underfitting and Overfitting
ML | Label Encoding of datasets in Python
Clustering in Machine Learning
Docker - COPY Instruction
KDD Process in Data Mining