sprawozdanie cw5 Michał Wróbel Marek Niemiec gr 4C3


Sprawozdanie
Temat ćw5: Numeryczne rozwiązywanie równań i układów równań nieliniowych
Sprawozdanie wykonali:
Marek Niemiec 152139
Michał Wróbel 152180
W pierwszej części ćwiczenia mieliśmy za zadanie napisać M-funkcję realizującą metody
bisekcji, siecznych i Newtona. Następnie zastosować napisane procedury do znalezienia
pierwiastków równań podanych przez prowadzącego.
Funkcja, jaką otrzymaliśmy od prowadzącego, miała postać f śą xźą=x2-2 .
Pierwsza M-funkcja realizowała metodę bisekcji. Metoda jest oparta o twierdzenie Bolzano-
Cauchy'ego : Jeżeli funkcja ciągła f(x) ma na końcach przedziału domkniętego wartości różnych
znaków, to wewnątrz tego przedziału istnieje co najmniej jeden pierwiastek równania f(x) = 0. Więc
należy pamiętać o spełnieniu dwóch założeń:
 funkcja f(x) jest ciągła w przedziale domkniętym [a;b]
 funkcja przyjmuje różna znaki na końcach przedziału: f(a)f(b) < 0
M-plik funkcji ma postać:
% funkcja f(x)= x^2 -2
x=[-2:0.01:4];
y=[(x.^2)-2];
plot(x,y),grid
% metoda bisekcji
% xi=(b+a)/2
% przedział <-1,2>
b=(2);
a=(-1);
xi=a;
for i=1:1:14
blad(1,:)=1.4142135-xi;
hold on
plot(a,0,'r*',b,0,'b^')
if (((b^2 - 2)*(xi^2 -2)) < 0)
a=xi;
xi=(b+a)/2
else
b=xi;
xi=(b+a)/2
end
end
figure
hold on
plot(xi,0,'b*'),grid
figure
zak_x=[1:1:14];
plot(zak_x,blad)
Pierwszy poprawny wynik (z dokładnością do czwartego miejsca po przecinku) uzyskaliśmy
po 14 iteracji. Kolejne zawężanie przedziału [a;b] zostało pokazane na wykresach. Gwiazdką ' * '
została oznaczona zmiana pierwszego z krańców przedziału położonego w stronę -" , natomiast
trójkątem ' ^ ' została oznaczona zmiana drugiego z krańców przedziału położonego w stronę +" .
Kolejne iteracje pozwalają otrzymać wynik z pożądaną dokładnością. Czas obliczeń i ilość
równań jest proporcjonalna do ilości iteracji. Błąd obliczeń zanika bardzo szybko  wykres błędu
poniżej:
Druga M-funkcja realizowała metodę Newtona. Metoda przyjmuje następujące założenia dla
funkcji f:
 w przedziale [a;b] znajduje się dokładnie jeden pierwiastek
 funkcja ma różne znaki na krańcach przedziału, tj. f(a)f(b) < 0
 Pierwsza i druga pochodna funkcji mają stałe znaki w tym przedziale
