[Matlab] Układ równań, metoda Gaussa-Siedla

Mathematica, Matlab, Statistica, LaTeX i wszelkiego rodzaju oprogramowanie przydatne matematykowi w pracy. Miejsca w sieci poświęcone zagadnieniu.
tomek274
Użytkownik
Użytkownik
Posty: 44
Rejestracja: 10 lis 2009, o 16:20
Płeć: Mężczyzna
Lokalizacja: Kleszczów
Podziękował: 1 raz

[Matlab] Układ równań, metoda Gaussa-Siedla

Post autor: tomek274 »

Witam.
W linku zadanie które mam rozwiązać w języku Matlab. Ogólnie rozpisałem wszystko i program liczy (wynik wychodzi dobry), ale nie wiem jak uwzględnić błąd i liczbę iteracji, gdzie to wpisać jak to wpisać o co chodzi w ogóle. Pomocy.

Link do zadania: [ciach]

Program który napisałem:

Kod: Zaznacz cały

function aluminium 
clear all 
format compact 
diary on 
A=[3,1,1,2;1,9,3,1;2,1,5,1;1,2,3,10] 
B=[16;32;23;54] 
X=[0;0;0;0]; 
x=metGaussaseidla(A,B,X) 
%sprawdzenie 
xr=AB 
end 
function x=metGaussaseidla(a,b,x) 
n=length(a); 
for k=1:11 
for i=1:n 

s1=0; 
if(i>=2) 
for j=1:i-1 
s1=s1+a(i,j)*xn(j); 
end 
end 
s2=0; 
for j=i+1:n 
s2=s2+a(i,j)*x(j); 
end 

x(i)=(-s1-s2+b(i))/a(i,i); 
xn(i)=x(i); 

end 

end 
end
Ostatnio zmieniony 25 kwie 2018, o 21:06 przez SlotaWoj, łącznie zmieniany 4 razy.
Powód: Nieregulaminowy zapis - obrazki zamiast zapisu w LaTeX-u. Brak tagów [code].
SlotaWoj
Użytkownik
Użytkownik
Posty: 4211
Rejestracja: 25 maja 2012, o 21:33
Płeć: Mężczyzna
Lokalizacja: Kraków PL
Podziękował: 2 razy
Pomógł: 758 razy

[Matlab] Układ równań, metoda Gaussa-Siedla

Post autor: SlotaWoj »

Zakładasz dopuszczalny bezwzględny błąd rozwiązania \(\displaystyle{ \varepsilon}\) i iterujesz tak długo, aż osiągniesz:
  • \(\displaystyle{ \max_i\bigg(\left|\,x_i^{(k+1)}-x_i^{(k)}\right|\bigg)}<\varepsilon}\)
tomek274
Użytkownik
Użytkownik
Posty: 44
Rejestracja: 10 lis 2009, o 16:20
Płeć: Mężczyzna
Lokalizacja: Kleszczów
Podziękował: 1 raz

[Matlab] Układ równań, metoda Gaussa-Siedla

Post autor: tomek274 »

jak zapisać w matlabie to \(\displaystyle{ x_i^{k+1}}\) i co to znaczy ?
Ostatnio zmieniony 25 kwie 2018, o 16:30 przez Jan Kraszewski, łącznie zmieniany 1 raz.
Powód: Nieczytelny zapis - brak LaTeX-a. Proszę zapoznaj się z instrukcją: http://matematyka.pl/latex.htm .
janusz47
Użytkownik
Użytkownik
Posty: 7910
Rejestracja: 18 mar 2009, o 16:24
Płeć: Mężczyzna
Podziękował: 30 razy
Pomógł: 1670 razy

[Matlab] Układ równań, metoda Gaussa-Siedla

Post autor: janusz47 »

Tomku274
Proponuję bardziej dojrzały kod w Matlab numerycznej metody Gaussa-Seidla.
function seidel(A,b,x0,tol,itmax)
n=\length(b);
x=zeros(n,1);
fprintf('n\');
disp(' Macierzą jest=')
Augm=[A,b]
Y =zeros(n,1);
Y=x0;
for k=1:itmax+1
for i=1:n
S=0;
for j=1:i-1
S= S+A(i,j)*x(j);
end
for j=i+1:n
S = S +A(i,j)*x0(j);
end
if(A(i,i)==0)
break
end
x(i)=(-S +b(i))/(A(i,i);
end
err=abs(norm(x-x0));
rerr=err/(norm(x)+eps);
x0=x;
Y=[Y,x];
if(rerr< tol)
break
end
end
% Wyniki
if(A(i,i)==0)
disp(' dzielenie przez zero')
elseif(k== itmax +1)
disp(' Metoda rozbiezna')
else
fprintf('\n');
disp(' Wektorem rozwiązania jest:')
fprintf('\n');
disp('iter # 0 1 2 3 4 ...')
fprintf('\n')
for i=1:n
fprintf('x%1.0f= ',i)
fprintf('%10.6f',Y(i,[1:k+1]))
fprintf('\n');
end
fprintf('\n\');
disp(['Metoda zbieżna po ',num2str(k),' iteracjach do']);
x
end
Ostatnio zmieniony 25 kwie 2018, o 21:07 przez SlotaWoj, łącznie zmieniany 2 razy.
Powód: Brak tagów [code].
SlotaWoj
Użytkownik
Użytkownik
Posty: 4211
Rejestracja: 25 maja 2012, o 21:33
Płeć: Mężczyzna
Lokalizacja: Kraków PL
Podziękował: 2 razy
Pomógł: 758 razy

[Matlab] Układ równań, metoda Gaussa-Siedla

Post autor: SlotaWoj »

\(\displaystyle{ x^{(k)}}\) to k-ta iteracja, \(\displaystyle{ x^{(k+1)}}\)k+1-wsza iteracja.

Wszystkich iteracji nie trzeba pamiętać. Wystarczy, że mamy bieżącą (Ty nazwałeś ją następną xn) i poprzednią (u Ciebie x).

Edit:
Ponieważ nie jestem pewien znaczenia zmiennych err i eps w kodzie Janusza47 (wymaga to analizy), wykasowałem fragment na ich temat.
nike14
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 25 sty 2018, o 21:46
Płeć: Mężczyzna
Lokalizacja: ffsfsfs

[Matlab] Układ równań, metoda Gaussa-Siedla

Post autor: nike14 »

janusz47, Mam pytanie co do kodu, za co odpowiada parametr tol i itmax w twoim kodzie ?
janusz47
Użytkownik
Użytkownik
Posty: 7910
Rejestracja: 18 mar 2009, o 16:24
Płeć: Mężczyzna
Podziękował: 30 razy
Pomógł: 1670 razy

[Matlab] Układ równań, metoda Gaussa-Siedla

Post autor: janusz47 »

\(\displaystyle{ tol}\) - dokładność

\(\displaystyle{ itmax}\) maksymalna ilość iteracji

na przykład:

\(\displaystyle{ A =[7,-2,1,0;1,-9,3,-1;2,0,10,1; 1,-1,1,6]}\);

\(\displaystyle{ b = [17,13,15,10]';}\)

\(\displaystyle{ a0= [0,0,0,0]'}\);

\(\displaystyle{ seidel(A,b,x0, 10^{-3} , 30)}\).
nike14
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 25 sty 2018, o 21:46
Płeć: Mężczyzna
Lokalizacja: ffsfsfs

[Matlab] Układ równań, metoda Gaussa-Siedla

Post autor: nike14 »

Dobra, już wszystko rozumiem. Dziękuję bardzo.
ODPOWIEDZ