Please include matlab code comments and comments on results Write a MATLAB scrip
ID: 3348551 • Letter: P
Question
Please include matlab code comments and comments on results
Write a MATLAB script to perform the Gauss-Seidel method for the following A and b: ?3.1-1 21 3 5.1 2 11 45.1 9.2 3.1 Use an initial guess of a [0, 0,0 with a stopping criterion of s 10-6, and perform Gauss-Seidel without relaxation, with SOR, and with under relaxation. Commen 5 bonus points: Modify your script to be able to implement the Jacobi method with relaxation based on a variable at the beginning of the script; that is, if the variable has one value, Ga if the variable has another value, Jacobi will be used. Do not have one entire section for Gauss-Seidel/Jacobi at the top and then another entire section for Jacobi/Gauss-Seidel at the bottom. For relaxation, t should t on your results. uss-Seidel will be used, anc oecur on the entire a vector at the end of the iteration.Explanation / Answer
1st Function
%%Matlab function for Gauss Siedel Method
function [x1,x2,x3,imax]=Gauss_Siedel3(A_matrix,b_matrix,Relax_coeff,conv_es)
%A_matrix is the Coefficient Marix A,b_matrix is the Result Matrix b,
%Relax_coeff is the Relaxation Coefficient and conv_es is stopping
%criterion
it=1000; %Maximum Iteration number
%%Gauss Siedel Method
x1=0;x2=0;x3=0; %Initialization of x
%Iteration for Gauss Siedel
for i=1:it
x11=Relax_coeff*((b_matrix(1)-A_matrix(1,2)*x2-A_matrix(1,3)*x3)/A_matrix(1,1))+((1-Relax_coeff)*x1);
cc1=(abs((x11-x1)/x1));
x1=x11;
x22=Relax_coeff*((b_matrix(2)-A_matrix(2,1)*x1-A_matrix(2,3)*x3)/A_matrix(2,2))+((1-Relax_coeff)*x2);
cc2=(abs((x22-x2)/x2));
x2=x22;
x33=Relax_coeff*((b_matrix(3)-A_matrix(3,1)*x1-A_matrix(3,2)*x3)/A_matrix(3,3))+((1-Relax_coeff)*x3);
cc3=(abs((x33-x3)/x3));
x3=x33;
cc=(cc1+cc2+cc3)/3;
%If convergence criterion obtained then break the loop
if cc<=conv_es
break
end
end
%Printing the result
fprintf(' The result using Gauss Siedel for relaxation coefficient = %f is ',Relax_coeff);
fprintf(' x1=%f, x2=%f, x3=%f ',x1,x2,x3);
imax=i;
end
2nd Function
%%Matlab Function for Jacobi Method
function [x1,x2,x3,imax]=jacobi3(A_matrix,b_matrix,Relax_coeff,conv_es)
%A_matrix is the Coefficient Marix A,b_matrix is the Result Matrix b,
%Relax_coeff is the Relaxation Coefficient and conv_es is stopping
%criterion
it=1000; %Maximum Iteration number
%%Gauss Siedel Method
x1=0;x2=0;x3=0; %Initialization of x
%Iteration for Gauss Siedel
for i=1:it
x11=Relax_coeff*((b_matrix(1)-A_matrix(1,2)*x2-A_matrix(1,3)*x3)/A_matrix(1,1))+((1-Relax_coeff)*x1);
cc1=(abs((x11-x1)/x1));
x22=Relax_coeff*((b_matrix(2)-A_matrix(2,1)*x1-A_matrix(2,3)*x3)/A_matrix(2,2))+((1-Relax_coeff)*x2);
cc2=(abs((x22-x2)/x2));
x33=Relax_coeff*((b_matrix(3)-A_matrix(3,1)*x1-A_matrix(3,2)*x3)/A_matrix(3,3))+((1-Relax_coeff)*x3);
cc3=(abs((x33-x3)/x3));
cc=(cc1+cc2+cc3)/3;
x1=x11;x2=x22;x3=x33;
%If convergence criterion obtained then break the loop
if cc<=conv_es
break
end
end
%Printing the result
fprintf(' The result using Jacobi for relaxation coefficient = %f is ',Relax_coeff);
fprintf(' x1=%f, x2=%f, x3=%f ',x1,x2,x3);
imax=i;
end
3rd Function
function [x,y,z,i]=Gauss_Jacobi(A,b,relax_co1,stop_crit,v)
%This function will solve any equation either in Gauss Siedel or in Jacobi
%method for given A b relax_coefficien, stopping criterion and a variable v
%if v is 1 then it will solve using Gauss Siedel method if v is any value
%other than 1 then it will solve using Jacobi method
if v==1
[x,y,z,i]=Gauss_Siedel3(A,b,relax_co1,stop_crit);
fprintf(' Result for Gauss_Siedel and it coversge after %d iteration ',i)
else
[x,y,z,i]=jacobi3(A,b,relax_co1,stop_crit);
fprintf(' Result for Jacobi and it coversge after %d iteration ',i)
end
Matlab code and result.
%Matlab code for finding solution using Gauss Siedel method Jacobi method
%for running this code it will call three function Gauss_Siedel3.m,
%jacobi3.m and Gauss_Jacobi.m
clear all
close all
%The coefficient matrix A
A=[3.1 -1 2;-3 5.1 2;1 4 5.1];
%The result matrix B
b=[9.2 -9.1 3.1];
%Stopping Criterion
stop_crit=10^-6;
%Relaxation coefficients
relax_co1=1.1; %for SOR
relax_co2=.89; %for Under Relaxation
relax_co3=1; %for without relaxation
%Result for diffrent relaxation
%It will call Gauss_Siedel3.m function which should be kept in same folder
%along with the code
[x1,y1,z1,i1]=Gauss_Siedel3(A,b,relax_co1,stop_crit);
fprintf(' Result for SOR and it coversge after %d iteration ',i1)
[x2,y2,z2,i2]=Gauss_Siedel3(A,b,relax_co2,stop_crit);
fprintf(' Result for Under relaxation and it coversge after %d iteration ',i2)
[x3,y3,z3,i3]=Gauss_Siedel3(A,b,relax_co3,stop_crit);
fprintf(' Result for without relaxation and it coversge after %d iteration ',i3)
%For answering second part
v=1;%variable value
Gauss_Jacobi(A,b,relax_co2,stop_crit,v);
v=2;%variable value
Gauss_Jacobi(A,b,relax_co2,stop_crit,v);
Result
The result using Gauss Siedel for relaxation coefficient = 1.100000 is
x1=2.935126,
x2=-0.064874,
x3=0.018118
Result for SOR and it coversge after 105 iteration
The result using Gauss Siedel for relaxation coefficient = 0.890000 is
x1=2.935126,
x2=-0.064874,
x3=0.018118
Result for Under relaxation and it coversge after 25 iteration
The result using Gauss Siedel for relaxation coefficient = 1.000000 is
x1=2.935126,
x2=-0.064874,
x3=0.018118
Result for without relaxation and it coversge after 40 iteration
The result using Gauss Siedel for relaxation coefficient = 0.890000 is
x1=2.935126,
x2=-0.064874,
x3=0.018118
Result for Gauss_Siedel and it coversge after 25 iteration
The result using Jacobi for relaxation coefficient = 0.890000 is
x1=2.935126,
x2=-0.064874,
x3=0.018118
Result for Jacobi and it coversge after 51 iteration
Comment
From the results we can say that for Gauss_Siedel method it will converge faster than Jacobi Method, and for Gauss_Siedel method in under relaxation case it converge faster than SOR and without relaxation case. All three function and code should be kept in same folder.