Grzegorz Pasek 171604
METODY NUMERYCZNE – SPRAWOZDANIE NR 3
·Rozwiązywanie równań nieliniowych jednej zmiennej metodą bisekcji, siecznych i Newtona
Zad 2. Implementacja metody siecznych oraz metody Newtona i poszukiwanie ich promienia zbieżności do rozwiązania równania x3 + x2 − 3x − 2 = 0 na przedziale [-3,-1] oraz [-1,1]
Najpierw zaimplementowałem metodę siecznych, wg następującego rekurencyjnego wywołania:
$$x_{i} = x_{i - 1} - f\left( x_{i - 1} \right)\frac{\left( x_{i - 1} - x_{i - 2} \right)}{f\left( x_{i - 1} \right) - f\left( x_{i - 2} \right)}$$
W Matlabie wyglądała ona następująco:
%metoda siecznych
a=-3;
b=-1;
x(1)=a;
x(2)=b;
for i=3:1:10
x(i)=x(i-1)-(x(i-1)^3+x(i-1)^2-3*x(i-1)-2)*(x(i-1)-x(i-2))/((x(i-1)^3+x(i-1)^2-3*x(i-1)-2)-(x(i-2)^3+x(i-2)^2-3*x(i-2)-2));
x(i)
end
Metoda powyżej znajduje rozwiązanie dla przedziału [-1;1] w nast. krokach
x = -1.1667
x = -0.3898
x = -0.6748
x = -0.6208
x = -0.6180
x = -0.6180
Po wywołaniu dla drugiego przedziału [-3, -1] widać, że metoda znajduje wynik, który jest poza przedziałem, oznacza to, że promień zbieżności jest mniejszy i trzeba poszukać właściwego
ans = -1.1667
ans = -0.3898
ans = -0.6748
ans = -0.6208
ans = -0.6180
sukcesywnie zmniejszałem prawą granicę, aż do -1.3, kiedy pojawiło się właściwe rozwiązanie
ans = -1.4911
ans = -24.2657
ans = -1.4934
ans = -1.4957
ans = -3.4316
ans = -1.6185
ans = -1.7224
ans = -2.2261
ans = -1.9354
ans = -1.9871
ans = -2.0009
ans = -2.0000
ans = -2.0000
Eksperymentalnie zwiększałem więc promień zbieżności w drugą stronę poszukując kiedy algorytm się rozjedzie.
Dla a=-5.7 ciągle otrzymuję dobry wynik.
Dla a=-5.8 wynik otrzymany jest poza zakresem.
Promień zbieżności dla metody siecznych jest więc równy -5.7 do -1.3.
Sprawdziłem też promień zbieżności dla drugiego zadanego przedziału i otrzymałem od -1.9 do 1.4.
Następnie zaimplementowałem metodę Newtona przy pomocy rekurencyjnego wzoru:
$$x_{i} = x_{i - 1} - \frac{f\left( x_{i - 1} \right)}{f^{'}\left( x_{i - 1} \right)}$$
a1 = -3; % poczatek przedzialu
b1 = -1; % koniec przedzialu (punkt startowy metody)
x(1)=a1;
x(2)=b1;
h = 0.0001; % blad numeryczny
k=2;
while k<100 % przerwanie po dluzszym czasie
Poch=(3*(x(k))^2)+2*x(k)-3;
Poch
Licz=((x(k))^3+(x(k))^2-3*x(k)-2)
Licz
x(k+1)=x(k)-Licz/Poch;
x(k+1)
k=k+1;
end
W tym przypadku pojawia się ten sam błąd co dla metody siecznych, tj. metoda Newtona znajduje pierwiastek, ale leżący poza przedziałem.
Dla zmniejszonego punktu startowego (-1.4) pojawia się prawidłowe rozwiązanie.
W przypadku punktu startowego 1, dla przedziału -1,1 metoda znów jest rozbieżna, dopiero po zmniejszeniu punktu startowego do 0.3 znajduje prawidłowe rozwiązanie.
Wszystkie te rozbieżności dzieją się dlatego, że metoda siecznych oraz Newtona może być stosowana tylko wtedy, gdy funkcja na zadanym przedziale jest ciągła i jeśli w danym przedziale pierwsza i druga pochodna nie przyjmuje wartości zerowych.
Ten drugi warunek nie jest spełniony w poszukiwaniach, dlatego trzeba było manipulować promieniem zbieżności (punktem startowym).
Zad 3.
Żeby uniknąć błędów popełnionych w poprzednich zadaniach najpierw wykreśliłem komputerowo fragment funkcji w którym występują miejsca zerowe.
Następnie należy sprawdzić, czy pochodne przyjmują na przedziałach wartości zerowe.
Pierwsza pochodna Druga pochodna
Żeby znaleźć miejsca zerowe wybieram więc przedziały: [-2,0], [0.5,1.5], [3,4]
Algorytm znajduje miejsca zerowe po kolei:
ans1 = -0.458962267536948
ans2 = 0.910007572488709
ans3= 3.733079028632814