Strona domowa ćwiczeń z Metody Numerycznych II A
w roku 2000/2001

Kontakt  Zajęcia  Praca magisterska  Emacs  AUCTeX i RefTeX  (La)TeX-owe linki  Porady komputerowe

Metody Numeryczne II A

WYNIKI z Metod Numerycznych II A (w formacie HTML): wyniki testu, punkty za obecność i programy (zadania) oraz proponowane oceny. Wyniki zostały uaktualnione (patrz przedostatnia kolumna). Skończył się już termin oddawania programów w sesji letniej!

Wydruk wyników wisi na tablicy ogłoszeń przy pracowni komputerowej, oraz przy pokoju 125 (te wyniki nie są aktualne). Można na nich zobaczyć, ile punktów otrzymało się za test, zadanie programistyczne na teście, ile się ma obecności i ile punktów za programy oddane przed początkiem sesji.

Wyniki wraz z propozycjami ocen wywieszone są na drzwiach pokoju wykładowcy, dr hab. Tomasza Wernera (pokój 115). Wszystkie uaktualnienia zostały wysłane do dr Wernera za pomocą e-mail; w razie gdy wywieszone oceny nie zostały uaktualnione można prosić o sprawdzenie poczty.
Patrz także progi ocen.

Zasady zaliczania:

Punktacja testu

Łącznie za test można było zdobyć 25 pkt., za program 10 pkt., co daje razem 35 pkt. Za obecności można zdobyć 15 pkt. (13. obecności, czyli około 1,15 pkt. za jedną obecność). Punkty za oddane programy (patrz niżej) są przeliczane do 50 pkt.

Osoby które nie były na teście lub uzyskały z niego słabe wyniki, i nie wystarczy im do zaliczenia oddanie zaległych programów, mogą zdawać test u dr Wernera. Nie będzie ogólnego testu poprawkowego.

Punktacja zadań w grupach 2 i 3:

Zadań obowiązkowych jest 10, z czego 4 w wersji rozszerzonej. Zadania dodatkowe nie wliczają się do puli punktów do zdobycia (tak więc można mieć ponad 100% punktów).

Z obowiązkowych zadań można zdobyć 11 1/3 pkt., które będą przeliczone na 50 pkt (co daje około 4,41 pkt. za program).

Ostatecznie progi ocen oraz zaliczenia  
 

progi 456070809097
oceny 3 3+4 4+5 5+

 
 

Programy można wysyłać pocztą (mój adres e-mail to jnareb@fuw.edu.pl), ale preferowane jest oddawanie programów osobiście. Przynajmniej połowa programów powinna 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).
Po sprawdzeniu programów za pomocą e-mail wysyłam komentarze na adres zwrotny, tak więc proszę sprawdzać pocztę!. W szczególności wywieszone listy (oprócz listy wywieszonej na drzwiach pokoju prof. Wernera) nie są aktualizowane po sprawdzeniu każdego programu.

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. Za przestrzeganie tego można będzie dostać dodatkowe punkty.  
 

Zagadnienia przedstawiane na ćwiczeniach

1. Wartości własne i wektory własne macierzy symetrycznych

22-23.02.2001 do 01-02.03.2001
1.1 Opis teoretyczny
1.2 Programy
1.3 Zadania
Opis zadań do zrobienia znaleźć można w eigen-zadania.ps.gz (tex). Poniżej znajduje się ich streszczenie.
  1. Napisać program znajdujący największą wartość własną macierzy i odpowiadający jej wektor własny za pomocą metody potęgowej
  2. Napisać program znajdujący wartość własną macierzy najbliższą zadanej wielkości i odpowiadający jej wektor własny za pomocą metody iteracji odwrotnej (odwrotnej metody potęgowej). Można stosować metodę eliminacji Gaussa bez wyboru elementu podstawowego.

2. Równania różniczkowe zwyczajne

