Strona domowa ćwiczeń z Metody Numerycznych II A
w roku akademickim 2001/02.

[Strona domowa]  [Kontakt]  [Zajęcia]  [Porady komputerowe]
Wiadomości  Spis treści  O zadaniach domowych  Zadania domowe: spis  [Wyniki]  Porady  Linki

Metody Numeryczne II A

Zasady zaliczania

Ćwiczenia odbywają się w czwartki w godzinach 9:15 - 12:00 w sali OKWF B.

Wiadomości

Tutaj będą pojawiały się różne informacje, np. upłynięcie terminu oddawania zadania domowego, termin testu, informacje o odwołaniu zajęć czy informacje o wynikach (czy też informacje o zmianach na stronie).

Spis treści

Zadania (programy) domowe

Programy będą oceniane w skali ciągłej [0,1]. Za rozszerzenie zadania domowego można dostać od 0 do 1/3 punkta. Na koniec zajęć ilość punktów uzyskanych za oddane programy będzie dzielona przez ilość obowiązkowych zadań domowych i przeliczana do 57% (57 pkt.). Dodatkowo za oddanie przynajmniej jednego zadania domowego osobiście będą przyznawane dodatkowe punkty.

Jest 6. zadań domowych i jedno rozszerzenie za 1/3 punkta. Oby otrzymać ilość punktów za zadania domowe należy przemnożyć sumę otrzymanych ocen przez 8, oraz dodać 6 1/3 punkta jeśli oddało się przynajmniej jeden program osobiście (uwaga: mogę wymagać osobistego oddania programu!). (6 1/3)*8 + 6 1/3 = 57 pkt. Za zadania dodatkowe (nieobowiązkowe) przyznaję odpowiednio: za zadanie 4. (wszyskie wartości własne) 10 pkt, za zadanie 7. (metoda RK ze zmiennym krokiem) 10 pkt, zaś za zadanie 8. (predyktor-korektor) 8 pkt.

Za szczególnie "ładne" rozwiązania można dostać dodatkowe punkty. Możliwe jest zatem uzyskanie za programy więcej niż 57% (57pkt). Każde zadanie domowe ma termin oddania (celem tego rozwiązania jest uniknięcie oddawania wszystkich zadań na ostatnich i przedostatnich zajęciach). Po przekroczeniu tego terminu punktacja obniżana będzie do maksymalnie 0.8 pkt (punkt o szczególnie "ładnych" rozwiązaniach ma zastosowanie także tutaj). Dokładniej ocena jaką by się dostało za zadanie oddane w terminie jest mnożona przez 0.8. Uwaga: rozszerzenia zadań domowych oraz zadania nieobowiązkowe nie mają terminów.

W poradach znajduje się opis preferowanego sposobu (stylu) kodowania (zapisywania programu). Nie jest on obowiązkowy. Służy on głównie jako wskazówka, jak należy pisać programy.

Celem każdego zadania domowego powinno być napisanie zadanego algorytmu (metody) oraz jego przetestowanie.

Oddawanie zadań domowych za pomocą poczty elektronicznej

Programy można wysyłać pocztą (mój adres e-mail to jnareb@fuw.edu.pl), ale preferowane jest oddawanie programów osobiście. Uwaga: proszę zaznaczać które zadanie domowe rozwiązuje przysłany program. Przynajmniej połowa programów powinna (ale nie musi) być oddana osobiście (czy to na ćwiczeniach, czy też umówiwszy się ze mną na konkretny termin). Oceniane jest działanie programu oraz sposób jego zapisania (t.j. ocena bazuje także na źródłach programu). W większości przypadków styl programu nie ma wpływu na ocenę.

Wadą oddawania programów za pomocą poczty elektronicznej jest to, że mogę nie mieć czasu na sprawdzenie przysłanych programów. Zawsze gdy program zostanie sprawdzony i oceniony, wysyłam propozycję oceny i uwagi co do programu na adres zwrotny, tak więc proszę sprawdzać pocztę. Chwilę przysłania programu który wykonuje zlecone działanie uznaję za czas oddania. W razie potrzeby mogę wysyłać potwierdzenie odbioru (proszę podać w treści listu, że się chce otrzymać potwierdzenie odbioru).

Wolałbym, by programy napisane przez więcej niż jedną osobę były oddawane na ćwiczeniach. Przysłanie programu za pomocą e-mail może służyć jako oddanie programu w sensie terminu jego oddania (napisania).

