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.