METODY NUMERYCZNE
ĆWICZENIE 6
Znajdowanie miejsc zerowych równań nieliniowych
Zadaniem naszej grupy było znalezienie miejsc zerowych równań nieliniowych za pomocą podanych metod numerycznych. Mieliśmy podane funkcje i badaliśmy ma ich podstawie różne metody obliczania miejsc zerowych podając im przedziały, na jakich te metody będą pracowały oraz warunek błędu, jaki musiał być spełniony, aby zakończyć obliczenia. Wybraliśmy trzy metody z czterech zaproponowanych:
- bisekcji( połowienia)
- falsi
- siecznych
Metoda bisekcji - polega na podaniu początkowego przedziału, jaki ma zostać zbadany, przedział ten musi spełniać warunki:
- funkcja musi być ciągła
- musi przyjmować różne znaki na końcach przedziałów
Funkcja sprawdza czy końce przedziału spełniają warunek pierwszy, jeśli tak to przedział zostaje przepołowiony i sprawdza się drugi warunek. Zadanie kończy się w momencie wyliczenia pierwiastka z dokładnością wcześniej zadana lub z ograniczeniem liczby iterakcji, jakie wprowadzimy.
x=(a+b)/2;
if f1(a)*f1(x)>0
a=x;
else
b=x;
end
Metoda falsi - polega ona dokładnie tak samo jak metoda bisekcji z ta różnicą ze nie dzielimy na pół a wyznaczamy sieczną, sieczna ta wyznaczona jest przez dwa punkty. Nowe granice tak samo jak i warunek stopu realizuje się tak samo jak w metodzie bisekcji.
x=a-f1(a)*(b-a)/(f1(b)-f1(a));
Metoda siecznych - sens tej metody polega na przyjęciu, że funkcja na dostatecznie małym odcinku <a,b> w przybliżeniu zmienia się w sposób liniowy. W metodzie tej każde następne przybliżenie pierwiastka wyliczane jest na podstawie dwóch poprzednich, które musimy podać na samym początku. Rysujemy tak jakby prosta przechodzącą przez te punkty i obliczamy pierwsze przybliżenie. Jeżeli wartość funkcji w tym przedziale jest równa zero lub mniejsza od zadanego stopu to otrzymujemy wtedy pierwiastek i kończymy algorytm. Jeżeli nie to powtarzamy rysowanie prostej tylko tym razem za końcowe punkty podstawiamy obliczone wcześniej przybliżenia.
if f1(a)*f1(b)<0
x=a-f1(b)*((b-a)/(f1(b)-f1(a)));
Po napisaniu programów realizujących podane funkcje przystąpiliśmy do zrealizowania kolejnych poleceń:
Zbadaliśmy dla wybranych metod szacunkowej wartości wyrażeń przy warunkowym błedzie 0,01 uzyskalismy odpowiednio wartości:
Dla y = √3 metoda falsi : 2.4662
Dla y = 3√15 metoda bisekcji : 2.4662
Dla y = 4√16 metodą siecznych : 2.4609
Kolejnym etapem ćwiczenia było porównanie skuteczności porównanych metod dla podanych przypadków:
y1(x) = (x+6)*(x+∏)*(x+√2)*(x-√50)*(x-4∏)
y2(x) = (log(x2)-1/x - 1
y3(x) = sin(x) - cos(x2)
Zbadaliśmy zbieżność wybranej procedury i uzyskaliśmy odpowiednio następujące wyniki:
Metoda/funkcja |
Bisekcji |
Falsi |
siecznych |
y1(x) |
12.5664 |
12.5664 |
-1.3643e+003 |
y2(x) |
-0.9973 i 2.0898 |
1 i 1 |
1 i 1 |
y3(x) |
-6.0321 |
0.8458 |
-48.7342 |
Zbadaliśmy rowniez liczbę iteracji:
Metoda/funkcja |
Bisekcji |
Falsi |
siecznych |
y1(x) |
28 |
79679 |
100000 |
y2(x) |
12 i 12 |
5 i 7 |
100000 |
y3(x) |
20 |
9 |
22 |
Wzrost liczby iteracji po zwiększeniu dokladnosci o jeden rząd na 0.001
Metoda/funkcja |
Bisekcji |
Falsi |
siecznych |
y1(x) |
31 |
92582 |
100000 |
y2(x) |
15 i 14 |
5 i 9 |
100000 |
y3(x) |
23 |
10 |
1832 |
Wybierane przedziały zawierały się pomiędzy -100 do 100, natomiast w drugiej funkcji badalismy od -100 d0 1 i od 1 do 100 ponieważ funkcja logarytmiczna nie jest ciągła wiec trzeba było rozważyć jako dwa oddzielne przypadki.
Wnioski:
W porównaniu zbieżności w zależności od badanej metody uzyskaliśmy różne wyniki. Różnica ta wynika z dobieranych przedziałów i Np. w metodzie siecznych wartość końcowa jest obliczana na podstawie warunków początkowych wiec jest zależna od warunków, jakie podamy na początku.
W funkcji drugiej widać ze jest ona nie ciągła i możemy uzyskać trzy różne wyniki, ponadto w metodzie siecznych jest bardzo ciężko dobrać odpowiednie warunki początkowe. Rozbieżność wyników trzeciej funkcji wynika z zadanych początkowych wartości przedziałów gdyż po przyjęciu innych wartości przedziałów zmieniały się wartości pierwiastków. Powodowane jest to tym że funkja może mieć kilka rożnych pierwiastków i funkcja znajduje i wypisuje pierwszy a następnie kończy działanie. Aby znaleźć kolejne pierwiastki należałoby podać za początek przedziału wartość minimalnie mniejsza od znalezionego pierwiastka lub większą w zależności, w która stronę szukamy.
Wraz ze zwiększeniem dokładności zwiększa się liczba iterakcji świadczy to o tym ze powinniśmy rozważyć czy zadana dokladnosc nie jest za duża, ponieważ dobre dobranie dokładności wpłynie na szybkość wykonywanej operacji. Używając metody siecznych trzeba mieć na uwadze, iż ta metoda nie polega na badaniu w danym przedziale a na szukaniu mając podane dwie pierwsze wartości, nieodpowiednio dobrane wartości mogą być nieodpowiednie i zadanie nie zostanie wykonane gdyż po prostu może nie istnieć funkcja o takich warunkach początkowych.
Zmienianie zakresu startowego przynosi zmiany w wynikach odpowiednio takie ze zwiększając zakres zwiększamy rowniez prawdopodobieństwo, iż w danym zakresie znajduje się szukany pierwiastek, a zmniejszając zakres przyspieszamy działanie metody. Narażamy wtedy się na to, iż w podanym węższym zakresie może się nie znalźć szukany pierwiastek. W praktyce nie opłaca się zmniejszać gdyż zyskujemy jedna dwie iteracje a na szybkości wykonywania zmiana jest niezauważalna.
Na podstawie zadania można zauważyć ze należy rozważyć dokładnie wybór odpowiedniej metody gdyż używając jednej metody można nie znaleźć miejsca zerowego a inna zrobi to po kilku iterakcjach. Przykład to funkcja pierwsza i druga gdzie za pomocą metoda bisekcji jest znacznie szybsza jak falsi. Natomiast metoda siecznych nie sprawdziła się wcale. Przyczyny szukać należy w warunkach początkowych, które podajemy do dalszych obliczeń, gdyż podane warunki mogą nie istnieć i nie wiemy czy jest rzeczywiście jakaś funkcja, która spełni te warunki. Dlatego przy wyborze tej metody warto się dokładnie zastanowić. Może ona służyć do szukania kolejnych miejsc zerowych, jeśli znamy przynajmniej dwa z nich.