Jeśli czyjś list nie dotarł, to proszę go wysłać ponownie z dopiskiem kiedy został wysłany po raz pierwszy. Można prosić o potwierdzenie odbioru. Na każdych ćwiczeniach dostępna jest lista oddanych i sprawdzonych oraz przysłanych za pomocą e-mail zadań domowych.

Docierają do mnie listy wysyłane z adresów: astrouw.edu.pl, tempac.okwf.fuw.edu.pl, ds2.uw.edu.pl, go2.pl, konto.pl, poczta.fm. Najprawdopodobniej nie docierają listy wysyłane bezpośrednio z komputerów w pracowni (bpcX, apcX) ani z primusa.


Zadanie zaliczeniowe

Zaliczyć ćwiczenia można będzie także oddając program zaliczeniowy. Program na zaliczenie powinien obejmować zakresem przynajmniej dwa zagadnienia (lub jedno mocno rozszerzone) oraz rozwiązywać jakiś fizyczny problem. Przykłady poniżej (więcej informacji udzielam osobiście lub przez e-mail). Można także zgłaszać własne propozycje. Program (kod źródłowy) powinien zostać udostępniony do celów dydaktycznych (polecam wybór którejś z otwartych licencji np. GPL, lub uczynienie programu jawnie public domain).

Programy zaliczeniowe można oddawać zarówno u mnie (w mojej grupie), jak i u mgr Tomasza Pawłowskiego (w grupie 2.). Proszę zgłaszać zamiar oddania programu zaliczeniowego!


Uwaga: zadania mogą ulec zmianie!

Własne propozycje też powinny mieć podobną strukturę, tzn. jako podstawę mieć jakąś (jakieś) metodę numeryczną, rozwiązywać (prezentować) jakieś zagadnienie fizyczne i do tego mieć dobry interfejs użytkownika. Program na zaliczenie powinien obejmować zakresem przynajmniej dwa zagadnienia (lub jedno mocno rozszerzone). Przynajmniej jedna metoda numeryczna powinna być napisana samodzielnie (propozycja powinna przedstawiać minimum pracy własnej). Przynajmniej jedna metoda powinna być z zagadnień poruszanych w obecnym semestrze, tzn. sortowania, równań liniowych, wartości i wektorów własnych, transformaty Fouriera, filtrowania, splotu, równań różniczkowych zwyczajnych (lub cząstkowych). Zagadnienie fizyczne może być zastąpione czymś innym, ale zawsze powinno to być zastosowanie danej metody numerycznej, a nie tylko pokazanie jej własności. Interfejs użytkownika powinien być w miarę interakcyjny; jeśli jednak umiejętności nie pozwalają na implementację grafiki można się (jednak nie we wszystkich zadaniach) obejść.

Uwaga: zrobienie zadania zaliczeniowego nie daje punktów za obecności i test.



Spis zadań domowych



Zagadnienia przedstawiane na ćwiczeniach


1. Sortowanie tablicy

21-02-2002

1.1. Opis teoretyczny

1.2. Zadania

  1. Napisać procedurę i przykładowy program sortujące tablicę liczb zmiennoprzecinkowych (float) w porządku malejącym dowolnie wybraną metodą.
  2. Napisać program pokazujący sortowanie krok po kroku (metoda sortowania dowolna); rozmiar tablicy może być mały. Można oznaczyć w jakiś sposób bieżący element (bieżący kawałek tablicy).

1.3. Zadanie domowe

Napisać dwie procedury sortujące, jedną sortującą w czasie kwadratowym O(N), drugą sortująca w czasie O(N log N). Porównać szybkości dwu zaimplementowanych algorytmów dla różnych rozmiarów tablicy. W przypadku korzystania z grafiki (może być zapis wyników do pliku i wykorzystanie programu gnuplot) zrobić wykres zależności czasu realizacji od rozmiaru tablicy (tablica losowa) w odpowiedniej skali. W przypadku nie korzystania z grafiki porównać czasy dla kilku znaczących wielkości tablicy oraz porównać zachowanie dla tablicy [prawie] uporządkowanej, uporządkowanej [prawie] odwrotnie i ułożonej w porządku losowym.

