Egzamin z Metod Numerycznych ZSI, 06.2005. Grupa: A Nazwisko: Imię: Numer indeksu: Ćwiczenia z: Data: Część 1. Test wyboru, max 36 pkt Zaznacz prawidziwe odpowiedzi literą T, a fałszywe N. Każda prawidłowa odpowiedź jest warta 1 punkt. 1. Co robi funkcja DGESV biblioteki LAPACK rozwiązuje układ równań liniowych Ax = b metodą eliminacji Gaussa z wyborem elementu głównego w kolumnie rozwiązuje układ równań liniowych Ax = b z użyciem rozkładu P A = LU rozwiązuje układ równań liniowych Ax = b metodą najmniejszych kwadratów 2. Jak najlepiej postąpić, aby rozwiązać zadanie interpolacji trygonometrycznej pewnej funkcji zadanej w 1024 węzłach Skorzystać z biblioteki LAPACK Skorzystać z biblioteki FFTW Skorzystać z algorytmu różnic dzielonych podanego na wykładzie 3. Algorytm numerycznie poprawny zawsze daje mały błąd względny w arytmetyce fl może dawać duży błąd bezwzględny na dużych danych jest zawsze odporny na zaburzenia danych 4. Metoda eliminacji Gaussa może w praktyce czasami dawać wyniki obarczone dużym błędem względnym Rozkład QR może w praktyce czasami dawać wyniki obarczone dużym błędem względnym Gdy cond(a) = 55, rozwiązanie układu równań z nieosobliwą macierzą A wymiaru 256 256 przy użyciu rozkładu QR wyznaczonego metodą Householdera musi w praktyce zawsze dać wyniki obarczone błędem względnym mierzonym w normie Euklidesowej na poziomie poniżej 10 3 1
5. Zadanie interpolacji trygonometrycznej polega na znalezieniu wielomianu dobrze aproksymującego zadaną funkcję trygonometryczną kombinacji funkcji postaci sin(kx) i cos(kx) interpolujących zadaną funkcję wielomianu trygonometrycznego niskiego stopnia, interpolującego zadany wielomian trygonometryczny 6. Która z metod najlepiej nadaje się do rozwiązania równania x = sin(x + 0.0001) (jego rozwiązanie jest w przybliżeniu równe zero). Banacha siecznych bisekcji 7. Dobre uwarunkowanie zadania powoduje, że każdy algorytm jego wykonania dla w arytmetyce fl wynik najwyższej możliwej dokładności rozwiązanie można wyznaczyć kosztem wielomianowym zadanie mieści się w pamięci podręcznej cache 8. Aby rozwiązać układ równań liniowych z nieosobliwą macierzą A wymiaru N algorytmem eliminacji Gaussa, wystarczy wykonać rzędu N 3 działań w ogólnym przypadku rzędu N 2 działań, gdy macierz jest górna trójkątna rzędu N działań, gdy macierz jest trójdiagonalna 9. Mamy stablicowane N + 1 wartości funkcji f w węzłach x, przy czym x 0 < x 1 <... < x N. Wyjaśnij, co robi poniższy kod g = 0. 0 ; f o r ( i = 0 ; i <= N; i ++) g = g + f [ i ] ( x [ i +1] x [ i ] ) ; wyznacza wielomian interpolacyjny dla stablicowanej funkcji f w węzłach x 0,..., x N wyznacza przybliżenie miejsca zerowego pochodnej funkcji f na odcinku (x 0, x N ) oblicza przybliżenie całki x N x 0 f(x) 10. Liczba x = 0.01 nie jest reprezentowana dokładnie w arytmetyce podwójnej precyzji. Błąd bezwzględny reprezentacji f l(x) x jest równy około 10 14 około 10 16 około 10 18 2
11. Znane jest przybliżenie wartości liczby 1/π z błędem względnym równym 10 3. Ile iteracji metody Newtona x n+1 = x n (2 π x n ) wystarczy, aby zagwarantować, że jej wartość obliczono z precyzją 10 12 : 3 13 23 12. Aby obliczyć wartość całki 1 1 (1+sin(sin(x))) dx z dokładnością ɛ = 10 6, wystarczy skorzystać z kwadratury złożonej trapezów, opartej na 20 węzłach procedury DQUAD biblioteki QUADPACK z parametrem PRECISION = double tej całki nie da się policzyć w arytmetyce f l z żądaną dokładnością Część 2. Zadania (pół)otwarte, max. 25 pkt Uzupełnij wolne miejsca. W razie potrzeby skorzystaj z dodatkowej kartki, zaznaczając numer zadania, które tam rozwiązujesz. Każde prawidłowo rozwiązane zadanie jest warte 5 punktów. 13. Wymień znane Ci metody rozwiązywania równań nieliniowych w kolejności od najszybciej do najwolniej zbieżnych:,, 14. Wymień przynajmniej dwa zadania numeryczne w których wykorzystuje się interpolację wielomianową:,,, 15. Dany jest wielomian w(x) = a 0 + a 1 x +... + a 10 x 10. Aby wyznaczyć jego wartość w punkcie x = 17.125, należy skorzystać z algorytmu. Aby wyznaczyć jego wszystkie miejsca zerowe, dobrze jest użyć procedury z biblioteki. Aby wyznaczyć dokładną wartość całki z tego wielomianu, wystarczy użyć kwadratury opartej na węzłach. 16. Zapisz poniżej wielomian interpolacyjny Lagrange a oparty na węzłach x i = i π/2, i = 0... 2, dla funkcji f(x) = sin(x). Oszacuj, jaki błąd popełniamy, gdy zamiast sin(0.15) wykorzystamy wartość w(0.15). 3
17. Pewna procedura generuje rozkład macierzy A w postaci trzech macierzy P, L, U spełniających zależność P A = LU. Zapisz, jak wykorzystać ten rozkład do efektywnego rozwiązania układu równań Ax = b. Część 3. Kody, max. 9 pkt,,. 18. Chcemy obliczyć rozwiązanie układu równań { 6x + 4y = 3 3x 2y = 5 korzystając z GCC i pewnej fortranowskiej biblioteki. Aby uruchomić te kody należy wywołać kompilator GCC z następującymi parametrami:. Wymień kody, które są błędne:. Wskaż przynajmniej dwa różne błędy w tych kodach: Listing 1: Kod A #i n c l u d e s t d i o. h #d e f i n e I J ( i, j, n ) ( ( i ) 1) (n )+(( j ) 1) i n t d g e s v ( i n t N, i n t NRHS, double A, i n t LDA, i n t IPIV, \ double B, i n t LDB, i n t INFO ) ; i n t main ( v o i d ) { double A, x ; i n t N = 2, INFO, IPIV, NRHS = 1 ; A = ( double ) m a l l o c (N N s i z e o f ( double ) ) ; x = ( double ) m a l l o c (N s i z e o f ( double ) ) ; A [ I J ( 1, 1,N ) ] = 6. 0 ; A [ I J ( 1, 2,N ) ] = 4. 0 ; A [ I J ( 2, 1,N ) ] = 3. 0 ; A [ I J ( 2, 2,N ) ] = 2.0; x [ 0 ] = 3. 0 ; x [ 1 ] = 5. 0 ; IPIV = ( i n t ) m a l l o c (N s i z e o f ( i n t ) ) ; d g e s v (&N, &NRHS, A, &N, IPIV, x, &N, &INFO ) ; p r i n t f ( x = [%g, %g ]. Kod z a k o ń c z e n i a : %d\n, x [ 0 ], x [ 1 ], INFO ) ; f r e e ( IPIV ) ; f r e e (A ) ; f r e e ( x ) ; r e t u r n ( 0 ) ; } Listing 2: Kod B #i n c l u d e s t d i o. h #d e f i n e I J ( i, j, n ) ( ( j ) 1) (n )+(( i ) 1) i n t d g e s v ( i n t N, i n t NRHS, double A, i n t LDA, i n t IPIV, double B, \ i n t LDB, i n t INFO ) ; i n t main ( v o i d ) { double A, x ; i n t N = 2, INFO, IPIV, NRHS = 1 ; A = ( double ) m a l l o c (N N s i z e o f ( double ) ) ; x = ( double ) m a l l o c (N s i z e o f ( double ) ) ; A [ I J ( 1, 1,N ) ] = 6. 0 ; A [ I J ( 1, 2,N ) ] = 4. 0 ; A [ I J ( 2, 1,N ) ] = 3. 0 ; A [ I J ( 2, 2,N ) ] = 2.0; x [ 0 ] = 3. 0 ; x [ 1 ] = 5. 0 ; IPIV = ( i n t ) m a l l o c (N s i z e o f ( i n t ) ) ; dgesv (N, NRHS, A, N, IPIV, x, N, INFO ) ; p r i n t f ( x = [%g, %g ]. Kod z a k o ń c z e n i a : %d\n, x [ 0 ], x [ 1 ], INFO ) ; f r e e ( IPIV ) ; f r e e (A ) ; f r e e ( x ) ; r e t u r n ( 0 ) ; } 4
Odpowiedzi dla wersji A Część 1. Test wyboru, max 36 pkt Zaznacz prawidziwe odpowiedzi literą T, a fałszywe N. Każda prawidłowa odpowiedź jest warta 1 punkt. 1. Co robi funkcja DGESV biblioteki LAPACK rozwiązuje układ równań liniowych Ax = b metodą eliminacji Gaussa z wyborem elementu głównego w kolumnie rozwiązuje układ równań liniowych Ax = b z użyciem rozkładu P A = LU rozwiązuje układ równań liniowych Ax = b metodą najmniejszych kwadratów 2. Jak najlepiej postąpić, aby rozwiązać zadanie interpolacji trygonometrycznej pewnej funkcji zadanej w 1024 węzłach Skorzystać z biblioteki LAPACK Skorzystać z biblioteki FFTW Skorzystać z algorytmu różnic dzielonych podanego na wykładzie 3. Algorytm numerycznie poprawny 4. zawsze daje mały błąd względny w arytmetyce fl może dawać duży błąd bezwzględny na dużych danych jest zawsze odporny na zaburzenia danych Metoda eliminacji Gaussa może w praktyce czasami dawać wyniki obarczone dużym błędem względnym Rozkład QR może w praktyce czasami dawać wyniki obarczone dużym błędem względnym Gdy cond(a) = 55, rozwiązanie układu równań z nieosobliwą macierzą A wymiaru 256 256 przy użyciu rozkładu QR wyznaczonego metodą Householdera musi w praktyce zawsze dać wyniki obarczone błędem względnym mierzonym w normie Euklidesowej na poziomie poniżej 10 3 5. Zadanie interpolacji trygonometrycznej polega na znalezieniu wielomianu dobrze aproksymującego zadaną funkcję trygonometryczną kombinacji funkcji postaci sin(kx) i cos(kx) interpolujących zadaną funkcję wielomianu trygonometrycznego niskiego stopnia, interpolującego zadany wielomian trygonometryczny 1
6. Która z metod najlepiej nadaje się do rozwiązania równania x = sin(x + 0.0001) (jego rozwiązanie jest w przybliżeniu równe zero). Banacha siecznych bisekcji 7. Dobre uwarunkowanie zadania powoduje, że każdy algorytm jego wykonania dla w arytmetyce fl wynik najwyższej możliwej dokładności rozwiązanie można wyznaczyć kosztem wielomianowym zadanie mieści się w pamięci podręcznej cache 8. Aby rozwiązać układ równań liniowych z nieosobliwą macierzą A wymiaru N algorytmem eliminacji Gaussa, wystarczy wykonać rzędu N 3 działań w ogólnym przypadku rzędu N 2 działań, gdy macierz jest górna trójkątna rzędu N działań, gdy macierz jest trójdiagonalna 9. Mamy stablicowane N + 1 wartości funkcji f w węzłach x, przy czym x 0 < x 1 <... < x N. Wyjaśnij, co robi poniższy kod g = 0. 0 ; f o r ( i = 0 ; i <= N; i ++) g = g + f [ i ] ( x [ i +1] x [ i ] ) ; wyznacza wielomian interpolacyjny dla stablicowanej funkcji f w węzłach x 0,..., x N wyznacza przybliżenie miejsca zerowego pochodnej funkcji f na odcinku (x 0, x N ) oblicza przybliżenie całki x N x 0 f(x) 10. Liczba x = 0.01 nie jest reprezentowana dokładnie w arytmetyce podwójnej precyzji. Błąd bezwzględny reprezentacji f l(x) x jest równy około 10 14 około 10 16 około 10 18 11. Znane jest przybliżenie wartości liczby 1/π z błędem względnym równym 10 3. Ile iteracji metody Newtona x n+1 = x n (2 π x n ) wystarczy, aby zagwarantować, że jej wartość obliczono z precyzją 10 12 : 3 13 23 2
12. Aby obliczyć wartość całki 1 1 (1+sin(sin(x))) dx z dokładnością ɛ = 10 6, wystarczy skorzystać z kwadratury złożonej trapezów, opartej na 20 węzłach procedury DQUAD biblioteki QUADPACK z parametrem PRECISION = double tej całki nie da się policzyć w arytmetyce f l z żądaną dokładnością Część 2. Zadania (pół)otwarte, max. 25 pkt Uzupełnij wolne miejsca. W razie potrzeby skorzystaj z dodatkowej kartki, zaznaczając numer zadania, które tam rozwiązujesz. Każde prawidłowo rozwiązane zadanie jest warte 5 punktów. 13. Wymień znane Ci metody rozwiązywania równań nieliniowych w kolejności od najszybciej do najwolniej zbieżnych: Newtona (stycznych), siecznych, bisekcji 14. Wymień przynajmniej dwa zadania numeryczne w których wykorzystuje się interpolację wielomianową: metoda siecznych (interpolacja Lagrange a wielom. stopnia 1), stycznych (wielomianem Hermite a stopnia 1), kwadratury interpolacyjne, aproksymacja funkcji 15. Dany jest wielomian w(x) = a 0 + a 1 x +... + a 10 x 10. Aby wyznaczyć jego wartość w punkcie x = 17.125, należy skorzystać z algorytmu Hornera. Aby wyznaczyć jego wszystkie miejsca zerowe, dobrze jest użyć procedury DGEEV z biblioteki LAPACK. Aby wyznaczyć dokładną wartość całki z tego wielomianu, wystarczy użyć kwadratury Gaussa opartej na pięciu węzłach. 16. Zapisz poniżej wielomian interpolacyjny Lagrange a oparty na węzłach x i = i π/2, i = 0... 2, dla funkcji f(x) = sin(x). Oszacuj, jaki błąd popełniamy, gdy zamiast sin(0.15) wykorzystamy wartość w(0.15). Szukamy wielomianu st. 2 w węzłach równoodległych w przedziale (0, π). Wartości f w tych węzłach to 0, 1, 0. Współczynniki w bazie Newtona są równe 0, 2/π, 4/π 2. Wielomian to w(x) = 2/πx 4/π 2 x(x π/2). Oszacowanie błędu wynika ze standardowych oszacowań w(x) f(x) = f (3) (ξ) 3! x(x π/2)(x π). Dla x = 0.15 mamy więc w(0.15) f(0.15) (1/6) 0.63757 0.11. 17. Pewna procedura generuje rozkład macierzy A w postaci trzech macierzy P, L, U spełniających zależność P A = LU. Zapisz, jak wykorzystać ten rozkład do efektywnego rozwiązania układu równań Ax = b. oblicz b = P b, rozwiąż Ly = b, rozwiąż Ux = y. Część 3. Kody, max. 9 pkt 3
18. Chcemy obliczyć rozwiązanie układu równań { 6x + 4y = 3 3x 2y = 5 korzystając z GCC i pewnej fortranowskiej biblioteki. Aby uruchomić te kody należy wywołać kompilator GCC z następującymi parametrami: gcc -o kod kod.c -llapack -lblas -lg2c -lm. Wymień kody, które są błędne: A, B. Wskaż przynajmniej dwa różne błędy w tych kodach: A: złe makro (zamienione kolumny i wiersze), więc kod rozwiązuje macierz transponowaną B: wszystkie parametry typu int źle przekazane do DGESV (powinny być wskaźniki) Listing 3: Kod A #i n c l u d e s t d i o. h #d e f i n e I J ( i, j, n ) ( ( i ) 1) (n )+(( j ) 1) i n t d g e s v ( i n t N, i n t NRHS, double A, i n t LDA, i n t IPIV, \ double B, i n t LDB, i n t INFO ) ; i n t main ( v o i d ) { double A, x ; i n t N = 2, INFO, IPIV, NRHS = 1 ; A = ( double ) m a l l o c (N N s i z e o f ( double ) ) ; x = ( double ) m a l l o c (N s i z e o f ( double ) ) ; A [ I J ( 1, 1,N ) ] = 6. 0 ; A [ I J ( 1, 2,N ) ] = 4. 0 ; A [ I J ( 2, 1,N ) ] = 3. 0 ; A [ I J ( 2, 2,N ) ] = 2.0; x [ 0 ] = 3. 0 ; x [ 1 ] = 5. 0 ; IPIV = ( i n t ) m a l l o c (N s i z e o f ( i n t ) ) ; d g e s v (&N, &NRHS, A, &N, IPIV, x, &N, &INFO ) ; p r i n t f ( x = [%g, %g ]. Kod z a k o ń c z e n i a : %d\n, x [ 0 ], x [ 1 ], INFO ) ; f r e e ( IPIV ) ; f r e e (A ) ; f r e e ( x ) ; r e t u r n ( 0 ) ; } Listing 4: Kod B #i n c l u d e s t d i o. h #d e f i n e I J ( i, j, n ) ( ( j ) 1) (n )+(( i ) 1) i n t d g e s v ( i n t N, i n t NRHS, double A, i n t LDA, i n t IPIV, double B, \ i n t LDB, i n t INFO ) ; i n t main ( v o i d ) { double A, x ; i n t N = 2, INFO, IPIV, NRHS = 1 ; A = ( double ) m a l l o c (N N s i z e o f ( double ) ) ; x = ( double ) m a l l o c (N s i z e o f ( double ) ) ; A [ I J ( 1, 1,N ) ] = 6. 0 ; A [ I J ( 1, 2,N ) ] = 4. 0 ; A [ I J ( 2, 1,N ) ] = 3. 0 ; A [ I J ( 2, 2,N ) ] = 2.0; x [ 0 ] = 3. 0 ; x [ 1 ] = 5. 0 ; IPIV = ( i n t ) m a l l o c (N s i z e o f ( i n t ) ) ; dgesv (N, NRHS, A, N, IPIV, x, N, INFO ) ; p r i n t f ( x = [%g, %g ]. Kod z a k o ń c z e n i a : %d\n, x [ 0 ], x [ 1 ], INFO ) ; f r e e ( IPIV ) ; f r e e (A ) ; f r e e ( x ) ; r e t u r n ( 0 ) ; } 4