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.