Jako oszacowanie szybkości można przyjąć ilość wykonanych porównań, ilość wykonanych zamian (jeśli można), albo zmierzyć czas spędzony na wykonywaniu sortowania np. za pomocą funkcji clock z time.h lub times z sys/times.h (na ogół nie daje dobrych wyników ze względu na małą rozdzielczość).

Czas oddania: do połowy marca. Termin już minął, za zadanie można otrzymać maksymalnie 0.8 pkt.



2. Programowanie modularne. Wstęp do rozwiązywania układu równań liniowych metodą Gaussa.

28-02-2002

2.1. Opis teoretyczny

2.2. Opis teoretyczny

2.3. Zadania

  1. Napisać procedurę (funkcję) mnożącą macierz kwadratową przez wektor, która będzie służyć do sprawdzania poprawności wyników.
  2. Napisać procedurę (funkcję), która rozwiązuje układ równań liniowych z macierzą trójkątną górną. Sprawdzić otrzymany wynik. Kod tej procedury przyda się w następnym zadaniu; krok ten można pominąć.
  3. Napisać procedurę (funkcję), która mając daną macierz w postaci rozkładu na macierz trójkątną dolną z jednynkami na diagonali i macierz trójkątną górną (rozkład LU) rozwiązuje układ równań z tą macierzą. Napisać procedurę sprawdzającą wynik (czy to przez wymnożenie macierzy składowych, czy przez mnożenie przez wektor za pomocą rozkładu).
  4. Opakować procedury operujące na rozkładzie LU w niezależnie kompilowany moduł.



3. Rozwiązywanie układów równań liniowych. Rozkład LU metodą Gaussa-Crouta i Dollitle'a.

07-03-2002

3.1. Opis teoretyczny

3.2. Zadania

  1. Rozwiązać układ równań (klasyczną) metodą Gaussa dla zadanego wektora prawych stron. Można założyć, że nie trzeba dokonywać przestawień wierszy.

3.3. Zadanie domowe

Opis zadania domowego znaleźć można w gauss_LU.ps.gz (tex). Poniżej skrócony opis.

Należy napisać funkcję dokonującą rozkładu L U macierzy z częściowym wyborem elementu podstawowego oraz funkcję rozwiązująca układ równań A x = b na podstawie rozkładu obliczanego przez poprzednią funkcję.

Funkcja licząca rozkład L U macierzy powinna go zapisywać w jednej kwadratowej tablicy (w postaci "spakowanej"). Funkcja może nadpisywać macierz A. Jako jeden z parametrów powinien byc przekazywany wektor na którym będzie zapisywana permutacja wierszy. Funkcja powinna zwracać 0 jeśli rozkład się udał, w przeciwnym wypadku powinna zwrócić numer wiersza (liczony od 1) macierzy w którym nastąpił błąd.

Funkcja rozwiązująca układ równań powinna jako argumenty przyjmować wartości obliczone przez poprzednią funkcję. Funkcja może nadpisywać wektor b prawej strony. Funkcja powinna zwracać 0 jeśli udało się rozwiązać układ równań, w przeciwnym wypadku powinna zwrócić numer wiersza (liczony od 1) macierzy w którym nastąpił błąd.

Funkcje mogą używac jako zmiennych (wektorów) roboczych dodatkowych parametrów. Sposób przekazywania macierzy do funkcji pozostawia się piszącemu program (patrz "Porady dotyczące programowania" w poradach). Nie należy do tego używać zmiennych globalnych.

Obie funkcje powinny zostać przetestowane w pisanym programie, tzn. powinno zostać sprawdzone, czy rozkład L U jest rozkładem dla macierzy A o odpowiednio przestawionych wierszach, tzn. czy A = P L U oraz czy rozwiązanie układu spełnia go tzn. czy A x = b. Dla chętnych: wypisać błędy obliczeń.

Czas oddania: do drugich zajęć po świętach (11 kwietnia). Termin już minął, za zadanie można otrzymać maksymalnie 0.8 pkt.

4. Rozwiązywanie układów równań liniowych. Metody iteracyjne.

14-03-2002

4.1. Opis teoretyczny

4.2. Zadania

  1. Rozwiązać układ równań z dużą macierzą rzadką, diagonalnie dominującą, symetryczną, dodatnie określoną za pomocą którejś z metod iteracyjnych, np. metody Jacobiego lub Gaussa-Seidla.

4.3. Zadanie domowe

