POLITECHNIKA LUBELSKA | LABORATORIUM „Metod numerycznych” |
---|---|
Widz Marcin | Semestr III |
Temat ćwiczenia: Rozwiązywanie równań nieliniowych |
Data wykonania 19.12.2012 |
Temat ćwiczenia:
Rozwiązywanie równań nieliniowych metodami:
- Bisekcji
- RegulaFalsi
- Stycznych
Podana funkcja:
f(x) = 8x − 4x2 − 6x3 + x4 + x5
Wykres funkcji:
Metoda Bisekcji
clc;
clear;
xdel(winsid());
disp("MetodaBisekcji");
functionf=nieliniowa(x);// Wprowadzenie funkcji.
f=8*x-4*x^2-6*x^3+x^4+x^5;
endfunction;
x00=linspace(-10,10,1000);// Wykres funkci.
subplot(121);
plot2d(x00,nieliniowa(x00),axesflag=5,rect=[-4,-10,4,10]);
S=input("Podaj punkt startowy: ");//Wprowadzenie punktów.
K=input("Podaj punkt końcowy: ");
delt=input("Podaj dokladnoscobliczen ");//Wprowadzenie dokładności.
t=1;
x1=nieliniowa(S);
x2=nieliniowa(K);
W=x1*x2;
P=S+(K-S)/2;
ex=P-S;
ifW<0then;// Paczatekpetli if.
x(t)=(K-S)/2+S;
whileabs(x1+x2)>delt&abs(ex)>delt;// Paczatekpetli while.
t=t+1;
P=(K-S)/2+S;
x2=nieliniowa(P);
W=x1*x2;
ifW<0then;// Paczatekpetli if.
K=P;
x(t)=(K-S)/2+S;
ex=P-S;
else;
x2=nieliniowa(S);
x1=nieliniowa(P);
S=P;
x(t)=(K-S)/2+S;
ex=K-P;
end;// Koniecpetli if.
end;// Koniecpetli while.
disp("Liczba iteracji:");
disp(t);
disp("Wartosc miejsca zerowego :");
disp(x(t));
subplot(122);
x01=linspace(1,t,t);
plot2d(x01,x');
else;
disp("Błędny przedział");
end;// Koniec petliif.
RegulaFalsi:
clc;
clear;
xdel(winsid());
disp("Metoda: RegulaFalsi");
functionf=nieliniowa(x);// Wprowadzenie funkcji.
f=8*x-4*x^2-6*x^3+x^4+x^5;
endfunction;
x00=linspace(-10,10,1000);// Wykres funkci.
subplot(121);
plot2d(x00,nieliniowa(x00),axesflag=5,rect=[-4,-10,4,10]);
S=input("Podaj punkt startowy: ");//Wprowadzenie punktów.
K=input("Podaj punkt końcowy: ");
ex=input("Podaj dokladnoscobliczen ");//Wprowadzenie dokładności.
t=1;
W=nieliniowa(K)*nieliniowa(S);// Sprawdzenie warunku.
ifW<0then;// Poczatekpetliif.
x1=S;
x2=K;
x(t)=(x1*nieliniowa(K)-K*nieliniowa(S))/(nieliniowa(K)-nieliniowa(S));
f=abs(nieliniowa(x(t)));//Sprawdzenie warunku dokładności.
whilef>ex;// Poczatekpetli while.
ifnieliniowa(x(t))*nieliniowa(S)<0then;//Poczatekpetliif.
x1(t+1)=x1(t);
x2(t+1)=x(t);
else;
x1(t+1)=x(t);
x2(t+1)=x2(t);
end;// Koniecpetli if.
x(t+1)=(x1(t)*nieliniowa(x2(t))-x2(t)*nieliniowa(x1(t)))/(nieliniowa(x2(t))-nieliniowa(x1(t)));
f(t+1)=abs(nieliniowa(x(t+1)));
t=t+1;
end;//Koniecpetli while.
disp("Liczba iteracji:");
disp(t);
disp("Wartosc miejsca zerowego :");
disp(x(t));
subplot(122);
x01=linspace(1,t,t);
plot2d(x01,x');
else;
disp("Błędny przedział");
end;// Koniec petliif.
Stycznych:
clc;
clear;
xdel(winsid());
disp("MetodaStycznych");
functionf=funkcja(x);
f=8*x-4*x^2-6*x^3+x^4+x^5;
endfunction;
functionp=pochodna(x);
p=8-8*x-18*x^2+4*x^3+5*x^4;
endfunction;
x00=linspace(-10,10,1000);// Wykresfunkci.
subplot(121);
plot2d(x00,funkcja(x00),axesflag=5,rect=[-4,-10,4,10]);
S=input("Podaj punkt startowy: ");//Wprowadzenie punktów.
K=input("Podaj punkt końcowy: ");
ex=input("Podaj dokladnoscobliczen ");//Wprowadzenie dokładności.
t=1;
W=funkcja(K)*funkcja(S);
ifW<0then;// Paczatekpetli if.
x1=S;
x2=K;
x(t)=x2-(funkcja(x2)/pochodna(x2));
sx=abs(funkcja(x(t)));
whilesx>ex;// Paczatekpetli while.
iffunkcja(x(t))*funkcja(K)<0then;// Poczatekpetliif.
x1(t+1)=x1(t);
x2(t+1)=x(t);
else;
x1(t+1)=x(t);
x2(t+1)=x2(t);
end;// Koniecpetli if.
x(t+1)=x(t)-(funkcja(x(t))/pochodna(x(t)));
sx(t+1)=abs(funkcja(x(t+1)));
t=t+1;
end;// Koniecpetli while.
disp("Liczba iteracji:");
disp(t);
disp("Wartosc miejsca zerowego :");
disp(x(t));
subplot(122);
x01=linspace(1,t,t);
plot2d(x01,x');
else;
disp("Błędny przedział");
end;// Koniec petliif.
Wnioski:
Przedział: | Bisekcji: | RegulaFalsi: | Stycznych: |
---|---|---|---|
Wartość: | Ilość iteracji: | Wartość: | |
<-0,1;0,1> | 0,0996094 | 9 | 0,0000084 |
<0,9;1,1> | 1,0996094 | 9 | 0,9999803 |
<1,9;2,1> | 2,0996094 | 9 | 1,9999805 |
Porównując otrzymane wyniki można stwierdzić, że metoda Bisekcji jest najmniej dokładna i wymaga dużej liczby iteracji.
Najszybciej zbieżna jest metoda Stycznych, jednak jej wadą jest
to, że może nie osiągnąć zbieżności jeśli punkt początkowy jest w znacznym stopniu oddalony od miejsca zerowego.