Difference between revisions of "Scilab/C4/Linear-equations-Iterative-Methods/English"
(Created page with ''''Title of script''': Solving System of Linear Equations using Iterative Methods '''Author: Shamika''' '''Keywords: System of linear equations, Iterative Methods''' {| styl…') |
Nancyvarkey (Talk | contribs) |
||
| (One intermediate revision by the same user not shown) | |||
| Line 7: | Line 7: | ||
| − | {| | + | {|border=1 |
! <center>Visual Cue</center> | ! <center>Visual Cue</center> | ||
! <center>Narration</center> | ! <center>Narration</center> | ||
| Line 13: | Line 13: | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 1 | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 1 | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Dear | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Dear friends, welcome to the Spoken Tutorial on “'''Solving System of Linear Equations using Iterative Methods'''” |
| − | + | ||
| − | + | ||
|- | |- | ||
| Line 21: | Line 19: | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| At the end of this tutorial, you will learn how to: | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| At the end of this tutorial, you will learn how to: | ||
| − | * Solve system of linear equations using iterative methods | + | * Solve system of '''linear equations''' using '''iterative methods''' |
| − | * Develop Scilab code to solve linear equations | + | * Develop '''Scilab code''' to solve '''linear equations''' |
| − | + | ||
| − | + | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 3-System Requirement slide | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 3-System Requirement slide | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| To record this tutorial, I am using '''Ubuntu 12.04''' as the operating system | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| To record this tutorial, I am using |
| + | *'''Ubuntu 12.04''' as the operating system | ||
| + | *and '''Scilab 5.3.3''' version | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 4- Prerequisites slide | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 4- Prerequisites slide | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Before practising this tutorial, a learner should have basic knowledge of '''Scilab and Solving Linear Equations''' | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Before practising this tutorial, a learner should have basic knowledge of |
| + | *'''Scilab ''' | ||
| + | *and '''Solving Linear Equations''' | ||
| − | For Scilab, please refer to the relevant tutorials available on the '''Spoken Tutorial '''website. | + | For '''Scilab''', please refer to the relevant tutorials available on the '''Spoken Tutorial '''website. |
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 5- Jacobi Method | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 5- Jacobi Method | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| * The first iterative method we will be studying is '''Jacobi method.''' | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| * The first '''iterative method''' we will be studying is '''Jacobi method.''' |
* Given a '''system of linear equations, with n equations and n unknowns''' | * Given a '''system of linear equations, with n equations and n unknowns''' | ||
| − | * We rewrite the equations such | + | * We rewrite the equations such that '''x of i k plus one is equal to b i minus summation of a i j x j k from j equal to one to n divided by a i i''' where '''i''' is from '''one to n''' |
* We assume values for each''' x of i''' | * We assume values for each''' x of i''' | ||
* Then we substitute the values in the equations obtained in the previous step. | * Then we substitute the values in the equations obtained in the previous step. | ||
* We continue the iteration until the solution converges. | * We continue the iteration until the solution converges. | ||
| − | |||
| − | |||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 6- Example | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 6- Example | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| Let us solve this example using '''Jacobi Method''' |
| − | + | ||
| − | + | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Switch to Scilab and open JacobiIteration_final.sci | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Switch to Scilab and open JacobiIteration_final.sci | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Let us look at the code for '''Jacobi Method'''. |
| − | + | ||
| − | + | ||
|- | |- | ||
| Line 64: | Line 58: | ||
'''format('e',20)''' | '''format('e',20)''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|We use '''format''' method to specify the format of the displayed answers on the '''Scilab console'''. |
| − | + | ||
| + | Here '''e '''denotes the answer should be in '''scientific notation'''. | ||
| + | |||
| + | And '''twenty''' specifies the number of digits to be displayed. | ||
|- | |- | ||
| Line 81: | Line 77: | ||
'''tol=input("Enter the convergence tolerance :")//stop if norm <nowiki>change in x < tol</nowiki>''' | '''tol=input("Enter the convergence tolerance :")//stop if norm <nowiki>change in x < tol</nowiki>''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Then we use '''input''' function to get the values for |
| − | + | *'''the matrices coefficient matrix''', | |
| − | + | *'''right hand side matrix''', | |
| + | *'''initial values matrix''', | ||
| + | *'''maximum number of iteration''' and | ||
| + | *'''convergence tolerance''' | ||
|- | |- | ||
| Line 89: | Line 88: | ||
'''<nowiki>[m, n] = size( A )</nowiki>''' | '''<nowiki>[m, n] = size( A )</nowiki>''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Then we use''' size '''function to check if '''A matrix''' is a '''square matrix.''' |
| − | + | ||
| + | If it isn't, we use '''error function''' to display an error. | ||
|- | |- | ||
| Line 114: | Line 113: | ||
'''end''' | '''end''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| * We then check if matrix A is '''diagonally dominant'''. | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| |
| − | * The first half calculates the sum of each row of the matrix. | + | * We then check if '''matrix A''' is '''diagonally dominant'''. |
| − | * Then it checks if | + | * The first half calculates the sum of each row of the '''matrix'''. |
| + | * Then it checks if twice the product of the '''diagonal element''' is greater than the sum of the elements of that row. | ||
* If it isn't, an error is displayed using '''error function'''. | * If it isn't, an error is displayed using '''error function'''. | ||
| − | |||
| − | |||
|- | |- | ||
| Line 125: | Line 123: | ||
'''<nowiki>function [ solution ] = JacobiIteration( A, b, x0, MaxIter, tol )</nowiki>''' | '''<nowiki>function [ solution ] = JacobiIteration( A, b, x0, MaxIter, tol )</nowiki>''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Then we define the function '''Jacobi Iteration''' with input arguments |
| − | + | '''A, b , x zero,''' | |
| + | ''' maximum iteration and tolerance level'''. | ||
| + | |||
| + | Here '''x zero''' is the '''initial values matrix'''. | ||
|- | |- | ||
| Line 138: | Line 139: | ||
'''end''' | '''end''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|We check if the size of '''A matrix''' and '''initial values matrix''' are compatible with each other. |
| − | + | ||
| − | + | ||
|- | |- | ||
| Line 176: | Line 175: | ||
'''endfunction''' | '''endfunction''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| * We calculate the value for''' x k p one''' and then check if the '''relative error is lesser than tolerance level.''' | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| |
| + | * We calculate the value for''' x k p one''' and then check if the '''relative error''' is lesser than '''tolerance level.''' | ||
* If it is lesser than '''tolerance level''', we break the iteration and the solution is returned. | * If it is lesser than '''tolerance level''', we break the iteration and the solution is returned. | ||
| − | * Finally we | + | * Finally we end the function. |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | |||
| + | |||
| + | |- | ||
| + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Click on Execute and select Save and Execute | ||
| + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Let us save and execute the function. | ||
| + | |||
| + | |- | ||
| + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Switch to Scilab console | ||
| + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Switch to '''Scilab console'''. | ||
|- | |- | ||
| Line 198: | Line 201: | ||
Enter the coeffiecient matrix of nxn: '''<nowiki>[2 1;5 7]</nowiki>''' | Enter the coeffiecient matrix of nxn: '''<nowiki>[2 1;5 7]</nowiki>''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|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''' | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| + | Press '''Enter'''. | ||
|- | |- | ||
| Line 212: | Line 212: | ||
Enter the right-hand side matrix nx1: '''<nowiki>[11; 13]</nowiki>''' | Enter the right-hand side matrix nx1: '''<nowiki>[11; 13]</nowiki>''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| |
| − | + | Then we type '''open square bracket eleven semicolon thirteen''' | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| + | Press '''Enter'''. | ||
|- | |- | ||
| Line 224: | Line 221: | ||
Initial approximation nx1: '''<nowiki>[1;1]</nowiki>''' | Initial approximation nx1: '''<nowiki>[1;1]</nowiki>''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| The '''initial values matrix''' is '''open square bracket one semi colon one close square bracket''' |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| + | Press '''Enter'''. | ||
|- | |- | ||
| Line 236: | Line 229: | ||
Maximum no. of iterations: '''25''' | Maximum no. of iterations: '''25''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|The '''maximum number of iterations''' is twenty five. |
| − | + | ||
| − | + | ||
| + | Press '''Enter'''. | ||
|- | |- | ||
| Line 248: | Line 240: | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Let the '''convergence tolerance level''' be''' zero point zero zero zero zero one''' |
| − | + | ||
| − | + | ||
| + | Press '''Enter'''. | ||
|- | |- | ||
| Line 257: | Line 248: | ||
'''JacobiIteration( A, b, x0, MaxIter, tol )''' | '''JacobiIteration( A, b, x0, MaxIter, tol )''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|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 values for '''x one''' and '''x two''' are shown on the '''console'''. | ||
| + | |||
| + | The number of iterations are also shown. | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 7- Gauss Seidel Method | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 7- Gauss Seidel Method | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Let us now study '''Gauss Seidel method'''. |
| − | * Given a '''system of linear equations, with n equations and n | + | * Given a '''system of linear equations''', with '''n equations''' and '''n unknowns''' |
| − | * We rewrite the equations for each unknown | + | * We rewrite the equations for each unknown |
| − | * Then we divide this ''' | + | **by subtracting the other variables and their coefficients |
| − | + | **from the corresponding right hand side element. | |
| + | * Then we divide this by the '''coefficient a i i'' of the '''unknown variable''' for that variable. | ||
| + | This is done for every given equation. | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 8- Gauss Seidel | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 8- Gauss Seidel | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|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''' |
| − | + | ||
| + | In '''Gauss Seidel method''', we over write the value of '''x of i k''' with '''x of i k plus one''' | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 9- Example | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 9- Example | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Let us solve this example using '''Gauss Seidel Method''' |
| − | + | ||
| − | + | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Switch to Scilab editor and open GaussSeidel.sci | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Switch to Scilab editor and open GaussSeidel.sci | ||
| − | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Let us look at the code for '''Gauss Seidel Method''' | |
| − | + | ||
| − | + | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | |
| − | + | ||
| − | + | ||
|- | |- | ||
| Line 299: | Line 289: | ||
'''format('e',20)''' | '''format('e',20)''' | ||
| − | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|The first line specifies the '''format''' of the displayed answer on the '''console''' using '''format function'''. | |
| − | + | ||
| − | + | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | |
| − | + | ||
| − | + | ||
|- | |- | ||
| Line 318: | Line 303: | ||
'''tol=input("Enter the convergence <nowiki>tolerance :")//stop if norm change in x < tol</nowiki>''' | '''tol=input("Enter the convergence <nowiki>tolerance :")//stop if norm change in x < tol</nowiki>''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Then we use '''input function''' to get the values of |
| − | + | *'''coefficient matrix''', | |
| − | + | *'''right hand side matrix''', | |
| + | *'''initial values of the variables matrix''', | ||
| + | *'''maximum number of iterations''' and | ||
| + | *'''tolerance level''' | ||
|- | |- | ||
| Line 326: | Line 314: | ||
'''<nowiki>function [ solution ] = GaussSeidel( A, b, x0, MaxIter, tol )</nowiki>''' | '''<nowiki>function [ solution ] = GaussSeidel( A, b, x0, MaxIter, tol )</nowiki>''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|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 |
| − | + | ||
| Line 351: | Line 338: | ||
'''end''' | '''end''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|We check if '''matrix A is square''' and the sizes of '''initial vector and matrix A''' are compatible using''' size and length function'''. |
| − | + | ||
| − | + | ||
|- | |- | ||
| Line 361: | Line 346: | ||
'''xkp1 = zeros( xk )''' | '''xkp1 = zeros( xk )''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Then we start the iterations. |
| − | + | ||
| − | + | ||
| + | * We equate the '''initial values vector x zero to x k.''' | ||
| + | * We create a '''matrix of zeros''' with the same size of '''x k''' and call it '''x k p one.''' | ||
|- | |- | ||
| Line 403: | Line 388: | ||
'''endfunction''' | '''endfunction''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|We solve for each equation to get the value of the '''unknown variable''' for that equation using '''x k p one'''. |
* At each iteration, the value of '''x k p one''' gets updated. | * At each iteration, the value of '''x k p one''' gets updated. | ||
| − | * Also, we check if '''relative error is lesser than specified tolerance level'''. | + | * Also, we check if '''relative error''' is lesser than specified '''tolerance level'''. |
| − | * If it is, we | + | * If it is, we break the iteration. |
| − | * Then ''' | + | * Then equate '''x k p one''' to the variable '''solution'''. |
| − | * Finally, we | + | * Finally, we end the function. |
| − | + | ||
| − | + | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Click on Execute and select Save and Execute | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Click on Execute and select Save and Execute | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Let us save and execute the function. |
| − | + | ||
| − | + | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Switch to Scilab console | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Switch to Scilab console | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Switch to '''Scilab console''' |
| − | + | ||
| − | + | ||
|- | |- | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Type the following on Scilab console: | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Type the following on '''Scilab console''': |
For first prompt | For first prompt | ||
'''<nowiki>[2 1;5 7]</nowiki>''' | '''<nowiki>[2 1;5 7]</nowiki>''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|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'''. | ||
| Line 444: | Line 420: | ||
'''<nowiki>[11; 13]</nowiki>''' | '''<nowiki>[11; 13]</nowiki>''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|For the next prompt, |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| + | type | ||
| + | '''left square bracket eleven semi colon thirteen right square bracket''' | ||
| + | Press '''Enter'''. | ||
|- | |- | ||
| Line 456: | Line 431: | ||
'''<nowiki>[1;1]</nowiki>''' | '''<nowiki>[1;1]</nowiki>''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|We provide the values of '''initial value vector '''by typing |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| + | '''open square bracket one semicolon one close square bracket''' | ||
| + | |||
| + | Press '''Enter'''. | ||
|- | |- | ||
| Line 468: | Line 442: | ||
'''25''' | '''25''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Then we specify the''' maximum number of iterations''' to be twenty five |
| − | + | ||
| + | Press '''Enter'''. | ||
|- | |- | ||
| Line 477: | Line 451: | ||
'''0.00001''' | '''0.00001''' | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Let us define '''tolerance level''' to be zero point zero zero zero zero one |
| − | + | ||
| + | Press '''Enter'''. | ||
|- | |- | ||
| Line 489: | Line 463: | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|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''' | ||
| − | + | Press '''Enter'''. | |
| − | + | ||
| − | + | ||
| + | The values of '''x one''' and '''x two '''are displayed. | ||
| + | |||
| + | |||
| + | The number of iterations to solve the same problem are lesser than '''Jacobi method'''. | ||
| + | |||
| + | |- | ||
| + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| Slide 13- Solve | ||
| + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|Solve this problem on your own using '''Jacobi''' and '''Gauss Seidel methods''' | ||
|- | |- | ||
| Line 507: | Line 485: | ||
* Develop '''Scilab code''' for solving system of linear equations | * Develop '''Scilab code''' for solving system of linear equations | ||
| − | * Find the value of the unknown variables of a system of linear equations | + | * Find the value of the '''unknown variables''' of a system of '''linear equations''' |
| − | + | ||
| Line 530: | Line 507: | ||
* If you do not have good bandwidth, you can download and watch it | * If you do not have good bandwidth, you can download and watch it | ||
| − | |||
| − | |||
|- | |- | ||
| Line 554: | Line 529: | ||
* For more details, please write to contact at spoken hyphen tutorial dot org | * For more details, please write to contact at spoken hyphen tutorial dot org | ||
| − | |||
| Line 574: | Line 548: | ||
* It is supported by the National Mission on Education through ICT, MHRD, Government of India | * It is supported by the National Mission on Education through ICT, MHRD, Government of India | ||
* More information on this Mission is available at | * More information on this Mission is available at | ||
| − | * spoken hyphen tutorial dot org slash NMEICT hyphen Intro | + | * '''spoken hyphen tutorial dot org slash NMEICT hyphen Intro''' |
| − | + | ||
|- | |- | ||
| style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:none;padding:0.097cm;"| | ||
| − | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"| | + | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.097cm;"|This is Ashwini Patil signing off. Thank you for joining. |
| − | + | ||
|} | |} | ||
Latest revision as of 22:21, 1 February 2014
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.
|