Metody iteracyjne
Transkrypt
Metody iteracyjne
Rozdział 1 Metody iteracyjne Metody iteracyjne to metody poszukiwania rozwiązań równania f (x) = 0. Będziemy wykonywać ciąg obliczeń prowadzący do coraz lepszych przybliżeń niewiadomego miejsca zerowego. 1.1 Metoda bisekcji Załóżmy, że funkcja f jest ciągła i znamy dwie liczby x1 , x2 takie, że f (x1 ) · f (x2 ) < 0. Wtedy z własności Darboux wynika, że między x1 i x2 jest pierwiastek rozważanego równania. Aby go odnaleźć postępujemy następująco: Niech x będzie połową przedziału [x1 , x2 ]. Zastępujemy x1 bądź x2 przez x tak, aby cały czas zachodził warunek f (x1 )·f (x2 ) < 0. Procedurę kontynuujemy tak długo aż będziemy usatysfakcjonowani uzyskaną dokładnością. Przykładowa implementacja metody bisekcji w Octave zawarta jest w funkcji bisect: bisect.m function bisect(f, x0, x1, M = 100, delta = eps, epsilon k = 0; fx0 = f(x0); fx1 = f(x1); printf('x%-3d = %30.26f, f(x%-3d) = %30.26f\n', k, x0, ++k; printf('x%-3d = %30.26f, f(x%-3d) = %30.26f\n', k, x1, ++k; if sign(fx0) == sign(fx1) printf(cstrcat('Między zadanymi wartościami ', 'niekoniecznie znajdziemy pierwiastek\n')) return end e = x1 - x0; while k <= M e = e/2; x2 = x0 + e; fx2 = f(x2); printf('x%-3d = %30.26f, f(x%-3d) = %30.26f\n', k, x2, ++k; if abs(fx2) < epsilon || abs(e) < delta break end if sign(fx2) != sign(fx0) x1 = x2; fx1 = fx2; else x0 = x2; fx0 = fx2; end end end 1 = eps) k, fx0) k, fx1) k, fx2) ROZDZIAŁ 1. METODY ITERACYJNE 2 Przykładowa implementacja metody stycznych zawarta jest w funkcji newton: newton.m function newton(f, fp, x0, M = 100, delta = eps, epsilon = eps) k = 0; fx0 = f(x0); printf('x%-3d = %30.26f, f(x%-3d) = %30.26f\n', k, x0, k, fx0) ++k; while k <= M if abs(fx0) < epsilon break end x1 = x0 - fx0/fp(x0); fx0 = f(x1); printf('x%-3d = %30.26f, f(x%-3d) = %30.26f\n', k, x1, k, fx0) ++k; if abs(x1-x0) < delta break end x0 = x1; end end Zadanie 1. Wzorując się na dwóch powyższych przykładach napisać implementację metody siecznych w funkcji secant: function secant(f, x0, x1, M = 100, delta = eps, epsilon = eps) Zadanie 2. Znajdź dodatni pierwiastek równania x2 − 4x sin x + 4 sin2 x = 0 metodami bisekcji, siecznych i stycznych. Porównaj ilość kroków. Zadanie 3. Wykonaj ręcznie 3 kroki metody bisekcji dla równania x2 − 5 = 0. Zadanie 4. Znajdź przybliżony pierwiastek równania x3 − 3x2 − 2x + 5 = 0 metodą stycznych z dokładnością 0.1, wiedząc, że jest on w przedziale [1, 2]. Zadanie 5. Znajdź przybliżony pierwiastek równania x3 + x − 1 metodą siecznych zaczynając od x0 = 0, x1 = 1. Zadanie 6. Znajdź pierwiastek równania w zadanym przedziale: 1 − tg x = 0, x 1 − 2x = 0, x 2−x + ex + 2 cos x − 6 = 0, 3 [0, π ]; 2 [0, 1]; [1, 3]; 2 x + 4x + 3x + 5 = 0, 2x3 − 9x2 + 18x − 2 [0, 4]. Zadanie 7. Spróbuj znaleźć pierwiastek równania x − tg x w przedziale [1, 2] metodą bisekcji. Wytłumacz otrzymane wyniki. Zadanie 8. Znaleźć pierwiastek równania: x8 − 36x7 + 546x6 − 4536x5 + 22449x4 − 67284x3 + 118124x2 − 109584x + 40320 = 0 w przedziale [5.5, 6.5]. Następnie zamienić współczynnik −36 na −36.001 i √ powtórzyć. Zadanie 9. Korzystając z metody Newtona podać algorytm obliczania R, gdzie R jest liczbą dodatnią. Zadanie 10. Wielomian x3 + 94x2 − 389x + 294 ma pierwiastki 1, 3, −98. Korzystając z metody Newtona dla tego równania i startując z punktu 2 zobacz co się dzieje. Zadanie 11. Na rachunek oszczędnościowy z miesięcznym okresem kapitalizacji odsetek wpłacano przez 60 miesięcy środki, w kolejnych latach odpowiednio po 200, 250, 320, 375, 350 złotych. Po ostatniej wpłacie na rachunku znajdowało się 52615 złotych. Jaka była średnia wysokość odsetek na rachunku w tym okresie? Użyj odpowiedniej, wybranej przez siebie metody iteracyjnej.