06.12.2016 Views

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!