Opis rozszerzenia poprzedniego zadania domowego znaleźć można w iterate_lin.ps.gz. Poniżej skrócony opis.

Napisać funkcję dokonującą jednego kroku iteracyjnego poprawienia rozwiązania równania A x = b oraz funkcję poprawiającą uzyskane rozwiązanie do odsiągnięcia zadanej dokładności (lub przekroczenia maksymalnej liczby iteracji). Jako warunek stopu można przyjąć ||r|| < eps ||A x||. Funkcje mogą używac jako zmiennych (wektorów) roboczych dodatkowych parametrów. Funkcje mogą nadpisywać swoje parametry ale powinno zostać to opisane.

Maksymalna ocena za to uzupełnienie wynosi 1/3 pkt.


5. Znajdowanie wartości i wektorów własnych macierzy.

21-03-2002 - 04-04-2002

5.1. Opis teoretyczny

5.2. Zadania

  1. Rozwiązać układ równań z dużą macierzą rzadką, diagonalnie dominującą, symetryczną, dodatnie określoną za pomocą którejś z metod iteracyjnych, np. metody Jacobiego lub Gaussa-Seidla.
  2. Znaleźć największą co do modułu wartość własną (i odpowiadający jej wektor własny) zadanej macierzy za pomocą metody potęgowej z zadaną ilością iteracji.

5.3. Zadanie domowe

Napisać program implementujący metodę potęgową i odwrotną metodę potęgową. Program powinien umożliwiać co najmniej podanie ilości iteracji albo żądanej dokładności oraz wartości w pobliżu której będziemy szukać wartości własnej. Program powinien wypisywać co najmniej macierz której wartości i wektorów własnych poszukujemy, znaleziony wektor własny oraz wartość własną. Jako oszacowania błedu można użyć ||A v - lambda v||. Do odwrotnej metody potęgowej program powinien używać rozkładu LU lub podobnego do rozwiązywania układu równań.

Czas oddania: do 20 kwietnia. Termin już minął, za zadanie można otrzymać maksymalnie 0.8 pkt.

Dla chętnych: napisać program znajdujący wszystkie wartości własne macierzy symetrycznej za pomocą transformacji podobieństwa.


6. Równania różniczkowe zwyczajne. Metody jednokrokowe.

11-04-2002 - 18-04-2002

6.1. Opis teoretyczny

6.2. Zadania

  1. Rozwiązać za pomocą metody Eulera równanie ruchu tłumionego (ruchu lepkiego). Porównać rozwiązanie z rozwiązaniem analitycznym.

6.3. Zadanie domowe

Napisać program rozwiązujący zagadnienie początkowe dla równania ruchu tłumionego oraz oscylatora harmonicznego metodą Eulera, midpoint i Heuna. Porównać wynik z rozwiązaniem analitycznym. Można sprawdzić rząd zbieżności metody albo zrobić wykres.

Czas oddania: do połowy maja. Termin już minął, za zadanie można otrzymać maksymalnie 0.8 pkt.


7. Równania różniczkowe zwyczajne. Metody wielokrokowe.

25-04-2002

7.1. Opis teoretyczny

7.2. Zadania

  1. Rozwiązać za pomocą metody wielokrokowej równanie oscylatora harmonicznego. Jako kroki początkowe można wziąć rozwiązanie analityczne. Zobaczyć jaki jest rząd metody.

7.3. Zadanie domowe

Napisać program rozwiązujący zagadnienie początkowe dla oscylatora harmonicznego x'' = - k x oraz wahadła matematycznego x'' = - k sin(x) metodą Runge-Kutty 4. rzędu oraz jawną metodą wielokrokową 4. rzędu. Metodę wielokrokową można wystartowac za pomocą jawnego rozwiązania analitycznego (dla oscylatora harmonicznego) bądź metody Runge-Kutty. Przeanalizować zachowanie (np. za pomocą wykresu fazowego) dla różnych wartości prędkości początkowej.

Czas oddania: do 23. maja. Termin już minął, za zadanie można otrzymać maksymalnie 0.8 pkt.


8. Równania różniczkowe zwyczajne. Metody typu predyktor-korektor.

09-05-2002

8.1. Opis teoretyczny

8.2. Zadania domowe (nieobowiązkowe)

