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

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

Metody Numeryczne I A

Zasady zaliczania

Ćwiczenia rozpoczynają się w poniedziałki o 16:15 w OKWF A. Są dwie przerwy 10 minutowe o pełnych godzinach (czyli 17:00--17:10 oraz 18:00--18:10). Zajecia kończymy formalnie o 18:50 (można wyjść wcześniej, można także zostać do 19:00).

Wiadomości

Przykładowe pytania na teście

  1. Algorytm XYZ ma złożoność obliczeniową (czas wykonania) rzędu:
    a) N   b) N log N   c)N2
  2. Największy błąd numeryczny dostajemy przy (zakładamy że obie liczby są liczbami zmiennoprzecinkowymi tego samego znaku):
    a) dodawaniu dużych liczb   b) odejmowaniu dużych liczb   c) mnożeniu dużej liczby przez małą

Zadania (programy) domowe

Programy będą oceniane w skali ciągłej [0,1]. Na koniec zajęć ilość punktów uzyskanych za oddane programy będzie dzielona przez ilość obowiązkowych zadań domowych i przeliczana do 50% (najprawdopodobniej 50 pkt.). Za szczególnie "ładne" rozwiązania można dostać dodatkowe punkty (na razie oznaczane przez +). Możliwe jest zatem uzyskanie za programy więcej niż 50% (50pkt). Każde zadanie domowe ma termin oddania (celem tego rozwiązania jest uniknięcie oddawania wszystkich zadań na ostatnich i przedostanich 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). Uwaga: rozszerzenia zadań domowych nie mają terminów.

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.

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.


Zagadnienia przedstawiane na ćwiczeniach

1. Dokładność numeryczna

08-10-2001 do 15-10-2001
1.1 Opis teoretyczny
1.2 Zadania
Do każdego rozważanego problemu w pliku wstep.ps.gz (tex)podane jest proste zadanie do rozwiązania. Należy zrobić przynajmniej dwa zadania z trzech.
  1. Znaleźć najmniejszą taką liczbę a != 0, taką że fl(1+a) = 1 (gdzie fl(wyrażenie) oznacza wynik numerycznego obliczenia wyrażenia na liczbach zmiennoprzecinkowych). Znaleźć taką liczbę a, że fl(1/a*a) != 1. Uwaga: podane zadanie można rozwiązać nie korzystając z komputera przy założeniu określonej ilości bitów na mantysę; przy pisaniu programu w razie potrzeby należy zastosować zmienne pomocnicze.
  2. Zaimplementować dwa algorytmy obliczania długości przeciwprostokątnej: bezpośrednie zastosowanie wzoru pitagorasa oraz wzór powstały przez wyłączenie większej co do modułu liczby przed pierwiastek (patrz wstep.ps.gz (tex)). Porównać ich dokładność oraz dokładnośc funkcji bibliotecznej hypot. Dla jakich wartości parametrów metoda klasyczna nie działa, a druga metoda daje poprawne wyniki (do tego nie potrzeba używać komputera).
  3. Zaimplementować dwa: klasyczny i ulepszony (w którym z klasycznego wzoru oblicza się wiekszy co do moduły pierwiastek zaś drugi ze wzoru Verleta) rozwiązywania równania kwadratowego. Poszukać takich współczynników wielomianu, że metody te dają różne wyniki. Który algorytm jest dokładniejszy?
  4. Kumulacja błędów w zagadnieniu obliczania sumy. Należy zaimplementować zwykłe sumowanie ciągu, sumowanie ciągu od najmniejszej wartości (ciąg może być zadany przez piszącego program, więc nie ma potrzeby wykonywać sortowanie), oraz algorytm Gilla-Mollera:
      u = p = 0;
      for (i = 0; i < N; i++) {
        v = A[i];
        s = u + v;
        p = u - s + v + p;
        u = s;
      }
      wynik = s + p
      
    Algorytm Gilla-Mollera zapobiega kumulacji błędów. Zobaczyć który algorytm daje najdokładniejszy wynik.

2. Wielomiany i aproksymacja wielomianowa.

15-10-2001 do 22-10-2001
2.1 Opis teoretyczny
2.2 Zadania
  1. Napisać obliczanie wartości wielomianu danego przez swoje wspólczynniki (zapisane w tablicy) w zadanym punkcie x metodą Hornera:
    W(x) = a0 + x (a1 + ... + x (an-1 + x an)...)
  2. Napisać procedury (funkcje) znajdujące elementy tablicy między którymi leży dane x metodami bisekcji oraz polowania. Dokładniej, znależć taki indeks i, że tabi-1 < x <= tabi .
2.3 Zadanie domowe

