Metody Numeryczne 1 Laboratorium 3 Numeryczne
Transkrypt
Metody Numeryczne 1 Laboratorium 3 Numeryczne
Metody Numeryczne 1 Laboratorium 3 Numeryczne rozwiązywanie równań nieliniowych Zadanie 1 Uruchomić m. funkcję Newton w Octave - rozwiązywania równania nieliniowego metodą Newtona: function [x, iter] = newton(f_name,df_name,x0,maxit,eps) # FUNKCJA: [x,iter] = newton( f_name, df_name, x0, maxit, eps ) # OPIS: Rozwiazuje f(x) = 0 metoda Newtona # WEJSCIE: x0 - przyblizenie poczatkowe; maxit - max liczba iteracji # eps - tolerancja. # Wymaga zdefiniowanych M-funkcji f(x) oraz df(x). # WYJSCIE: x - rozwiazanie; iter - liczba wykonanych iteracji # pierwszy blok komentarzy sluzy jako opis definiowanej funkcji. # piszac w Octave : help newton # wyswietla w/w opis! # przyblizenie poczatkowe x=x0; # iter licznik iteracji iter = 0; # zwrocmy uwage w jaki sposob wywolujemy funkcje o danej nazwie # zakladamy, ze wartosci funkcji f(x) obliczane sa funkcja o nazwie f_name, # zdefiniowana przez uzytkownika w pliku o nazwie f_name.m ( podobnie f'(x) #oblicza funkcja df_name) fx = feval( 'f_name',x ); dfx = feval('df_name',x); # petla Newtona: iterujemy dopoki residuum nie spadnie poniżej # tolerancji " eps ", badz # poki nie przekroczy limitu tolerancji "maxit" while (abs(fx)> eps) & ( iter < maxit ) x = x - fx/dfx; fx = feval('f_name',x); dfx = feval( 'df_name',x); iter = iter + 1; end end Zadanie2 Uruchomić m.funkcję bisekcja w Octave - rozwiązywania równania nieliniowego metodą bisekcji function c = bisekcja(fcn,a,b,blad) % c = bisekcja ('fcn',a,b,blad) % % Funkcja "bisekcja" oblicza miejsca zerowe funkcji fcn w przedziale [a,b] z tolerancja blad. % Obliczenie wartosci funkcji na krancach przedzialu, aby sprawdzic, czy zmienia ona znak. fa = feval('fcn',a); fb = feval('fcn',b); if( fa*fb >= 0) error('funkcja musi przyjmowac znaki przeciwne w a i b') end % Wskaznik done jest uzyty jako przelacznik logiczny instrukcji done=0 i done=1 done = 0; % Punkt srodkowy przedzialu c = (a + b)/2; % Petla glowna while abs(a-b)> 2*blad & (~done) % Obliczenie wartosci funkcji w srodku przedzialu fc = feval('fcn',c); if fa*fc < 0 % Miejsce zerowe znajduje sie na lewo od punktu c b = c; fb = fc; c = (a + b)/2; elseif fc*fb < 0; % Miejsce zerowe znajduje sie na prawo od punktu c a = c; fa = fc; c = (a + b)/2; else % Polozenie miejsca zerowego funkcji jest okreslone done = 1; end end c % Uwaga Uruchomienie programu >> x = bisekcja('fcn',-1,0,10^(-6)) Zadanie 3 Rozwiązać za pomocą uruchomionych programów z zadania 1 i 2 miejsce zerowe funkcji f ( x) = x − sin( x) − 1. Porównać otrzymane wyniki. Zadanie 4 Znaleźć miejsce zerowe funkcji z zadania 3, wykorzystując funkcję standardową Octave fzero. Wskazówka: Skorzystać z help Octave.