KasprzykKatarzyna-Raport
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Katarzyna Kasprzyk 6626<br />
................................................................... ---------------------------------<br />
(Imię i nazwisko) (A, B, C, D)<br />
Parametry:<br />
M = 6<br />
N = 26<br />
norma = 1<br />
<strong>Raport</strong> z Pracowni nr 1<br />
Zadanie 1<br />
1. Cel zadania<br />
Celem zadania było zbadać złożoność obliczeniową metody iteracji Seidela.<br />
2. Metody<br />
W doświadczeniu wykorzystano kilka klas stworzonych w języku Java. Projekt<br />
stworzono i skompilowano w środowisku JCreator LE 4.5 na komputerze przenośnym<br />
o procesorze Intel Core i7-4800MQ CPU<br />
3. Przebieg doświadczenia i wyniki<br />
Doświadczenie rozpoczęłam od ustalenia minimalnego i maksymalnego rozmiaru listy<br />
tzn:<br />
- n_min = 700, dla której czasy iteracji wyniosły powyżej 0,015 sekundy.<br />
- n_max = 2000, dla której czasy iteracji wyniosły powyżej 0,061 sekundy,<br />
musiałam ograniczyć się niestety do takiego n_max ze względu na późniejsze<br />
działania na metodzie Gaussa, które zajmowały zbyt wiele czasu dla n_max = 7000,<br />
gdy iteracji Seidela zajmowało to 0,5 sekundy.<br />
Opracowałam metodę MierzCzas, która pozwala obliczyć czas wykonywania się<br />
iteracji Seidela oraz Metody Gaussa. Poniżej zamieszczam kod tej metody:<br />
public double MierzCzas(int n, int metoda){<br />
double czas = 0.0;<br />
long pomiar;<br />
int n_max = 7000;<br />
Uklad u1 = new Uklad (n);<br />
for(int j = 0; j < M; j++){<br />
u1.LosujUkladSymetrycznyDodatnioOkreslony();<br />
double[] k = new double [n_max];<br />
for(int i = 0; i < n_max; i++) k[i] = 1;<br />
IteracjaSeidela test1 = new IteracjaSeidela(u1, k);<br />
Gauss test2 = new Gauss(u1);<br />
pomiar = System.currentTimeMillis();<br />
switch(metoda){<br />
case 1: test1.Przygotuj();<br />
test1.IterujA(0.5 , 1);
}<br />
break;<br />
case 2: test2.Eliminacja();<br />
test2.RozwiazTrojkatny();<br />
break;<br />
}<br />
pomiar = System.currentTimeMillis() - pomiar;<br />
czas += pomiar;<br />
return czas / (M * 1000.0);<br />
}<br />
Następnie wywołano metodę BadajZłozonosc podając jako paramtry wartości M = 6<br />
oraz N = 26.<br />
Wykres 1. Zależność czasu obliczania iteracji Seidela od wielkości listy.
Wykres 2. Zależność czasu obliczenia metody Gaussa od wielkości listy.<br />
4. Wnioski<br />
Zadanie 2<br />
1. Cel zadania<br />
Celem zadania było porównanie efektywności uzyskiwania rozwiązania metodą<br />
iteracji Seidela oraz metodą Gaussa.<br />
2. Metody<br />
W doświadczeniu wykorzystano kilka klas stworzonych w języku Java. Projekt<br />
stworzono i skompilowano w środowisku JCreator LE 4.5 na komputerze przenośnym<br />
o procesorze Intel Core i7-4800MQ CPU.<br />
3. Przebieg doświadczenia i wyniki<br />
Wykorzystano maksymalną długość listy ustaloną w zadaniu 1. W zadaniu 1 również<br />
opracowałam metodę MierzCzas w ten sposób, by umożliwiła zastosowanie obu<br />
metod, aby móc wykorzystać to w tym zadaniu. Po wywołaniu metody<br />
PorownajMetody udało się uzyskać taki oto wykres:
Wykres 3. Porównanie metod iteracji Seidela (czerwone punkty) oraz metody Gaussa<br />
(niebieskie punkty).<br />
4. Wnioski<br />
W wyniku przeprowadzonego doświadczenia okazało się, że metoda iteracji Seidela<br />
jest o wiele szybsza niż metoda Gaussa – różnice czasów dla krótkich list są<br />
niewielkie ale znacznie różnią się wraz ze wzrostem listy.