Simple relaxation method Matlab

24 views (last 30 days)
Hi.
I want to solve an ecuation system using the simple relaxation method.
I wrote the code using an exemple but the result is wrong. ( Or null? )
A=[ 67 -8 -3 78; -8 65 12 12 ; -3 12 64 -17; 78 12 -17 61];
b=[4; 6 ; 8 ;10];
n=length (b);
x=zeros (n,1) ;
r=A*x-b;
while norm (r, inf) > (10^ (-10) )
p=zeros (n,1);
[c, j]=max(abs (r) );
p ( j) =1;
t= ( -r (j) ) / A (j,j) ;
x=x+t*p;
r=A*x-b;
end
x
i
This is what I have managed to write and the result is NaN, NaN, NaN, Inf.
Is there anything I'm doing wrong? I apologise if this seems like a silly question. I'm just new into it and trying to discover how to solve it.
Thank you! I have tried both r2009a and the online version.
  2 Comments
Rolland-Luigi Eva
Rolland-Luigi Eva on 9 Feb 2023
Unfortunately it is not described, probably that's why I could't solve it, I didn't understand the solving steps properly.
It is from an university course.

Sign in to comment.

Accepted Answer

Alan Stevens
Alan Stevens on 9 Feb 2023
Edited: Alan Stevens on 9 Feb 2023
For the simple relaxation technique to work the A matrix needs to be diagonally dominant. Your A is not diagonally dominant - see first and last rows.
For example, if we make A diagonally dominant (I've just arbitrarily modified your A so that it is), your program generates the following:
A=[ 78 -8 -3 67; -8 65 12 12 ; -3 12 64 -17; 61 12 -17 78];
b=[4; 6 ; 8 ;10];
n=length (b);
x=zeros (n,1) ;
r=A*x-b;
while norm (r, inf) > (10^ (-10) )
p=zeros (n,1);
[c, j]=max(abs (r) );
p ( j) =1;
t= ( -r (j) ) / A (j,j) ;
x=x+t*p;
r=A*x-b;
end
disp(x)
-0.3524 -0.0841 0.2494 0.4711
Compare this with
disp(A\b)
-0.3524 -0.0841 0.2494 0.4711
  3 Comments
Rolland-Luigi Eva
Rolland-Luigi Eva on 9 Feb 2023
Yes, it couldn't been solved using the method I wanted to.
I apologise.

Sign in to comment.

More Answers (0)

Products


Release

R2009a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!