|
POLITECHNIKA WROCŁAWSKA
|
Łukasz Kopeć 177127 |
Wydział: Elektryczny Termin: Wtorek Godz. 1315-1445
|
|
|
|
|
Data ćw: 28.02.2012 |
|
Prowadzący:
Dr inż. Piotr Pierz |
Metody numeryczne |
|||
|
SPRAWOZDANIE NR 1 TEMAT: Metoda Gaussa-Seidla iteracyjnego rozwiązywania układów równań liniowych |
Ocena:
|
Cel ćwiczenia.
Wykorzystanie metody Gaussa-Seidla do rozwiązania zadanego układu równań
Przebieg ćwiczenia
Uporządkowanie macierzy współczynników
Kod programu:
A=[-7,0,2,13;-3,6,2,0;2,-1,9,1;12,-2,3,5] %macierz współczynników A
B=[15;4;3;-1] % wektor prawej strony
n=size(A,1);
for i=1:n-1
wiersz=i;
for j=(i+1):(n)
if (abs(A(wiersz,i)))<(abs(A(j,i)))
wiersz=j;
end
end
if (wiersz~=i)
A1=A;
B1=B;
A(i,:)=A1(wiersz,:);
A(wiersz,:)=A1(i,:);
B(i)=B1(wiersz);
B(wiersz)=B1(i);
end
end
A,B
Wynik:
Macierz współczynników A |
Wektor prawej strony |
macierz uporzadkowana |
|
A =
-7 0 2 13 -3 6 2 0 2 -1 9 1 12 -2 3 5 |
B =
15 4 3 -1 |
A =
12 -2 3 5 -3 6 2 0 2 -1 9 1 -7 0 2 13 |
B =
-1 4 3 15 |
rozwiązanie układu równań
kod programu:
n=4;
eps=1e-6;
A=rand(n,n)
B=rand(n,1)
n=size(A,1)
for i=1:n-1
wiersz=i;
for j=(i+1):(n)
if(abs(A(wiersz,i)))<(abs(A(j,i)))
wiersz=j;
end
end
if (wiersz~=i)
A1=A;
B1=B;
A(i,:)=A1(wiersz,:);
A(wiersz,:)=A1(i,:);
B(i)=B1(wiersz);
B(wiersz)=B1(i);
end
end
n=size(A,1);
x=zeros(n,1);
del=1;
it=0;
while del>eps
it=it+1;
x1=x;
for k=1:n
x(k)=B(k)/A(k,k);
for l=1:n
if l~=k
x(k)=x(k)-A(k,l)*x(l)/A(k,k);
end
end
end
del=max(abs(x1-x));
end
A*x-B
x
it
Przykładowe wyniki:
Macierz 4x4 , dokładność eps=1e-6
błąd wynikający z metody
|
wektor rozwiązań
|
ilość iteracji
|
ans =
1.0e-006 *
0.1087 -0.7170 -0.1893 0
|
x =
-0.8501 1.6685 -1.4272 0.6604
|
it =
119
|
Macierz 5x5 , dokładność eps=1e-10
błąd wynikający z metody
|
wektor rozwiązań
|
ilość iteracji
|
ans =
1.0e-009 *
0.1346 -0.0400 0.0384 0.0015 -0.0000
|
x =
-4.2536 4.1021 3.3746 -4.2187 0.1597
|
it =
561
|
Macierz 11x11, dokładność eps-1e-6
błąd wynikający z metody
|
wektor rozwiązań
|
ilość iteracji
|
ans =
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
|
x =
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
|
it =
1106 |
Wnioski:
Zauważyć można, że wraz ze wzrostem dokładności wzrastała ilość iteracji.
Również rozmiar macierzy ma na nią wpływ- im większy rozmiar macierzy, tym większa ilość iteracji. Problem stanowiło zastosowanie metody przy generowaniu macierzy o rozmiarze 11x11. Program przy tak dużych wartościach zwraca wartość NaN (not a number) .