Sei sulla pagina 1di 13

GAUSS SIEDEL LINEAR SOLVER

MATLAB PROGRAM :
function [ x ] = itergauss( A,b,n )
%%check if gauss-seidel method is
applicable
[si,sj]=size(A);
if si~=sj
disp('error matrix is not square');
return
end
if prod(diag(A))==0
disp('gauss-seidel iterative method is
not applicable');
return
end
E=tril(A,-1);
F=triu(A,1);
D=A-E-F
Bj=-inv(D)*(E+F);
rho=max(abs(eig(Bj))); %spectral radius
if rho>=1
rho=1;
end
%if rho>=1
% disp('gauss-seidel method do not
converge');
% return
%end
y=zeros(si,n);
tic
for i=[1:1:n]
y(:,i+1)=inv(D+E)*(b-F*y(:,i));
end
x=y(:,n);
execution_time=toc
end

MATLAB RESULTS .

>> A=[52 19 11 3 8 1 0 0.5 5.5;0 1 11.8 2 75 10 0 0.2 0;0 2 45 5 38 10 0 0 0;0 0 6


6 60 26 0 2 0 ;0 1 16 2 50 30 1 0 0 ;0 0 8 4 50 37 0 1 0;0 0 10 4 30 54 2 0 0;0 0 6 2
20 70 0 2 0;0 0 1 1 22 14 7 0 55]

A=

Columns 1 through 5

52.0000 19.0000 11.0000 3.0000 8.0000


0 1.0000 11.8000 2.0000 75.0000
0 2.0000 45.0000 5.0000 38.0000
0 0 6.0000 6.0000 60.0000
0 1.0000 16.0000 2.0000 50.0000
0 0 8.0000 4.0000 50.0000
0 0 10.0000 4.0000 30.0000
0 0 6.0000 2.0000 20.0000
0 0 1.0000 1.0000 22.0000

Columns 6 through 9

1.0000 0 0.5000 5.5000


10.0000 0 0.2000 0
10.0000 0 0 0
26.0000 0 2.0000 0
30.0000 1.0000 0 0
37.0000 0 1.0000 0
54.0000 2.0000 0 0
70.0000 0 2.0000 0
14.0000 7.0000 0 55.0000

>> b=[6.72 ;5.8;10.64;6.16;1.12;5.04;2.8;3.36;0.56]

b=

6.7200
5.8000
10.6400
6.1600
1.1200
5.0400
2.8000
3.3600
0.5600

>> n=9
n=

>> [x]=itergauss(A,b,n)
Undefined function or variable 'itergauss'.

>> [x]=itergauss(A,b,n)

D=

Columns 1 through 8

52 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 45 0 0 0 0 0
0 0 0 6 0 0 0 0
0 0 0 0 50 0 0 0
0 0 0 0 0 37 0 0
0 0 0 0 0 0 2 0
0 0 0 0 0 0 0 2
0 0 0 0 0 0 0 0

Column 9

0
0
0
0
0
0
0
0
55

gauss-seidel method do not converge


Output argument "x" (and maybe others) not assigned
during call to "itergauss".

>> itergauss
Not enough input arguments.

Error in itergauss (line 4)


[si,sj]=size(A);

>> [x]=itergauss(A,b,n)

D=

Columns 1 through 8

52 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 45 0 0 0 0 0
0 0 0 6 0 0 0 0
0 0 0 0 50 0 0 0
0 0 0 0 0 37 0 0
0 0 0 0 0 0 2 0
0 0 0 0 0 0 0 2
0 0 0 0 0 0 0 0

Column 9

0
0
0
0
0
0
0
0
55

gauss-seidel method do not converge


Output argument "x" (and maybe others) not assigned
during call to "itergauss".

>> [x]=itergauss(A,b,n)

D=

Columns 1 through 8

52 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 45 0 0 0 0 0
0 0 0 6 0 0 0 0
0 0 0 0 50 0 0 0
0 0 0 0 0 37 0 0
0 0 0 0 0 0 2 0
0 0 0 0 0 0 0 2
0 0 0 0 0 0 0 0

Column 9

0
0
0
0
0
0
0
0
55

gauss-seidel method do not converge


Output argument "x" (and maybe others) not assigned
during call to "itergauss".

>> x=itergauss(A,b,n)

D=

Columns 1 through 8

52 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 45 0 0 0 0 0
0 0 0 6 0 0 0 0
0 0 0 0 50 0 0 0
0 0 0 0 0 37 0 0
0 0 0 0 0 0 2 0
0 0 0 0 0 0 0 2
0 0 0 0 0 0 0 0

Column 9

0
0
0
0
0
0
0
0
55

gauss-seidel method do not converge


Output argument "x" (and maybe others) not assigned
during call to "itergauss".

>> itergauss(A,b,n)

D=

Columns 1 through 8

52 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 45 0 0 0 0 0
0 0 0 6 0 0 0 0
0 0 0 0 50 0 0 0
0 0 0 0 0 37 0 0
0 0 0 0 0 0 2 0
0 0 0 0 0 0 0 2
0 0 0 0 0 0 0 0

Column 9

0
0
0
0
0
0
0
0
55

RESULTS AFTER TWEAKING THE PROGRAM ..

x=itergauss(A,b,n)

D=

Columns 1 through 8

52 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 45 0 0 0 0 0
0 0 0 6 0 0 0 0
0 0 0 0 50 0 0 0
0 0 0 0 0 37 0 0
0 0 0 0 0 0 2 0
0 0 0 0 0 0 0 2
0 0 0 0 0 0 0 0

Column 9

0
0
0
0
0
0
0
0
55

execution_time =

0.0122

x=

-17.6877
51.1768
-3.0558
12.0614
-0.5444
0.6921
-17.9662
-19.9951
2.1746

>>
b1=[0.9629;0.9545;0.7946;0.8991;0.9454;0.9167;0.9732;0.9825;0.9182]

b1 =

0.9629
0.9545
0.7946
0.8991
0.9454
0.9167
0.9732
0.9825
0.9182

>> x=itergauss(A,b1,n)

D=

Columns 1 through 8

52 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 45 0 0 0 0 0
0 0 0 6 0 0 0 0
0 0 0 0 50 0 0 0
0 0 0 0 0 37 0 0
0 0 0 0 0 0 2 0
0 0 0 0 0 0 0 2
0 0 0 0 0 0 0 0

Column 9

0
0
0
0
0
0
0
0
55

execution_time =

0.0029

x=

-0.4070
1.2217
-0.0713
0.2934
-0.0012
0.0211
-0.2965
-0.3155
0.0455

>>

Potrebbero piacerti anche