M-plik ma postać:
x(1)=1;
for i=1:1:3
fx=x(i)^2 - 2;
fxx=2*x(i);
x(i+1)=([x(i)]-[fx/fxx])
end
Wyniki:
x=
1.0000 1.5000
x =
1.0000 1.5000 1.4167
x =
1.0000 1.5000 1.4167 1.4142
Widać, że pożądany wynik (z dokładnością do czwartego miejsca po przecinku)
uzyskaliśmy już w trzeciej iteracji. Metoda jest dużo szybsza od metody bisekcji, jednak pojawia
się trudność z wyliczeniem pierwszej i drugiej pochodnej w bardziej złożonych funkcjach.
Ostatni M-funkcja realizowała metodę siecznych. Metoda ta polega na przyjęciu, że funkcja
na dostatecznie małym odcinku [a;b] w przybliżeniu zmienia się w sposób liniowy. Możemy wtedy
na odcinku [a;b] krzywą y=f(x) zastąpić sieczną. Za przybliżoną wartość pierwiastka przyjmujemy
punkt przecięcia siecznej z osią 0X. Zaleta jest taka, że do wykonania interpolacji za pomocą tej
metody nie jest potrzebna znajomość pochodnych funkcji. Jednak gdy wybierzemy zbyt mały
przedział [a;b] metoda ta może nie być zbieżna.
M-plik ma postać:
% funkcja f(x)=x^2-2
% metoda siecznych x(n+1)=x(n) - (f(x(n))(x(n)-x(n-1)))/(f(n)-f(x(n-1)))
% na przedziale [-1,2]
x(1)=-1;
x(2)= 2;
for n=2:1:8
fxn=x(n)^2 -2;
fxn_1=x(n-1)^2 -2;
x(n+1)=x(n) - (fxn * (x(n) - x(n-1)))/(fxn - fxn_1)
end
plot(x,'r*'),grid,xlabel('nr iteracji')
Wyniki:
x =
-1.0000 2.0000 0 1.0000 2.0000 1.3333 1.4000 1.4146 1.4142
Wykres przedstawiający wyniki:
Z pośród metod Newtona, siecznych i bisekcji okazało się, że najszybciej możemy uzyskać
wynik metodą Newtona, jednak problemem mogą być pochodne funkcji. Następną w szybkości
działania jest metoda siecznych, tu należy pamiętać o wyborze zbyt małego przedziału.
Najwolniejszą z badanych metod okazała się metoda bisekcji, jednak do obliczania pierwiastków
złożonych funkcji może się okazać zbyt czasochłonna.
W drugiej części ćwiczenia analizowaliśmy metody wbudowane Laguerre'a, Bairstow'a i
Lehmer'a. Najpierw wyznaczyliśmy pierwiastki, następnie przy pomocy funkcji poly uzyskaliśmy
równanie. Kolejnym krokiem było wyliczenie pierwiastków uzyskanego równania i porównanie ich
z pierwiastkami, przy pomocy których stworzyliśmy równanie.
M-plik ma postać:
% dokladność
u=[1e-3, 1e-5, 1e-9];
% pierwiastki równania
pierwiastki=[-2,2-i,2,2+i,4,4,7];
% uzyskanie funkcji metodąpoly
p=poly([-2,2+i,2-i,2,4,4,7]);
for k=1:3
n=u(k);
[pierw_bair,Literacji]=bairstow(p,n);
bair_pier_Liter(:,:,k)=[sort(pierw_bair),Literacji];
[pier_lag]=sort(laguerre(p,n));
lag_pier(:,k)=pier_lag;
[pier_leh]=sort(lehmer(p,n));
leh_pier(:,k)=pier_leh;
end
lag_pier
leh_pier
bair_pier_Liter
Wyniki:
lag_pier =
-2.0000 - 0.0000i -2.0000 - 0.0000i -2.0000 + 0.0000i
2.0000 2.0000 2.0000
2.0000 - 1.0000i 2.0000 + 1.0000i 2.0000 - 1.0000i
2.0000 + 1.0000i 2.0000 - 1.0000i 2.0000 + 1.0000i
3.9997 - 0.0001i 4.0000 - 0.0000i 4.0000 - 0.0000i
4.0003 + 0.0001i 4.0000 + 0.0000i 4.0000 + 0.0000i
7.0000 + 0.0000i 7.0000 - 0.0000i 7.0000 - 0.0000i
leh_pier =
1.9999 + 0.0000i 2.0000 + 0.0000i -2.0000 - 0.0000i
-1.9999 + 0.0000i -2.0000 + 0.0000i 2.0000 + 0.0000i
2.0015 - 0.9982i 2.0000 + 1.0000i 2.0000 - 1.0000i
2.0017 + 0.9982i 2.0000 - 1.0000i 2.0000 + 1.0000i
3.9369 3.9939 + 0.0000i 4.0000 + 0.0000i
4.0602 + 0.0000i 4.0061 + 0.0000i 4.0000 - 0.0000i
6.9998 - 0.0000i 7.0000 + 0.0000i 7.0000  0.0000i
bair_pier_Liter(:,:,1) = 7.0001 0 4.0000 4
bair_pier_Liter(:,:,2) = 7.0001 0
2.0000 14 bair_pier_Liter(:,:,3) =
-2.0001 14 2.0000 21
2.0000 - 1.0003i 11 -2.0000 21 2.0000 99
2.0000 + 1.0003i 11 2.0000 - 1.0002i 11 -2.0000 99
3.9994 4 2.0000 + 1.0002i 11 2.0000 - 1.0000i 12
4.0006 4 4.0000 4 2.0000 + 1.0000i 12
4.0000 5 4.0000 5 7.0000 0
Począwszy od pierwszej kolumny od lewej strony są pokazane pierwiastki uzyskane
poszczególnymi metodami z określona dokładnością. Dodatkowo w metodzie Bairstow'a
dodatkowe kolumny parzyste określają ilość iteracji jaka była potrzeba do uzyskaniu wyniku.
Porównując wyniki widać, że różnice są minimalne tak między metodami jak i między
dokładnością obliczeń.


Wyszukiwarka

Podobne podstrony:
4C3 Michał Wróbel Marek Niemiec lab MN sprawozdanie ćw3
MICHALKIEWICZ Przygotowania nasze i niemieckie
sprawozdanie cw5
Jaworek Michal sprawozdanie przerzutniki
Język niemiecki dwujęzyczna arkusz II
sprawozdanie felixa2
Sprawozdanie Konduktometria
zmiany w sprawozdaniach fin
MICHALKIEWICZ ZATRUTA MARCHEWKA
2015 matura JĘZYK NIEMIECKI poziom rozszerzony TEST
Errata do sprawozdania
niemiecki kartoteka zr

więcej podobnych podstron