Sprawozdanie
laboratoria Metod Numerycznych 07.03.2011
I Metoda Jacobiego
1.Opis metody:
Metoda Jacobiego jest metodą iteracyjną i pozwala nam obliczyć układ n równań z n niewiawiadomymi Ax = b. Wektor x0 będący początkowym przybliżeniem rozwiązania układu będzie dany (zwykle przyjmuje się go jako wektor złożony z samych zer). Metoda ta jest zbieżna dla dowolnego przybliżenia początkowego rozwiązania x0, jeśli największa wartość bezwzględna z wartości własnej macierzy jest mniejszy od jeden W przeciwnym wypadku nie dla każdego przybliżenia początkowego otrzymamy rozwiązanie układu.
2. Implementacja metody :
function x=jacobi(A,b,x0,delta,maxit);
%A macierz współczynników
%b prawa strona układu równań
%x0 punkt startowy
%delta dokładnośc rozwiązania
%maksymalna liczba iteracji
[m,n]=size(A);
P=x0;
x=P;
e=norm(x-P);
for i=1:maxit
for j=1 : n
s=0;
for c=1:j-1
s=s+A(j,c)*P(c);
end;
for c=j+1:n
s=s+A(j,c)*P(c);
end;
x(j)=(b(j)-s)/A(j,j);
end;
e=norm(x-P);
P=x;
if(e<delta) break; end;
end;
3. Sprawdzenie sposobu działania medody Jacobiego:
A=[2 1 0; 1 3 1;0 1 2]
b=[10;-10;10]
x0=[0;0;0]
delta=0.001
maxit=100000
Wynik :
x=jacobi(A,b,x0,delta,maxit):
x =
9.9995
-9.9995
9.9995
4. Wykres zbieżności Jabobiega oraz zmiany wartosci „e”
a) Implementacja metody
function x=jacobi(A,b,x0,delta,maxit);
%A macierz współczynników
%b prawa strona układu równań
%x0 punkt startowy
%delta dokładnośc rozwiązania
%maksymalna liczba iteracji
[m,n]=size(A);
P=x0;
x=P;
e=norm(x-P);
for i=1:maxit
for j=1 : n
s=0;
for c=1:j-1
s=s+A(j,c)*P(c);
end;
for c=j+1:n
s=s+A(j,c)*P(c);
end;
x(j)=(b(j)-s)/A(j,j);
end;
e=norm(x-P);
e_w(i)=e;
P=x;
iter(i)=i;
zmx1(i)=x(1);
if(e<delta) break; end;
end;
plot(iter, zmx1,'r');
hold on
plot(iter, e_w,'g');
grid
ylabel('Wartość funkcji'),xlabel('Kroki iteracjji');
hold off
title(Zbieżność metody Jacobiego oraz zmiany wartości "e"')
b) sprawdzenie dla danych:
A=[2 1 0; 1 3 1;0 1 2]
b=[10;-10;10]
x0=[0;0;0]
delta=0.001
maxit=100000
c) wykres:
II Metody Gaussa-Seidla
1.Opis metody:
Metdoa Gaussa-Seidla- jest ona pewną modyfikacją metody Jacobiego, jest metodą relaksacyjną w której poszukiwanie rozwiązania rozpoczyna się od dowolnie wybranego rozwiązania startowego(x0), po czym w kolejnych krokach, zwanych iteracjami, za pomocą prostego algorytmu zmienia się kolejno jego składowe, tak by coraz lepiej odpowiadały rzeczywistemu rozwiązaniu. Stosowana jest głównie do rozwiązywania ogromnych układów równań postaci Ax=b.
2. Implementacja metody :
function x=gseid(A,b,x0,delta,maxit);
%A macierz współczynników
%b prawa strona układu równań
%x0 punkt startowy
%delta dokładnośc rozwiązania
%maksymalna liczba iteracji
[m,n]=size(A);
P=x0;
x=P;
e=norm(x-P);
for i=1:maxit
for j=1:n
if(j==1)
s=0;
for c=2:n
s=s+A(1,c)*P(c);
end;
x(1)=(b(1)-s)/A(1,1);
elseif(j==n)
s=0;
for c=1:n-1
s=s+A(n,c)*x(c);
end;
x(n)=(b(n)-s)/A(n,n);
else
s=0;
for c=1:j-1
s=s+A(j,c)*x(c);
end;
for c=j+1:n
s=s+A(j,c)*P(c);
end;
x(j)=(b(j)-s)/A(j,j);
end;
end;
e=norm(x-P);
P=x;
if(e<delta) break;
end;
end;
3. Sprawdzenie sposobu działania medody Gausa-Seidla dla poniższych danych:
A=[2 1 0; 1 3 1;0 1 2]
b=[10;-10;10]
x0=[0;0;0]
delta=0.001
maxit=100000
Wynik:
x=gseid(A,b,x0,delta,maxit)
x =
9.9996
-9.9997
9.9999
4. Wykres zbieżności Jabobiega oraz zmiany wartosci „e”
a) implementacja metody:
function x=gseid(A,b,x0,delta,maxit);
%A macierz współczynników
%b prawa strona układu równań
%x0 punkt startowy
%delta dokładnośc rozwiązania
%maksymalna liczba iteracji
[m,n]=size(A);
P=x0;
x=P;
e=norm(x-P);
for i=1:maxit
for j=1:n
if(j==1)
s=0;
for c=2:n
s=s+A(1,c)*P(c);
end;
x(1)=(b(1)-s)/A(1,1);
elseif(j==n)
s=0;
for c=1:n-1
s=s+A(n,c)*x(c);
end;
x(n)=(b(n)-s)/A(n,n);
else
s=0;
for c=1:j-1
s=s+A(j,c)*x(c);
end;
for c=j+1:n
s=s+A(j,c)*P(c);
end;
x(j)=(b(j)-s)/A(j,j);
end;
end;
e=norm(x-P);
e_w(i)=e;
P=x;
iter(i)=i;
zmx1(i)=x(1);
if(e<delta) break;
end;
end;
plot(iter, zmx1,'r');
hold on
plot(iter, e_w,'g');
grid
ylabel('Wartość funkcji'),xlabel('Kroki iteracjji');
hold off
title('Zbieżność metody Gaussa-Seidla oraz zmiany wartości "e"')
b) sprawdzenie dla danych:
A=[2 1 0; 1 3 1;0 1 2]
b=[10;-10;10]
x0=[0;0;0]
delta=0.001
maxit=100000
c) wykres:
III Wykresy
Wykres zbieżności metody Jacobiego:
Wykres zbieżności metody Gaussa-Seidla:
IV Porównanie metod Jacobiego i Gausa-Seidla (wnioski).
Metoda Gaussa-Siedela jest bardziej zbieżna od metody Jacobiego, pozwala szybciej znaleźć rozwiązanie.
Dla małych układów równań najlepsza jest metoda bezpośrednia czyli Metoda eliminacji Gaussa.
Metoda Gaussa-Siedela jest podobna do metody Jacobiego , jednak jest szybciej zbieżna do rozwiązania.
Wykonali : Krzysztof Maćkowski, Daniel Szepe