Scilab/C4/Linear-equations-Iterative-Methods/English
Title of script: Solving System of Linear Equations using Iterative Methods
Author: Shamika
Keywords: System of linear equations, Iterative Methods
|
|
---|---|
Slide 1 | Dear friends, welcome to the Spoken Tutorial on “Solving System of Linear Equations using Iterative Methods” |
Slide 2 -Learning Objective Slide | At the end of this tutorial, you will learn how to:
|
Slide 3-System Requirement slide | To record this tutorial, I am using
|
Slide 4- Prerequisites slide | Before practising this tutorial, a learner should have basic knowledge of
|
Slide 5- Jacobi Method | * The first iterative method we will be studying is Jacobi method.
|
Slide 6- Example | Let us solve this example using Jacobi Method |
Switch to Scilab and open JacobiIteration_final.sci | Let us look at the code for Jacobi Method. |
Highlight
format('e',20) |
We use format method to specify the format of the displayed answers on the Scilab console.
And twenty specifies the number of digits to be displayed. |
Highlight
A=input("Enter the coeffiecient matrix of nxn: ") b=input("Enter the right-hand side matrix nx1: ") x0=input("Initial approximation nx1: ") MaxIter=input("Maximum no. of iterations: ") tol=input("Enter the convergence tolerance :")//stop if norm change in x < tol |
Then we use input function to get the values for
|
Highlight
[m, n] = size( A ) |
Then we use size function to check if A matrix is a square matrix.
|
Highlight
for i=1:1:m sum=0; for j=1:1:m sum=sum+abs(A(i,j)); end if 2*abs(A(i,i))<sum then error("the matrix is not diagonally dominant") end end |
|
Highlight
function [ solution ] = JacobiIteration( A, b, x0, MaxIter, tol ) |
Then we define the function Jacobi Iteration with input arguments
A, b , x zero, maximum iteration and tolerance level.
|
Highlight
if ( length(x0) ~= n ) error( "Sizes of input matrix and input vector do not match" ) end |
We check if the size of A matrix and initial values matrix are compatible with each other. |
Highlight
xk = x0 for k = 1 : 1 : MaxIter for i = 1 : n xkp1( i ) = (b(i) - A(i, 1:i-1)*xk(1:i-1) - A(i, i+1:n)*xk(i+1:n)) / A(i,i) //Computes the jacobian updates end
printf( "iter = %d, Relative Error = %g\n", k, RelativeError ) xk = xkp1
break end end
|
|
Click on Execute and select Save and Execute | Let us save and execute the function. |
Switch to Scilab console | Switch to Scilab console. |
Enter these values on Scilab console for each prompt
Enter the coeffiecient matrix of nxn: [2 1;5 7] |
Let us enter the values at each prompt.
The coefficient matrix A is open square bracket two space one semi colon five space seven close square bracket
|
Type
Enter the right-hand side matrix nx1: [11; 13] |
Then we type open square bracket eleven semicolon thirteen Press Enter. |
Type
Initial approximation nx1: [1;1] |
The initial values matrix is open square bracket one semi colon one close square bracket
Press Enter. |
Type
Maximum no. of iterations: 25 |
The maximum number of iterations is twenty five.
Press Enter. |
Type
Enter the convergence tolerance :0.00001
|
Let the convergence tolerance level be zero point zero zero zero zero one
Press Enter. |
Type:
JacobiIteration( A, b, x0, MaxIter, tol ) |
We call the function by typing
Jacobi Iteration open paranthesis A comma b comma x zero comma M a x I t e r comma t o l close paranthesis Press Enter.
The number of iterations are also shown. |
Slide 7- Gauss Seidel Method | Let us now study Gauss Seidel method.
|
Slide 8- Gauss Seidel | In Jacobi method, for the computation of x of i k plus one, every element of x of i k is used except x of i k plus one
|
Slide 9- Example | Let us solve this example using Gauss Seidel Method |
Switch to Scilab editor and open GaussSeidel.sci | Let us look at the code for Gauss Seidel Method |
Highlight
format('e',20) |
The first line specifies the format of the displayed answer on the console using format function. |
Highlight
A=input("Enter the coeffiecient matrix of nxn: ") b=input("Enter the right-hand side matrix nx1: ") x0=input("Initial approximation nx1: ") MaxIter=input("Maximum no. of iterations: ") tol=input("Enter the convergence tolerance :")//stop if norm change in x < tol |
Then we use input function to get the values of
|
Highlight
function [ solution ] = GaussSeidel( A, b, x0, MaxIter, tol ) |
Then we define the function Gauss Seidel with input arguments A comma b comma x zero comma max iterations and tolerance level and output argument solution
|
Highlight
// Check that the matrix is square [m, n] = size( A ) if ( m ~= n ) error( "The input matrix is not square" ) end
if ( length(x0) ~= n ) error( "Sizes of input matrix and input vector do not match" ) end |
We check if matrix A is square and the sizes of initial vector and matrix A are compatible using size and length function. |
Highlight
xk = x0 xkp1 = zeros( xk ) |
Then we start the iterations.
|
Highlight
for k = 1 : 1 : MaxIter
for i = 1 : n xkp1( i ) = (b(i) - A(i, 1:i-1)*xkp1(1:i-1) - A(i,i+1:n)*xk(i+1:n)) / A(i,i) // x^{k+1} end // Applies the relaxation RelativeError = norm( xkp1 - xk, 'inf' ) / norm( xkp1, 'inf' ) printf( "iter = %d, Relative Error = %g\n", k, RelativeError ) xk = xkp1 if ( RelativeError < tol ) break end end
|
We solve for each equation to get the value of the unknown variable for that equation using x k p one.
|
Click on Execute and select Save and Execute | Let us save and execute the function. |
Switch to Scilab console | Switch to Scilab console |
Type the following on Scilab console:
For first prompt [2 1;5 7] |
For the first prompt, we type matrix A.
Type open square bracket two space one semi colon five space seven close square bracket Press Enter.
|
Second prompt
[11; 13] |
For the next prompt,
type left square bracket eleven semi colon thirteen right square bracket Press Enter. |
For third prompt
[1;1] |
We provide the values of initial value vector by typing
open square bracket one semicolon one close square bracket
|
For fourth prompt
25 |
Then we specify the maximum number of iterations to be twenty five
|
For fifth prompt
0.00001 |
Let us define tolerance level to be zero point zero zero zero zero one
|
Then type:
GaussSeidel( A, b, x0, MaxIter, tol )
|
Finally we call the function by typing
G a u s s S e i d e l open paranthesis A comma b comma x zero comma M a x I t e r comma t o l close paranthesis
|
Slide 13- Solve | Solve this problem on your own using Jacobi and Gauss Seidel methods |
Slide 14- Summary | In this tutorial, we have learnt to:
|
Show Slide 15
Title: About the Spoken Tutorial Project
|
* About the Spoken Tutorial Project
|
Show Slide 16
Title: Spoken Tutorial Workshops The Spoken Tutorial Project Team
|
The Spoken Tutorial Project Team
|
Show Slide 17
Title: Acknowledgement
|
* Spoken Tutorial Project is a part of the Talk to a Teacher project
|
This is Ashwini Patil signing off. Thank you for joining.
|