Napisać program dokonujący interpolacji wielomianowej zadanego stopnia metodą Neville'a. Wykres można przedstawić zapisując wyniki do pliku i korzystając z programu gnuplot, lub korzystając z którejś z bibliotek graficznych (g2, GRX, GTK, Qt, Xlib,...). W przypadku robienia wykresu należy, przy funkcji zadanej na N >= m + 1 punktach (gdzie m jest stopniem wielomianu interpolacyjnego), wyznaczać wartość wielomianu interpolacyjnego w punkcie na podstawie intepolacji opartej o najbliższe (w sensie odległości albo w sensie indeksów) m+1 punktów. W przypadku programu nie produkującego wykresów należy przynajmniej dać użytkownikowi możliwość punktu obliczenia intepolacji; program w wyniku powinien podawać wartość interpolacji w punkcie, wartość funkcji w punkcie i błąd interpolacji. Najlepiej, jeśli w programie było podanych kilka przykładowych punktów dla których można zobaczyć własności interpolacji (ekstrapolacji).

Przykładowe funkcje do testowania: |x|, 1/(1+x2), exp(-x2), exp(-1/x2), wielomian.
Czas oddania: do końca listopada bez obniżania punktacji.

3. Znajdowanie współczynników wielomianu interpolujacego.

29-10-2001
3.1 Opis teoretyczny
3.2 Zadanie domowe
Napisać program znajdujący współczynniki wielomianu interpolującego przez stosowanie algorytmu Neville'a (algorytm z wykładu, patrz także wspolcz_int_wiel.ps.gz (tex)). Program powinien sprawdzić, czy algorytm ten odtwarza wielomian jeśli mamy wystarczającą liczbę punktów, tzn. przy danych wartościach wielomianu w stopień + 1 (lub więcej) punktach czy dostajemy poprawne współczynniki wielomianu. Można porównać wielomian otrzymany z interpolacji np. z rozwinięciem Taylora funkcji.
Czas oddania: do końca listopada bez obniżania punktacji.

4. Interpolacja przy pomocy funkcji sklejanych (splines).

05-11-2001
4.1 Opis teoretyczny
4.2 Zadania
  1. Napisać procedurę (funkcję) rozwiązującą układ równań o macierzy w postaci trójliniowej metodą przeganiania. Sprawdzić, czy daje ona dobre wyniki (przez przemnożenie wyniku przez macierz i sprawdzenie czy wynik jest równy wektorowi prawej strony).
  2. Napisać procedurę (funkcję) dokonującej interpolacji funkcjami sklejanymi trzeciego stopnia (splines) przy zadanych wartościach funkcji i drugiej pochodnej funkcji w punktach, t.j. danych xi, fi = f(xi), d2fi = f''(xi) .
4.3 Zadanie domowe
Napisać program dokonujący interpolacji przy pomocy krzywych sklejanych (splines) trzeciego stopnia (przy zadanych punktach i wartościach funkcji w punkcie). Patrz także opis w spline.ps.gz (tex).
Czas oddania: do końca sesji bez obniżania punktacji.

5. Całkowanie numeryczne przy pomocy kwadratur Gaussa.

12-11-2001 do 26-11-2001
5.1 Opis teoretyczny
Wkrótce powinien się pojawić.
5.2 Zadania
  1. Całkowanie za pomoca kwadratury Gaussa-Legendre'a, z adaptacyjnym dzieleniem przedziału.
  2. Całkowanie po przedziale nieskończonym za pomocą kwadratur Gaussa-Laguerre'a, Gaussa-Hermite'a oraz przez zamianę zmiennych (sprowadzenia do przedziału skończonego).
5.3 Zadanie domowe

Napisać program całkujący różne funkcje w zadanych przedziałach za pomocą kwadratur Gaussa-Legendre'a oraz Gaussa-Czebyszewa. Program powinien jako jedną z całek liczyć całkę na przedziale niewłaściwym (nieograniczonym przynajmniej z jednej strony) za pomocą odpowiedniej zamiany zmiennych. Całkowanie powinno się odbywac za pomocą kolejnego dzielenia przedziałów aż do osiągnięcia założonej dokładności lub przekroczenia ilości kroków.

Do oszacowania błędu całkowania można użyć wyników dla przedziału i przedziału podzielonego na części, lub dla kwadratury i kwadratury wyższego stopnia na tym samym przedziale. (Dla chętnych: zaimplementować kwadratury Gaussa-Kronroda, które licząc kwadraturę 2n+1. rzędu korzystają z węzłów kwadratury n. rzędu. Patrz pakiet QUADPACK, w szczególności procedury qk21 i podobne.). Przy dzieleniu przedziałów na części warto dzielić ten przedział, który daje największy błąd (szybkie znajdowanie minimum można zrobić za pomoca kolejki priorytetowej zaimplementowanej w postaci kopca), ale można po prostu dzielić te przedziały które dają większy błąd (jako wkład do całki) niż założona dokładność.

Dla chętnych: zastosować algorytm sumowania z poprawkami Gilla-Mollera.