Dla chętnych: napisać program rozwiązujący jakieś zagadnienie początkowe metodą typu Runge-Kutty (lub dowolną inną) ze zmiennym (adaptacyjnym) krokiem (ew. dodatkowo o zmiennym rzędzie), przy zadanej przez użytkownika dokładności, kroku minimalnym i maksymalnym, minimalnym i maksymalnym zwiększeniu kroku. Zadanie to może być jednocześnie częścią zaliczenia zadania z metodą Runge-Kutty i metodą wielokrokową, jeśli dodatkowo jako jedne z zadań do wyboru będzie oscylator harmoniczny i wahadło matematyczne. Uwaga: należy zbadać wybrane zagadnienie!

Dla chętnych: napisać program rozwiązujący jakieś zagadnienie początkową metodą wielokrokową typu predyktor-korektor. Do obliczenia kroku metody niejawnej (korektora) można zastosować metodę iteracji prostej bądź inną (np. metodę Newtona, siecznych czy wstecznego różniczkowania). Zadanie to może być jednocześnie częścią zaliczenia zadania z metodą Runge-Kutty i metodą wielokrokową, jeśli dodatkowo jako jedne z zadań do wyboru będzie oscylator harmoniczny i wahadło matematyczne. Uwaga: należy zbadać wybrane zagadnienie!


9. Dyskretna zespolona transformata Fouriera i jej własności.

16-05-2002

9.1. Opis teoretyczny
Uwaga: pochodzi z zeszłorocznych zajęć z Metod Numerycznych II A.
9.2. Zadania

9.3. Zadanie domowe

Sprawdzić, że odwrotna transformata Fouriera powoduje odzyskanie (z jakim błędem?) oryginalnego sygnału. Sprawdzić jak wygląda transformata Fouriera funkcji czysto rzeczywistej parzystej, czysto rzeczywistej nieparzystej, czysto urojonej parzystej, czysto urojonej nieparzystej. Zobaczyć jak wyglada transformata Fouriera funkcji stałej, okresowej, okresowej z okresem niewspółmiernym do okresu próbkowania.

Można obliczać dyskretną zespoloną transformatę Fouriera bezpośrednio z definicji. Uwaga na normalizację transformaty odwrotnej (można stosowac dowolną normalizację).

Czas oddania: do 10. czerwca. Termin już minął, za zadanie można otrzymać maksymalnie 0.8 pkt.



Planowane przyszłe zadania domowe

  1. Napisać program obliczający zespoloną dyskretną transformatę Fouriera. Nie trzeba implementowac algorytmu szybkiej transformaty Fouriera. Zbadać własności transformaty Fouriera: zachowanie dla funkcji parzystych i nieparzystych, czysto rzeczywistych i czysto urojonych. Obliczyć transformatę odwrotną.
  2. Pokazać filtrowanie za pomocą dyskretnej transformaty Fouriera. Zaimplementować filtr górnoprzepustowy, dolnoprzepustowy i pasmowy. Odfiltrować składowe o małej amplitudzie. Pokazać zastosowania.
  3. Zaimplementować splatanie za pomocą transformaty Fouriera. Porównać wynik z zastosowaniem splatania "z definicji". Należy pamiętać o uzupełnieniu sygnału zerami (jeśli sygnał traktujemy jako zwykłą funkcję) lub "zawijaniu" indeksów przy liczeniu z definicji (jeśli traktujemy sygnał jako funkcję okresową).
  4. Rozwiązać numerycznie równanie dyfuzji, przynajmniej dwiema metodami jawnymi. Pokazać jak ewoluują wyniki w czasie.


Porady

Proszę o zgłaszanie (na ćwiczeniach lub przez e-mail), na jakie tematy potrzeba porad.

Linki (odnośniki)

Literatura dotycząca metod numerycznych

  1. Janina i Michal Jankowscy "Przegląd metod i algorytmów numerycznych".
  2. Josef Stoer, Roland Bulirsch "Wstęp do analizy numerycznej".
  3. Ake Bjorck, Germund Dahlquist "Metody numeryczne".
  4. Richard G.Lyons "Wprowadzenie do cyfrowego przetwarzania sygnałów".
  5. Z. Fortuna, B. Macukow, J. Wąsowski "Metody numeryczne".
  6. Numerical Recipies Software "Numerical Recipies in C: the Art of Scientific Computing".

Jakub Narębski  mailto:jnareb@fuw.edu.pl
Ostatnie zmiany: 18-06-2006 10:44:31