Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % Metody Numeryczne - Rownania nieliniowe zad.1
- % nazwa m-pliku: metody.m
- %
- % MK JGJ 05.01.2018
- % EDIT: GAC MK 06.01.2018
- % Petle while z warunkami w sumie sa niepotrzebne
- % Teraz juz chyba spoko spoko jest
- clc; clear; close all;
- ilosc = 100;
- % METODA BISEKCJI
- x0=3;
- x1=1.5;
- y=[funkcja(x0)];
- err=[];
- %while (funkcja(x0)*funkcja(x1)<0) % Sprawdzamy warunek
- for n = 1:ilosc
- x2=(x0+x1)/2;
- if (funkcja(x0)*funkcja(x2)<0) % Jesli rozne znaki funkcji w punktach
- x1=x2; % Wtedy jako x1 przyjmujemy x2
- err = [err,100*(x2 - x0)/x2];
- else % W przeciwnym wypadku (te same znaki)
- x0=x2; % Jako x0 przyjmujemy x2
- err = [err,100*(x2 - x1)/x2];
- end
- y = [y,funkcja(x2)];
- if (y(n)==0) % Po otrzymaniu y=0 zatrzymaj petle
- break
- end
- end
- %end
- figure(1); % Wykres bledu do ilosci iteracji
- semilogy( 1:length(err) ,abs(err),'m.-'); grid minor;
- ylabel('err [%]'); xlabel('numer iteracji'); title('BISEKCJA');
- x2,
- % Metoda bisekcji jest wolno zbiezna (osiagniecie celu po ponad 50
- % iteracjach).
- % Zawsze zbiezna.
- % METODA SIECZNYCH
- x0=3;
- x1=1.5;
- y=[funkcja(x0)];
- err=[];
- %while ((funkcja(x0) > 0) & (funkcja(x1)<=0)) % Warunek
- for n = 1:ilosc
- x2=x1-((funkcja(x1)*(x1-x0))/(funkcja(x1)-funkcja(x0))); % Ze wzoru z wykladow
- y = [y,funkcja(x2)];
- err = [err,100*(x2 - x0)/x2];
- x0 = x1; % Przyjmujemy kolejne punkty
- x1 = x2;
- if (y(n)==0) % Po otrzymaniu y=0 zatrzymaj petle
- break
- end
- end
- %end
- figure(2); % Wykres bledu do ilosci iteracji
- semilogy( 1:length(err) ,abs(err),'m.-'); grid minor;
- ylabel('err [%]'); xlabel('numer iteracji'); title('SIECZNE');
- x2,
- % Za pomoca metody siecznych wynik otrzymalismy juz po 8 iteracjach, w
- % porownaniu z metoda bisekcji jest szybko zbiezna.
- % Moze nie byc zbiezna do pierwiastka.
- % METODA NEWTONA
- x0=3;
- x1=1.5;
- y=[funkcja(x0)];
- err=[];
- %while ((funkcja(x0) > 0) & (pochodna(x0)>0)) % Warunek
- for n = 1:ilosc
- x2=x0 - funkcja(x0)/pochodna(x0); % Ze wzoru z wykladow
- y = [y,funkcja(x2)];
- err = [err,100*(x2 - x0)/x2];
- x0 = x2; % Przyjmujemy kolejny punkt
- if (y(n)==0) % Po otrzymaniu y=0 zatrzymaj petle
- break
- end
- end
- %end
- figure(3); % Wykres bledu do ilosci iteracji
- semilogy( 1:length(err) ,abs(err),'m.-'); grid minor;
- ylabel('err [%]'); xlabel('numer iteracji'); title('NEWTON');
- x2,
- % Najszybciej zbiezna ze wszystkich, najmniej wykonanych iteracji.
Add Comment
Please, Sign In to add comment