Przykładowe funkcje do zcałkowania:

całka wynik
\int_0^1 xa log 1/x dx 1/(a+1)2
\int_{-inf}^{inf} exp(-x -x2) dx sqrt(Pi)*exp(1/4)
\int_0^{inf} log(x)/(1 + 100*x2) dx - log(10)/20


Czas oddania: do końca sesji bez obniżania punktacji.

 

6. Całkowanie numeryczne rozszerzoną metodą trapezów.

26-11-2001
6.1 Opis teoretyczny
Wkrótce powinien się pojawić.
6.2 Zadania
  1. Napisać procedurę (funkcję) całkującą zadaną funkcje po przedziale domkniętym rozszerzoną metodą trapezów. Rząd metody powinien być zwiększany do osiągnięcia żądanej dokładności (jako oszacowanie błędu można wziąść różnicę między wynikami z kolejnych rzędów) lub przekroczenia maksymalnej ilości podziałów. Funkcja powinna wykorzystywać wyniki z poprzedniego rzędu dla uniknięcia wielokrotnego obliczania wartosci funkcji w tym samym punkcie.
6.3 Zadanie domowe

Napisać program całkujący zadaną funkcję w zadanym przedziale za pomocą rozszerzonej metody trapezów. Program powinien zwiększać rząd metody (ilość podziałów) aż do osiągnięcia zakładanej dokładności lub przkeroczenia maksymalnej ilości iteracji.

To zadanie domowe można połączyć z poprzednim zadaniem, na całkowanie (adaptacyjne) za pomocą kwadratur Gaussa.
Czas oddania: do końca sesji bez obniżania punktacji.

7. Całkowanie wielowymiarowe metodą całki wielokrotnej. Ekstrapolacja Richardsona i metoda Romberga.

03-12-2001
7.1 Opis teoretyczny
Wkrótce powinien się pojawić.
7.2 Zadania
  1. Napisać funkcję obliczającą całkę wielokrotną (wielowymiarową) albo pisząc ogólną procedurę całkowania funkcji z parametrem i przekazując pozostałe zmienne jako parametry, albo napisać całkowanie dla zadanej liczby wymiarów, przekazując pozostałe zmienne w zmiennych globalnych (statycznych).
  2. Napisać program całkujący metoda Romberga dla metody trapezów, bądż to korzystający bezpośrednio ze wzorów na ekstrapolację Richardsona, bądż to dokonujący ekstrapolacji wielomianowej do kroku równego 0 (jak w "Numerical Receipies"). Program/funkcja powinna wyliczać całkę z zadaną dokładnością (jeśłi się da) i wykorzystywać wyniki z poprzedniego rzędu.
Uwaga: całkowanie wielowymiarowe jest powolne, zatem nie należy zadawać zbyt dużej dokładności.
7.3 Rozszerzenie zadania domowego z całkowania metodą trapezów
Rozszerzyć program całkujący metodą trapezów o metodę Romberga. Program powinien całkować funkcję z zadaną dokładnością (albo do przekroczenia maksymalnej ilości iteracji), wykorzystując rozwiązanie z poprzedniego rzędu.

8. Rozwiązywanie równań nieliniowych.

10-12-2001 z powodu padu sieci zajęcia nie odbyły się.
17-12-2001
8.1 Opis teoretyczny
8.2 Zadania
  1. Napisać procedurę (program) znajdującą zero zadanej funkcji w podanym przedziale z zadaną dokładnością metodą bisekcji, lub do przekroczenia zadanej liczby iteracji. Jako oszacowanie błędu można wziąć długość przedziału (dokładność znalezienia punktu) i/lub wartość bezwzględną funkcji w punkcie (np. pośrodku przedziału) (dokładność spełnienia warunku). Innym warunkiem na osiągnięcie zadanego błędu bezwzględnego (epsabs) i bezwzględnego (epsrel) jest zastosowanie do testowania czy osiągnięto zadane dokładności wzoru: |a - b| < epsabs + epsrel min(|a|, |b|), o ile przedział [a, b] nie zawiera 0. Innym oszacowaniem błędu znalezienia rozwiązania jest |f(x)|/|f'(x)| ~= |f((a+b)/2)| |a-b|/|f(a)-f(b)|.
8.3 Zadanie domowe

Napisać procedurę (program) znajdującą zero zadanej funkcji w podanym przedziale z zadaną dokładnością metodą bisekcji. Więcej informacji w pliku miejsca_zerowe.ps.gz (tex).
Czas oddania: do końca sesji bez obniżania punktacji.

9. Sortowanie.

07-01-2002
9.1 Opis teoretyczny
9.2 Zadania
  1. Napisać procedurę i przykładowy program sortujące tablicę liczb zmiennoprzecinkowych (float) w porządku malejącym dowolnie wybraną metodą.

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