08-09.03.2001 do 29-30.03.2001
2.1 Opis teoretyczny
2.2 Zadania
Szczegółowy opis zadań do zrobienia znaleźć można w ode-zadania.ps.gz (tex). Poniżej znajduje się ich streszczenie.
  1. Ruch w polu siły oporu lepkiego: v'(t) = - k v(t); należy obliczyć prędkość cząstki po zadanym czasie. Uzupełnienie: zadanie należy rozwiązać za pomocą metody Eulera, ulepszonej metody Eulera (metody Heuna), zmodyfikowanej metody Eulera (metody Runge-Kutty 2. rzędu) oraz metody Runge-Kutty 4. rzędu. Należy zrobić wykres rozwiązania od czasu i błędu (różnicy rozwiązania numerycznego i analitycznego); pod Linuksem zapisując wyniki do pliku i korzystając z programu gnuplot, pod DOS-em tworząc własną procedurę do robienia wykresu lub zapisując wyniki do pliku i korzystając z jakiegoś programu.
  2. Wahadło matematyczne; siła dana jest wzorem F(x) = - k sin(x); należy rozwiązać zagadnienie metodą Runge-Kutty dla kilku prędkości początkowych. Wyniki powinny być przedstawiane za pomocą wykresu fazowego (prędkość od położenia); można to zrobić za pomocą zapisywania wyników do pliku i użycia programu gnuplot. Należy normalizować położenie (kąt) do przedziału [-pi,pi].
    Uzupełnienie: należy także rozwiązać za pomocą tego samego (bądź zmodyfikowanego) programu równanie oscylatora harmonicznego. Użyć metody Eulera oraz metody Runge-Kutty 4. rzędu. Porównać obie metody, korzystając z analitycznego (ścisłego) rozwiązania. W tym przypadku nie jest potrzebna normalizacja położenia do przedziału [-pi,pi] (i nie należy tego robić). Do robienia wykresu fazowego "biegnącego" można się posłużyć skryptem w bashu wykresik.sh. Można się z niego nauczyć posługiwania gnuplotem.
  3. Metody wielokrokowe jawne: zbadać zbieżność i koszt (ilość obliczeń funkcji prawej strony równania) dla zagadnienia o znanym rozwiązaniu, np. oscylatora harmonicznego bądź równania u' = a u, gdzie a > 0. Uzupełnienie proszę także rozwiązać zagadnienie:
    u' = ((2 log u + 8)/t -5) u
    z warunkiem początkowym u(1) = 1 dla przedziału t = [1, 6]. Rozwiązanie ścisłe to u(t) = exp(-t2 + 5 t - 4). Należy zrobić wykres rozwiązania od czasu (czy to bezpośrednio w programie, czy za pomocą programu gnuplot). Porównać dokładność i ilość obliczeń funkcji z klasyczną metodą Runge-Kutty. Porównać błąd dla różnych wielkości kroku i ewentualnie wyliczyć rząd metody (podpowiedź: log(xn) = n log(x)). Uwaga: metoda Milne'a nie jest stabilna i jej rząd wyliczany na podstawie równania oscylatora harmonicznego może być niższy niż 4, a nawet może dawać błędne wyniki.
  4. Dla chętnych: metody typu predyktor-korektor. Porównać właściwości z metodami wielokrokowymi, stosując je do tych samych zagadnień

3. Dyskretna transformata Fouriera i jej zastosowania

