Metody Numeryczne - laboratorium 1
Transkrypt
Metody Numeryczne - laboratorium 1
Metody Numeryczne - laboratorium 1 10.10.2004 Wyznaczanie warości wielomianów. Dany jest wielomian stopnia n: w(x) = n X ai xi i=0 gdzie ai są współczynnikami tego wielomianu w bazie potęgowej. Napisać program liczący wartość wielomianu w podanym przez użytkownika punkcie przy pomocy dwóch metod: zwykłej oraz schematem Hornera. Współczynniki wielomianu mają być wartościami losowymi, natomiast stopień wielomianu należy zdefiniować stałą w programie. Porównać czas obliczeń obu metod. Dlaczego tak się dzieje? Metoda zwykła Wartość wielomianu w punkcie x liczona jest poprzez sumowanie kolejnych potęg wartości x pomnożonych przez odpowiednie współczynniki: w(x) = n X ai xi = a0 + a1 x + a2 x2 + . . . + an xn i=0 Metoda schematu Hornera Należy zauważyć, że prawdziwa jest następująca zależność: w(x) = n X ai xi = i=0 = a0 + a1 x + a2 x2 + . . . + an xn = = a0 + x(a1 + x(a2 + x(a3 + . . . + x(an−1 + xan ) . . .))) Wykonując obliczenia według kolejności wskazywanej przez nawiasy można zapisać następujący algorytm: w = an i=n−1 dopóki i 0 wykonuj: w =w∗x w = w + ai i=i−1 Algorytm ten nazywany jest schematem Hornera. 1 Metody Numeryczne - laboratorium 2 23.10.2004 Wyznaczanie miejsc zerowych funkcji nieliniowych jednowymiarowych. Napisać program wyznaczający numerycznie miejsca zerowe dla następujących funkcji: f1 (x) = x3 − 6x2 + 11x − 6 f2 (x) = sin(x) f3 (x) = lg x Przedział, w którym ma być znalezione miejsce zerowe (albo punkt startowy dla metody Newtona) podaje użytkownik programu. Należy zastosować jedną z poniższych metod. Metoda bisekcji (połowienia) Dana jest funkcja f : R → R ciągła na przedziale [a, b]. Ponadto f (a)f (b) < 0. Kolejne przybliżenia miejsca zerowego wyznaczamy według wzoru: xi = 12 (ai + bi ) (1) gdzie ai i bi są krańcami przedziału wyznaczonego w i-tym kroku metody. Krańce te wyznaczamy według wzorów: a1 = a b1 = b oraz jeżeli wartość f (a)f (xi ) jest: = 0 ⇒ STOP < 0 ⇒ ai+1 = ai > 0 ⇒ ai+1 = xi bi+1 = xi bi+1 = bi Obliczenia kończymy gdy |f (xi )| < ε (ε - zadana dokładność obliczeń). Metoda regula-falsi Założenia i obliczenia jak w metodzie bisekcji, przy czym kolejne przybliżenia miejsca zerowego wyznaczamy nie według wzoru 1 ale szukając przecięcia z osią x prostej przechodzącej przez punkty (ai , f (ai )) i (bi , f (bi ): ai f (bi ) − bi f (ai ) (bi − ai )f (bi ) = bi − (2) xi = f (bi ) − f (ai ) f (bi ) − f (ai ) Obliczenia kończymy gdy |xi+1 − xi | < ε lub ewentualnie tak jak w metodzie bisekcji. Metoda stycznych (Newtona) Dana jest funkcja f : R → R różniczkowalna na przedziale [a, b]. Metoda jest najszybciej zbieżna ale wymaga różniczkowalności funkcji i wstępnej lokalizacji szukanego miejsca zerowego. Niech x0 będzie danym pierwszym przybliżeniem miejsca zerowego. Kolejne przybliżenia wyznaczamy według wzoru: f (xi ) xi+1 = xi − (3) f ‘(xi ) Obliczenia kończymy gdy |xi+1 − xi | < ε lub ewentualnie tak jak w metodzie bisekcji. 2 Metody Numeryczne - laboratorium 3 06.11.2004 Rozwiązywanie układów równań liniowych. Napisać program rozwiązujący układ równań 2 1 −2 4 2 x0 4 5 1 x 3 5 −1 4 1 = 2 3 −3 x2 −1 1 x3 1 1 4 metodą Gaussa-Croute’a (z tzw. częściowym wyborem elementu głównego). Odp.: x = [−13 21 , −5 43 , 7 34 , 13 14 ]T Metoda Gaussa-Croute’a Dany jest układ równań liniowych postaci Ax = b A = {aij }i,j=0,1,...n−1 jest macierzą kwadratową rzędu n, b = [b0 , b1 , . . . bn−1 ]T wektorem danych, a x = [x0 , x1 , . . . xn−1 ]T wektorem szukanym. dla wszystkich i = 0, 1, ...n − 1 wykonaj: 1. Znajdź wiersz macierzy, dla którego wartość bezwzględna w i-tej kolumnie jest największa, czyli znajdź takie p, że |api | = max{|ai,i |, |ai+1,i |, . . . |an,i |} 2. Zamień wiersze p-ty z i-tym, czyli jeżeli p 6= i to: bp ↔ bi oraz dla wszystkich j = 0, 1, . . . n − 1 wykonaj apj ↔ aij 3. Jeżeli aii = 0 to STOP (układ nie ma jednoznaczengo rozwiązania). 4. Podziel wiersz i-ty przez aii , czyli: bi / = aii oraz dla wszystkich j = i + 1, i + 2, . . . n − 1 wykonaj aij / = aii , po czym aii = 1 5. Wyzeruj i-tą kolumnę poza i-tym wierszem poprzez odejmowanie i-tego wiersza, czyli: dla wszystkich k = 0, 1, . . . , n − 1 jeżeli k 6= i wykonaj: bk − = aki ∗ bi oraz dla wszystkich j = i + 1, . . . n − 1 akj − = aki ∗ aij Po zakończeniu działania algorytmu zmieniony wektor b będzie równy szukanemu wektorowi x. 3 Metody Numeryczne - laboratorium 4 19.11.2005 Interpolacja wielomianowa funkcji jednowymiarowych. Dane jest n punktów (xk , yk ) k ∈ {0, 1, . . . n − 1} zwanych węzłami aproksymacji. Zadaniem interpolacji wielomianowej jest wyznaczenie wielomianu w(x) = n−1 X ai xi i=0 stopnia n takiego, że w(xk ) = yk dla k = 0, 1, . . . n−1. Do tego celu zastosujemy wzór interpolacyjny Lagrange’a, który wprawdzie nie wyznacza explicite współczynników ai szukanego wielomianu, ale pozwala na obliczenie jego wartości w dowolnym punkcie x. Wielomian w(x) można zapisać w alternatywnej postaci w(x) = n−1 X yi Φi (x) i=0 gdzie Φi (x) jest wielomianem stopnia co najwyżej i zwanym wielomianem interpolacyjnym Lagrange’a i ma następującą postać: n−1 Y x − xj Φi (x) = xi − xj j=0 j6=i Warto tu zauważyć, że Φi (xk ) = δik = Zestawiając wzory otrzymujemy: w(x) = n−1 X i=0 " yi n 1 0 n−1 Y j=0 j6=i i=k i6=k . x − xj xi − xj gdzie ξi = # = n−1 X i=0 " ξi n−1 Y # (x − xj ) , (4) j=0 j6=i yi n−1 Y xi − xj j=0 j6=i Istotny jest fakt, iż współczynniki ξi są zależne jedynie od węzłów interpolacji i dla częstego powtarzania procedury wyznaczającej wartość wielomianu interpolującego w danym punkcie możliwe jest ich uprzednie stablicowanie. Dzięki temu obliczenia zostaną przyspieszone. Korzystając ze wzoru 4 napisz procedurę obliczającą wartość w punkcie x wielomianu interpolującego zadane punkty (xk , yk ). 4 Metody Numeryczne - laboratorium 5 27.11.2004 Aproksymacja średniokwadratowa wielomianowa funkcji jednowymiarowych. Dane jest n + 1 punktów (xr , yr ) r ∈ {0, 1, . . . n} zwanych węzłami aproksymacji. Zadaniem aproksymacji średniokwadratowej wielomianowej jest wyznaczenie wielomianu w(x) = k X aj xj j=0 stopnia k ¬ n, takiego że błąd średniokwadratowy przybliżenia danych węzłów jest najmniejszy. Innymi słowy szukamy takich współczynników a0 , a1 , . . . ak , dla których funkcja F (a0 , a1 , . . . , ak ) = n X [yr − w(xr )]2 = r=0 n X [yr − r=0 k X aj xjr ]2 j=0 ∂F osiąga minimum. Dzieje się to wtedy gdy ∀(i = 0, 1, . . . k) ∂a = 0, czyli i n X ∂F ∂w 0= = −2 [yr − w(xr )] (xr ) ∂ai ∂a i r=0 Zauważając, że ∂w ∂ai (xr ) n X r=0 = ∂ ∂ai yr xir = Pk j j=0 aj xr n X = xir możemy napisać w(xr )xir = r=0 n X k X r=0 aj xjr xir = j=0 k X n X j=0 r=0 ! xri+j aj (5) Wprowadźmy następujące oznaczenia bi = n X yr xir mij = r=0 n X xri+j r=0 które pozwalają zapisać równanie 5 w postaci: k X mij aj = bi dla i = 0, 1, . . . k j=0 co jest oczywiście niczym innym jak zapisem (k + 1)-wymiarowego układu równań liniowych Ma = b (6) gdzie M = {mij }, a = {ai }, b = {bi } dla i, j ∈ {0, 1, . . . k}. Korzystając z przedstawionej metody napisz procedurę wyznaczającą współczynniki ai wielomianu aproksymującego zadane punkty (xi , yi ). Do rozwiązania układu równań 6 należy wykorzystać metodę Gaussa. 5 Metody Numeryczne - laboratorium 6 04.12.2004 Całkowanie numeryczne. Zaimplementować funkcję simpleSimpson obliczającą przybliżoną wartość całki funkcji f (x) na przedziale [a, b] metodą prostą Simpsona. Funkcja f (x) jest jedną z niżej wymienionych: f1 (x) = x f2 (x) = 2πsin(2πx) f3 (x) = 2x3 − 4x + 1 Przedział [a, b] jest podawany przez użytkownika programu. Dokładność ε obliczeń zadana jest stałą w kodzie programu. Prosta metoda Simpsona Należy zauważyć, że całkę pewnej prostej funkcji f (x) na przedziale [a, b], można przybliżyć następującą sumą: Z b f (x)dx ≈ a K X xk ∈ [a, b] dla k = 0, 1, . . . , K ξk f (xk ), k=0 co sprowadza problem do obliczenia pola pod wykresem pewnego sklejanego wielomianu interpolującego funkcję f (x) w węzłach xk . W pierwszym kroku prostej metody Simpsona przedział [a, b] dzielony jest na n = 3 równe części: [x0 , x1 ], x0 = a, [x1 , x2 ], x1 = a + 13 (b − a), [x2 , x3 ] x2 = b − 13 (b − a), x3 = b Przybliżoną wartość całki I liczymy jako sumę całek na poszczególnych przedziałach: I= n−1 X Ii (7) i=0 przy czym i hh h = xi+1 − xi (8) f (xi ) + 4f (xi + 21 h) + f (xi+1 ) , 6 stanowi całkę wielomianu trzeciego stopnia aproksymującego funkcję f (x) na przedziale [xi , xi+1 ]. Jest to tzw. wzór Simpsona. W kolejnym kroku metody, każdy z przedziałów jest znowu dzielony na trzy części, co w sumie daje trzykrotnie gęstszy podział odcinka [a, b]. Ponownie wyliczane jest kolejne już przybliżenie wartości całki I według wzoru 7. Ten schemat powtarzny jest w kolejnych krokach tak długo, aż różnica pomiędzy dwoma kolejnymi przybliżeniami całki osiągnie żądaną dokładność, albo, gdy długości przedziałów zmaleją poniżej zadanej granicy. Powyższe rozważania można ująć w następujący algorytm: Ii = I = 0, n = 3 wykonuj: Iprev = I I=0 h = (b − a)/n x=a dla i = 0, 1, . . . , n − 1 wykonuj: I+= f (x) + 4f (x + 12 h) + f (x + h) x+= h I∗= h/6 n∗= 3 dopóki |I − Iprev | > ε1 oraz h > ε2 6 Metody Numeryczne - laboratorium 7 18.12.2004 Równania różniczkowe. Rozwiązać numerycznie następujące równania różniczkowe: dy = ydx, y0 = y(x0 = 0) = C1 = 1 xdy + ydx = 0, y0 = y(x0 = 1) = C2 = 1 dy 4y √ = + x y, y0 = y(x0 = 1) = C32 = 4 dx x Rozwiązanie należy znaleźć w podanym przez użytkownika punkcie. Pomoc: Rozwiązania dokładne dla kolejnych podanych równań wynoszą odpowiednio: y = C1 ex y = C2 /x y = x4 1 2 ln |x| + C3 2 Metoda Rungego-Kutty czwartego rzędu y(x + h) = y(x) + h (K1 + 2K2 + 2K3 + K4 ) 6 gdzie K1 K2 K3 K4 = f (x, y) = f (x + h/2, y + K1 ∗ h/2) = f (x + h/2, y + K2 ∗ h/2) = f (x + h, y + K3 ∗ h) Początkowo przyjmujemy h = x1 −x0 , gdzie x1 jest punktem, w którym szukamy wartości. Wyliczoną wartość y porównujemy z poprzednią i jeśli różnica jest większa niż zadana dokłądność zmniejszamy krok h o połowę i obliczenia powtarzamy tak, aby otrzymać kolejne przybliżenie wartości y(x1 ). Metodę tę można ująć w następujący algorytm: y = y0 k=1 wykonuj: yprev = y y = y0 x = x0 h = (x1 − x0)/k dla i = 0, 1. . . . , k − 1 wykonuj: K1 = f (x, y) K2 = f (x + h/2, y + K1 ∗ h/2) K3 = f (x + h/2, y + K2 ∗ h/2) x+= h K4 = f (x, y + K3 ∗ h) y+= h ∗ (K1 + 2K2 + 2K3 + K4 )/6 k+= 1 dopóki |y − yprev | > ε1 7 Metody Numeryczne - laboratorium 8 08.01.2005 Rozwiązywanie układów równań nieliniowych. Stosując wielowymiarową metodę Newtona rozwiązać układ nieliniowych równań: x2 + z = xy + 2 −x + z 2 = sin(1 − x) + y 3 x−1 e − 3 = y cos(πz) Wymagane przybliżenie początkowe jest podawane przez użytkownika. Przykładowe rozwiązanie: x=1, y=2, z=3 Wielowymiarowa metoda Newtona Wielowymiarowa metoda Newtona rozwiązywania układu nieliniowych równań jest uogólnieniem metody Newtona jednowymiarowej, która, dla różniczkowalnej w wymaganym przedziale, jednowymiarowej funkcji f : R → R, wyznaczała jej miejsce zerowe x(∗) jako efekt zastosowania ciągu iteracji: x(i+1) = x(i) − f (x(i) ) f ‘(x(i) ) (9) poczynając od zadanego przybliżenia początkowego x(0) (porównaj równanie 3 z 2 laboriatorium). Niech dane teraz będzie n równań z n niewiadomymi reprezentowanych przez funkcje: f1 (x1 , x2 , . . . , xn ) = 0 f2 (x1 , x2 , . . . , xn ) = 0 ... fn (x1 , x2 , . . . , xn ) = 0 (10) Aby możliwe było zastosowanie metody Newtona funkcje te muszą być różniczkowalne ze względu na każdą spośród swoich zmiennych w interesującym nas przedziale. Przyjmując oznaczenia x = [x1 , x2 , . . . , xn ]T , F = [f1 , f2 , . . . , fn ]T (11) możemy zapisać nasz układ równań nieliniowych jako F (x) = 0. Jego rozwiązanie sprowadzi się więc do znalezienia miejsca zerowego wielowymiarowej funkcji F : Rn → Rn . Niech ∂f1 ( dF = ∂fi ∂xj ∂x1 ∂f2 ∂x1 )n i,j=1 = . .. ∂fn ∂x1 ∂f1 ∂x2 ∂f2 ∂x2 .. . ··· ··· .. . ∂f1 ∂xn ∂f2 ∂xn ∂fn ∂x2 ··· ∂fn ∂xn .. . (12) będzie macierzą pochodnych funkcji F . Startując od pewnego zadanego przybliżenia początkowego x(0) możemy wyznaczać kolejne stosując iteracje analogiczne jak w metodzie jednowymiarowej: i−1 h x(i+1) = x(i) − dF (x(i) ) · F (x(i) ) (13) Podstawiając ∆x = x(i) − x(i+1) oraz mnożąc obie stony lewostronnie przez dF (x(i) ) otrzymujemy: ( dF (x(i) )∆x = F (x(i) ) x(i+1) = x(i) − ∆x (14) Każdy krok iteracyjny metody sprowadza się więc do rozwiązania liniowego układu równań z macierzą dF i wektorem danych F w celu wyznaczenia przyrostu ∆x, po czym na jego podstawie następuje obliczenie kolejnego przybliżenia szukanego wektora x. Aby rozwiązać układ równań liniowych można użyć np. metody Gaussa-Croute’a (laboratorium 3). Należy przy tym zwrócić uwagę, że macierz dF może być nieodwracalna, a więc rozwiązanie takie może nie istnieć, co wcale nie musi oznaczać, że nie istnieje szukane miejsca zerowe, a jedynie to, że przy zadanym przybliżeniu początkowym metoda Newtona nie może go znaleźć. 8 Metody Numeryczne - laboratorium 9 22.01.2005 Szukanie wartości i wektorów własnych macierzy. Wyznaczyć wektor własny i odpowiadającą jemu wartość własną macierzy 1 −2 1 0 1 −1 0 0 1 1 0 2 2 −1 A= 1 0 1 0 −1 0 2 2 −2 0 1 Należy posłużyć się metodą potęgową wyznaczania wektorów i wartości własnych, przyjmując jako pierwsze przybliżenie wektor x = [1, 0, 0, 0, 0]T . Odp.: m = 3.17, x̄ = [0.475, −0.477, 1, −0.115, −0.924]T . Metoda potęgowa wyznaczania wartości własnej i odpowiadającego jej wektora. Metoda ta jest metodą iteracyjną poprawiającą w każdym kroku kolejne przybliżenia szukanej wartości i wektora. Jako pierwsze przybliżenie wektora własnego danej macierzy A należy przyjąć wektor x taki, że ||x||∞ = 1 przy czym norma nieskończoność zdefiniowana jest jako ||x||∞ = max |xi | i Algorytm można zdefiniować następująco: wykonuj: v = Ax m = ||v||∞ jeżeli m = 0 szukana wartość nie istnieje, koniec v = v/m e = ||v − x||∞ x=v dopóki e > ε a także |e − 2| > ε jeżeli |e − 2| < ε przyjmij m = −m Po wykonaniu algorymu prawdziwe z dokładnością ε powiny być następujące zależności: ||x||∞ = 1 Ax = mx, Stąd wnioskujemy, że m jest szukaną wartością własną, a x odpowiadającym jej wektorem własnym. 9