Your SlideShare is downloading. ×
jacobi method, gauss siedel for solving linear equations
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

jacobi method, gauss siedel for solving linear equations

7,482
views

Published on

mayank awasthi......iiit jabalpur ECE

mayank awasthi......iiit jabalpur ECE

Published in: Education, Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,482
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
135
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. EC 313: Numerical Methods Mayank Awasthi(2006033) MATLAB Assignment – 2 B.Tech 3rd Year(ECE) Pdpm IIITDM, JABALPUR Ques1: Gauss Siedel Method for Solving the Linear Equations: % Implementing Gauss Siedel method % a is matrix whose diagonal elements are non-zero else rearrange it function x = gauss_siedel(a,b,x) n=length(a); l=zeros(n,n); u=zeros(n,n); d=zeros(n,n); id=[1,0,0;0,1,0;0,0,1]; for i=1:n for j=1:n a(i,j)= a(i,j)/a(i,i); %making the diagonal elements 1. % Breaking the matrix as a sum of ( L+U+I ) if i>j l(i,j)=a(i,j); end if i<j u(i,j)=a(i,j); end if i==j d(i,j)=a(i,j); end end end %Implementing Norm of c where c = inverse(I+L)*U norm2(inv2(id+l)*u); if norm2(inv2(id+l)*u)>1 fprintf('Norm of c is greater than 1, Solution will diverge'); return; end for i=1:n b(i,1)=b(i,1)/a(i,i); end % Calculating x using FORWARD DIFFERENCE CONCEPT x=[0;0;0]; for i=1:100 x= forward_subs((l+d),(b-u*x)); m=a*x-b;
  • 2. % Calculating(dis(A*x,b)<1e-6)to stop iteration at the given tolerance temp=0; for j=1:n temp=temp+power(m(j,1),2); end temp=sqrt(temp); if temp<0.0000001 break; end end fprintf('nThe maximum no. of iteration required is %d',i); end MATLAB routine for Inverse of 3x3 matrix : % Calculating Inverse of 3x3 matrix function x = inv2(A) I=[1,0,0;0,1,0;0,0,1]; n=length(A); a21=A(2,1)/A(1,1); for k = 1:n-1 % Elimination Phase for i= k+1:n if A(i,k) ~= 0 lambda = A(i,k)/A(k,k); A(i,k:n) = A(i,k:n) - lambda*A(k,k:n); I(i,k:n)= I(i,k:n) - lambda*I(k,k:n); I(3,1)=I(2,1)*I(3,2)+I(3,1); end end end x1=back_subs(A,I(:,1)); % Backward Substitution x2=back_subs(A,I(:,2)); x3=back_subs(A,I(:,3)); x=[x1,x2,x3]; end MATLAB routine for Norm: % Calculating Norm of matrix function n0= norm2(c) l=length(c); n0=0; for m=1:l for n=1:l n0 = n0 + c(m,n)*c(m,n); end end n0=sqrt(n0); end
  • 3. MATLAB routine for Forward Substitution: % Implementing Forward Substitution function x=forward_subs(A,b) n=length(A); for i = 1:3 t=0; for j = 1:(i-1) t=t+A(i,j)*x(j); end x(i,1)=(b(i,1)-t)/A(i,i); end Part1: Part2: >> a=[1 ,.2 .2;.2, 1, .2;.2, .2, 1] >> a=[1 ,.5 .5;.5, 1, .5;.5, .5, 1] a= a= 1.0000 0.2000 0.2000 1.0000 0.5000 0.5000 0.2000 1.0000 0.2000 0.5000 1.0000 0.5000 0.2000 0.2000 1.0000 0.5000 0.5000 1.0000 >> b=[2;2;2] >> b=[2;2;2] b= b= 2 2 2 2 2 2 >> x=[0;0;0] >> x=[0;0;0] x= x= 0 0 0 0 0 0 >> gauss_siedel(a,b,x) >> gauss_siedel(a,b,x) The maximum no. of iteration required is 8 The maximum no of iteration required is 17 ans = ans = 1.4286 1.0000 1.4286 1.0000 1.4286 1.0000
  • 4. Part3: >> a=[1 ,.9 .9;.9, 1, .9;.9, .9, 1] a= 1.0000 0.9000 0.9000 0.9000 1.0000 0.9000 0.9000 0.9000 1.0000 >> b=[2;2;2] b= 2 2 2 >> x=[0;0;0] x= 0 0 0 >> gauss_siedel(a,b,x) Norm of c is greater than 1, Solution will diverge ans = 0 0 0 ************************************************************************ Spectral radius of C: Spectral radius of C is maximum eigenvalue of C*CT. In this case C=(I+L)-1 * U
  • 5. 1). >> a=[1 ,.2 .2;.2, 1, .2;.2, .2, 1] a= 1.0000 0.2000 0.2000 0.2000 1.0000 0.2000 0.2000 0.2000 1.0000 >> L=[0,0,0;.2,0,0;.2,.2,0] L= 0 0 0 0.2000 0 0 0.2000 0.2000 0 >> I=[1,0,0;0,1,0;0,0,1] I= 1 0 0 0 1 0 0 0 1 >> U=[0,.2,.2;0,0,.2;0,0,0] U= 0 0.2000 0.2000 0 0 0.2000 0 0 0 >> C=inv2(I+L)*U C= 0 0.2000 0.2000 0 -0.0400 0.1600 0 -0.0320 -0.0720 >> lamda=eig(C*C') lamda = 0.0000 0.0181 0.0953 >> SR=max(lamda) SR = Spectral Radius 0.0953
  • 6. 2). >> a=[1 ,.5 .5;.5, 1, .5;.5, .5, 1] a= 1.0000 0.5000 0.5000 0.5000 1.0000 0.5000 0.5000 0.5000 1.0000 >> L=[0,0,0;.5,0,0;.5,.5,0] L= 0 0 0 0.5000 0 0 0.5000 0.5000 0 >> I=[1,0,0;0,1,0;0,0,1] I= 1 0 0 0 1 0 0 0 1 >> U=[0,.5,.5;0,0,.5;0,0,0] U= 0 0.5000 0.5000 0 0 0.5000 0 0 0 >> C=inv2(I+L)*U C= 0 0.5000 0.5000 0 -0.2500 0.2500 0 -0.1250 -0.3750 >> lamda=eig(C*C') lamda = 0.0000 0.1481 0.6332 >> SR=max(lamda) SR = Spectral Radius 0.6332
  • 7. 3). >> a=[1 ,.9 .9;.9, 1, .9;.9, .9, 1] a= 1.0000 0.9000 0.9000 0.9000 1.0000 0.9000 0.9000 0.9000 1.0000 >> L=[0,0,0;.9,0,0;.9,.9,0] L= 0 0 0 0.9000 0 0 0.9000 0.9000 0 >> I=[1,0,0;0,1,0;0,0,1] I= 1 0 0 0 1 0 0 0 1 >> U=[0,.9,.9;0,0,.9;0,0,0] U= 0 0.9000 0.9000 0 0 0.9000 0 0 0 >> C=inv2(I+L)*U C= 0 0.9000 0.9000 0 -0.8100 0.0900 0 -0.0810 -0.8910 >> lamda=eig(C*C') lamda = 0.0000 0.7301 2.3546 >> SR=max(lamda) SR = Spectral Radius 2.3546
  • 8. Steps vs t : Spectral radius vs t :
  • 9. Ques2: Jacobi Method for Solving the Linear Equations: %Implementing Jacobi Method function x = jacobi(A,b,x) I=[1 0 0; 0 1 0; 0 0 1]; c=I-A; %Checking Norm if norm2(c) > 1 fprintf('nNorm is greater than one so it will diverge'); return; end for j=1:50 x=b+(I-A)*x; n=A*x-b; %checking the condition of tolerance to stop the iterations temp=0; for i = 1:3 temp= temp+ power(n(i,1),2); end temp=sqrt(temp); if temp < 0.0001 break; end end fprintf('nThe iteration required is %d',j); end MATLAB routine for Norm: % Calculating Norm of matrix function n0= norm2(c) l=length(c); n0=0; for m=1:l for n=1:l n0 = n0 + c(m,n)*c(m,n); end end n0=sqrt(n0); end
  • 10. Part1: Part2 >> a=[1 ,.2 .2;.2, 1, .2;.2, .2, 1] >> a=[1 ,.5 .5;.5, 1, .5;.5, .5, 1] a= a= 1.0000 0.2000 0.2000 1.0000 0.5000 0.5000 0.2000 1.0000 0.2000 0.5000 1.0000 0.5000 0.2000 0.2000 1.0000 0.5000 0.5000 1.0000 >> b=[2;2;2] >> b=[2;2;2] b= b= 2 2 2 2 2 2 >> x=[0;0;0] >> x=[0;0;0] x= x= 0 0 0 0 0 0 >> jacobi(a,b,x) >> jacobi(a,b,x) The iteration required is 12 Norm is greater than one so it will diverge ans = ans = 1.4285 0 1.4285 0 1.4285 0
  • 11. Part3 : >> a=[1 ,.9 .9;.9, 1, .9;.9, .9, 1] a= 1.0000 0.9000 0.9000 0.9000 1.0000 0.9000 0.9000 0.9000 1.0000 >> b=[2;2;2] b= 2 2 2 >> x=[0;0;0] x= 0 0 0 >> jacobi(a,b,x) Norm is greater than one so it will diverge ans = 0 0 0 From the Data we have calculated we find that Gauss_Siedel Method Diverge more fastly than Jacobi Method.
  • 12. Ques3: Cholesky Method for Solving the Linear Equations: % Implementing Cholesky Method function x = cholesky(A,b,x) n=length(A) l(1,1)=sqrt(A(1,1)); for i=2:n l(i,1)=A(i,1)/l(1,1); end for j=2:(n-1) temp=0; for k=1:j-1 temp=temp+l(j,k)*l(j,k); end l(j,j)= sqrt(A(j,j)-temp); end for j=2:(n-1) for i=j+1:n temp=0; for k=1:j-1 temp=temp+l(i,k)*l(j,k); end l(i,j)=(A(i,j)-temp)/l(j,j); end end temp1=l(n,1)*l(n,1)+l(n,2)*l(n,2); l(n,n)=sqrt(A(n,n)-temp1); y=forward_subs(l,b); %Using Forward Substitution Concept x=back_subs(l',y); end
  • 13. Part1: Part2 >> a=[1 ,.2 .2;.2, 1, .2;.2, .2, 1] >> a=[1 ,.5 .5;.5, 1, .5;.5, .5, 1] a= a= 1.0000 0.2000 0.2000 1.0000 0.5000 0.5000 0.2000 1.0000 0.2000 0.5000 1.0000 0.5000 0.2000 0.2000 1.0000 0.5000 0.5000 1.0000 >> b=[2;2;2] >> b=[2;2;2] b= b= 2 2 2 2 2 2 >> x=[0;0;0] >> x=[0;0;0] x= x= 0 0 0 0 0 0 >> cholesky(a,b,x) >> cholesky(a,b,x) ans = ans = 1.4286 1.0000 1.4286 1.0000 1.4286 1.0000
  • 14. Part3: >> a=[1 ,.9 .9;.9, 1, .9;.9, .9, 1] a= 1.0000 0.9000 0.9000 0.9000 1.0000 0.9000 0.9000 0.9000 1.0000 >> b=[2;2;2] b= 2 2 2 >> x=[0;0;0] x= 0 0 0 >> cholesky(a,b,x) ans = 0.7143 0.7143 0.7143
  • 15. Ques4: Matlab Subroutine to calculate Condition Number: % Calculating Condition Number function [] = cond(a,b,b1); x0=[0;0;0]; val1=max(abs(eig(a))); val2=min(abs(eig(a))); val=val1/val2 %definition of Condition number x=gauss_siedel(a,b,x0); x1=gauss_siedel(a,b1,x0); errip=norm(x-x1)/norm(x); errop=norm(b-b1)/norm(b); fprintf('nerror in i/p is %d nand error in o/p is %dn',errip,errop); end 1). >> a=[1 ,.2 .2;.2, 1, .2;.2, .2, 1] a= 1.0000 0.2000 0.2000 0.2000 1.0000 0.2000 0.2000 0.2000 1.0000 >> b=[2;2;2] b= 2 2 2 >> b1=[1.1;2.1;3.1] b1 = 1.1000 2.1000 3.1000
  • 16. >> cond(a,b,b1) a= 1.0800 0.4400 0.4400 0.4400 1.0800 0.4400 0.4400 0.4400 1.0800 val = 3.0625 Condition Number. The maximum no. of iteration required is 14 error in i/p is 1.309812e+000 and error in o/p is 4.112988e-001 2). >> a=[1 ,.5 .5;.5, 1, .5;.5, .5, 1] a= 1.0000 0.5000 0.5000 0.5000 1.0000 0.5000 0.5000 0.5000 1.0000 >> b=[2;2;2] b= 2 2 2 >> b1=[1.1;2.1;3.1] b1 = 1.1000 2.1000 3.1000
  • 17. >> cond(a,b,b1) a= 1.5000 1.2500 1.2500 1.2500 1.5000 1.2500 1.2500 1.2500 1.5000 val = 16.0000 Condition Number Norm of c is greater than 1, Solution will diverge. 3). >> a=[1 ,.9 .9;.9, 1, .9;.9, .9, 1] a= 1.0000 0.9000 0.9000 0.9000 1.0000 0.9000 0.9000 0.9000 1.0000 >> b1=[1.1;2.1;3.1] b1 = 1.1000 2.1000 3.1000 >> b1=[1.1;2.1;3.1] b1 = 1.1000 2.1000 3.1000 >> b=[2;2;2] b= 2 2 2
  • 18. >> cond(a,b,b1) a= 2.6200 2.6100 2.6100 2.6100 2.6200 2.6100 2.6100 2.6100 2.6200 val = 28.0000 Condition Number. Norm of c is greater than 1, Solution will diverge.