05-06.04.2001 do 26-27.04.2001
3.1 Opis teoretyczny
3.2 Programy
3.3 Zadania
Opis zadań do zrobienia znaleźć można także w fft-zadania.ps.gz (tex) (którego kopia znajduje się w bibliotece IFD, do zkserowania). Opis nieobowiązkowego zadania dodatkowego znajduje się w fft-zadania-2.ps.gz (tex). Poniżej znajduje się ich streszczenie.
  1. Napisać program obliczający zespoloną dyskretną transformatę Fouriera z jej definicji:

    Hn = sum(k=0..N-1) hk e2 piikn/N

    gdzie i oznacza jednostkę urojoną (t.j. ze wzoru nr 15 w four.ps). Sprawdzić, czy odwrotna transformata Fouriera, zadana wzorem:

    hk = 1/N sum(n=0..N-1) Hn e-2 piikn/N

    przeprowadza otrzymaną tablicę H z powrotem w oryginalną funkcję. Można przykładowo wziąć funkcję zadaną wzorem (wypełnić tablicę h w następujący sposób):
    Zrobić wykres oryginalnej funkcji, jej transformaty Fouriera oraz odwrotnej transformaty Fouriera transformaty Fouriera. Narysować część rzeczywistą i urojoną lub moduł (wartość bezwględną). Pod Linuksem można to zrobić za pomocą programu gnuplot poleceniem (zakładając, że do pliku h.dat zostały zapisane kolejne elementy tablicy h, w każdym wierszu część rzeczywista i część urojona (oddzielone np. spacją)):
     plot 'h.dat' using 1 title "re(h)" with linespoints
     replot 'h.dat' using 2 title "im(h)" with linespoints
     replot 'h.dat' using (abs({$1,$2})) title "abs(h)" with linespoints
    Polecenie replot powoduje wykreślenie dodatkowych danych na bieżącym wykresie. Można pominąć fragment with linespoints: służy on do określenia sposobu wykreślania danych (tutaj: punkty połączone liniami). {a,b} oznacza w gnuplocie liczbę zespoloną a + i b. Argument using z następującym po nim wyrażeniem określa jakie dane będą wykreślone na wykresie.
  2. Napisać program sprawdzający własności transformaty Fouriera. Sprawdzić jakie własności ma transformata Fouriera funkcji
    1. rzeczywistej, parzystej
    2. rzeczywistej, nieparzystej
    3. urojonej, parzystej
    4. urojonej, nieparzystej
    gdzie nieparzystość oznacza, że hk = hN - k.
    Uzupełnienie: sprawdzić własność tzw. aliasingu, t.j. wykreślić funkcję o częstości większej od krytycznej częstości Nyquista 2/N, jej wartości w punktach próbkowania, jej dyskretną transformatę Fouriera oraz transformatę odwrotną. Przykładową funkcją może być h(t) = sin(2*N*2 pi t), gdzie tk = k/N, zaś hk = h(tk).
  3. Zrobić prosty filtr przy użyciu dyskretnej transformaty Fouriera, tzn. obliczyć transformatę Fouriera, wyciąć odpowiednie częstości (pamietając o tym, że dla zwykłej, zespolonej dyskretnej transformaty Fouriera po indeksie N/2 następują częstości ujemne). Uzupełnienie: zrobić to także przy użyciu rzeczywistej transformaty Fouriera, wylicznej za pomocą własnej procedury (na podstawie fourrsc.ps) lub procedury realft z NRC (zawartej w pliku fft_NRC.tar). Uwaga: procedura realft w tym archiwum została poprawiona. Poprzednia wersja wymagała poprawienia deklaracji procedury four1 i podawania połowy wielkości tablicy jako parametru.
  4. Dla chętnych: mnożenie wielomianów przy użyciu [szybkiej] transformaty Fouriera. Za pomocą transformaty Fouriera przechodzimy od reprezentacji wielomianu P(t) za pomocą współczynników a0 + a1 x + ... do reprezentacji za pomocą wartości w deg(P) + 1 punktach P(zi); w naszym przypadku (stosowania TF) są to zespolone pierwiastki z jedności. Wymnożyć wielomiany punkt po punkcie. Obliczyć współczynniki iloczynu z wartości w punktach za pomocą odwrotnej transformaty Fouriera. Uwaga: należy pamiętać, że do odtworzenia wielomianu potrzeba wartości w przynajmniej deg + 1 punktach. Należy wypisać oba czynniki oraz iloczyn (wynik) w czytelnej formie; bardzo małe współczynniki można przyjąć równe zeru przy wypisywaniu.

4. Splatanie i rozplatanie przy użyciu transformaty Fouriera

