matrix gauss-seidel method
33 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
how to solve this problem? ...
clear
clc
%A*Xi=B matrix
%i want to know Xi.. Thank you
A=[20 15 10; -3 -2.249 7; 5 1 3];
B=[45; 1.751; 9];
Xi=[1; 0; 1];
e1=100; e2=100; e3=100;
n=3;
f=0;
Xu=Xi
while e1>0.1 && e2>0.1 && e3>0.1
for i=1:n
for j=1:n
if j==i
f=f
else
f=f+A(i,j)*Xi(j)
end
end
Xi(i)=(B(i)-f)/A(i,i)
e1=abs((Xu(1)-Xi(1))/Xu(1))*100
e2=abs((Xu(2)-Xi(2))/Xu(2))*100
e3=abs((Xu(3)-Xi(3))/Xu(3))*100
Xu=Xi
f=0
end
end
Xu
1 Commento
Sam Chak
il 17 Apr 2023
Can you show the Gauss–Seidel equations or execution steps (algorithm) here for investigation purposes?
Risposte (1)
Piyush Patil
il 27 Apr 2023
Hello,
You may refer to the following code to perform Gauss-Seidel Method -
clear
clc
A = [27 6 -1 ; 6 15 2 ; 1 1 54]
B = [85 ; 72 ; 110]
% You can try with this example also
% A = [12 3 -5 ; 1 5 3 ; 3 7 13]
% B = [1 ; 28 ; 76]
% A = [20 15 10 ; -3 -2.249 7 ; 5 1 3];
% B = [45 ; 1.751 ; 9];
x = linspace(0,0,length(A))'; % setting initial guess for 'x' values as 0
% x = [1;0;1] % we can also set initial guess to values of our own choice
n = size(x, 1);
normVal = Inf;
nmax = 10000; % setting maximum number of iterations to 10000
maxErr = 1e-3; % setting maximum error to 10^(-3)
itr = 0;
while normVal > maxErr && itr < nmax
x_old = x;
for i = 1:n
sum = 0;
for j = 1:i-1
sum = sum + A(i,j)*x(j);
end
for j = i+1:n
sum = sum + A(i,j)*x_old(j);
end
x(i) = (1/A(i,i)) * (B(i)-sum);
end
itr = itr + 1;
normVal = norm(x_old - x);
end
disp(x)
Please note that not all systems of equations will converge using the Gauss-Seidel Method.
Gauss-Seidel Convergence Theorem - If "A" is Diagonally Dominant, then the Gauss-Seidel method converges for any starting vector x. A sufficient, but not necessary condition.
Diagonally Dominant - A nxn matrix "A" is diagonally dominant if -
and
for atleast one "i".
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1367634/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1367639/image.png)
In simple terms, the coefficient on the diagonal must be at least equal to the sum of the other coefficients in that row and at least one row with a diagonal coefficient greater than the sum of the other coefficients in that row.
In your case, the matrix "A" is not diagonally dominant matrix. So, either the matrix has no unique solution, or we need a better starting guess for our variables so that the matrix will converge.
0 Commenti
Vedere anche
Categorie
Scopri di più su Operating on Diagonal Matrices in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!