10-11.05.2001
4.1 Opis teoretyczny
4.2 Zadania
Opis zadań do zrobienia znaleźć można w fft-splot-zadania.ps.gz (tex) (którego kopia znajduje się w bibliotece IFD, do zkserowania). Poniżej znajduje się ich streszczenie.
  1. Przetestować twierdzenie o splocie dyskretnym. Obliczyć splot sygnału (np. funkcji okresowej piłokształtnej) z~funkcją odpowiedzi impulsowej o~małej szerokości (np. funkcji Gaussa lub prostokątnej bariery) z definicji splotu:
    (r * s)j = sum(k = -M/2+1..M/2) rk sj-k,
    oraz za pomocą transformaty Fouriera z twierdzenia o splocie dyskretnym:
    (R * S)j = Rj Sj.
    Należy pamiętać o dopełnieniu sygnału zerami (jeśli sygnał traktujemy jako zwykłą funkcję) lub 'zawijaniu' indeksów (jeśli sygnał jest funkcją okresową) i ułożeniu funkcji odpowiedzi w 'wrap-around order' (r-k = rN-k). Odpleść funkcję odpowiedzi ze splotu obliczonego z definicji i zobaczyć, jak dokładnie odtwarzany jest sygnał oryginalny. Odpleść sygnał za pomocą wzoru iteracyjnego:
    q -> q + (c - r * q),
    gdzie c jest wynikiem splotu, q wynikiem w kolejnej iteracji, zaś r funkcją odpowiedzi jednostkowej. Dla chętnych: sprawdzić wpływ szumu na dokładność odtwarzania.
  2. Dla chętnych: przetestować filtr Wienera dany wzorem
    F(f) = (|H(f)|2)/(|H(f)|2 + |N(f)|2),
    (gdzie h = r*s, n oznacza szum) i porównać wynik jego stosowania:
    S'(f) = (C(f) F(f))/R(f),
    z iteracyjnym odplataniem (dla sygnału splatanego z funkcją odpowiedzi w obecności szumu c = (r * s) + n).

5. Rozwiązywanie równań różniczkowych cząstkowych metodą różnic skończonych (MRS)

17-18.05.2001
5.1 Opis teoretyczny
5.2 Zadania
Opis zadania do wykonania znajduje się w pliku z opisem teoretycznym czastk.ps. Poniżej znajduje się jego streszczenie.
  1. Rozwiązać numerycznie równanie dyfuzji:
    Dt T(x,t) = Dxx T(x,t)
    (dla współczynnika dyfuzji D = 1), dla 0 <= x <= 1, t >= 0, z warunkami początkowo-brzegowymi Równanie to ma rozwiązanie
    T(x,t) = exp(-pi^2/4 t) sin(pi x/2) + 1/2 exp(-4 pi^2 t) sin(2 pi x)
    Rozwiązać to zagadnienie przynajmniej dwoma metodami jawnymi. Dla chętnych: przetestować inne podane na wykładzie metody różnicowe.


Zadania dodatkowe (na ocenę celującą)

Tutaj będą podawane propozycje zadań (programów) zaliczeniowych na ocenę celującą (5+). Można zgłaszać także własne propozycje, po uzgodnieniu z prowadzącym ćwiczenia.

Pojawiło się już pierwsze rozwiązanie z zadań dodatkowych. Program został napisany przez Władysława Saja (grupa 1.), na system operacyjny Linux. Program rozwiązuje zagadnienie ruchu satelity w polu grawitacyjnym Ziemi i Księżyca (zagadnienie trzech ciał). Wykorzystano metodę Runge-Kutty ze stałym i ze zmiennym krokiem. Program dostępny jest w katalogu ~wmsaj/grav3/ (czyli fs98/wmsaj/grav3/). Na stronie Pawła Jankowskiego znajduje się krótki opis tego programu (w PostScripcie).
Uwaga: zagadnienie trzech ciał nie jest już przyjmowane jako rozwiązanie zadania dodatkowego!

Gotowe programy i skrypty


Lista obecności i lista oddanych zadań

Stan na dzień 01.06.2001.

Grupa 2. (czwartkowa): lista2 (lista oddanych zadań w grupie 2. w formacie HTML).
Grupa 3. (piatkowa): lista3 (lista oddanych zadań w grupie 3. w formacie HTML).


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".

Patrz także: Strona Pawła Jankowskiego do Metod Numerycznych II A.
Zadania oraz notatki do ćwiczeń z Metod Numerycznych II A znajdują się także w bibliotece IFD.

Powrót na górę strony