matikap2

metody

Jan 5th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.70 KB | None | 0 0
  1. % Metody Numeryczne - Rownania nieliniowe zad.1
  2. % nazwa m-pliku: metody.m
  3. %
  4. % MK JGJ 05.01.2018
  5. % EDIT: GAC MK 06.01.2018
  6. %       Petle while z warunkami w sumie sa niepotrzebne
  7. %       Teraz juz chyba spoko spoko jest
  8. clc; clear; close all;
  9. ilosc = 100;
  10.  
  11. % METODA BISEKCJI
  12. x0=3;
  13. x1=1.5;
  14. y=[funkcja(x0)];
  15. err=[];
  16. %while (funkcja(x0)*funkcja(x1)<0)  % Sprawdzamy warunek
  17.     for n = 1:ilosc
  18.         x2=(x0+x1)/2;
  19.             if (funkcja(x0)*funkcja(x2)<0) % Jesli rozne znaki funkcji w punktach
  20.                 x1=x2; % Wtedy jako x1 przyjmujemy x2
  21.                 err = [err,100*(x2 - x0)/x2];
  22.             else  % W przeciwnym wypadku (te same znaki)
  23.                 x0=x2; % Jako x0 przyjmujemy x2
  24.                 err = [err,100*(x2 - x1)/x2];
  25.             end
  26.             y = [y,funkcja(x2)];
  27.         if (y(n)==0) % Po otrzymaniu y=0 zatrzymaj petle
  28.             break
  29.         end
  30.     end
  31. %end
  32.         figure(1); % Wykres bledu do ilosci iteracji
  33.         semilogy( 1:length(err) ,abs(err),'m.-'); grid minor;
  34.         ylabel('err [%]'); xlabel('numer iteracji'); title('BISEKCJA');
  35. x2,
  36. % Metoda bisekcji jest wolno zbiezna (osiagniecie celu po ponad 50
  37. % iteracjach).
  38. % Zawsze zbiezna.
  39.  
  40.  
  41. % METODA SIECZNYCH
  42. x0=3;
  43. x1=1.5;
  44. y=[funkcja(x0)];
  45. err=[];
  46. %while ((funkcja(x0) > 0) & (funkcja(x1)<=0)) % Warunek
  47.     for n = 1:ilosc
  48.         x2=x1-((funkcja(x1)*(x1-x0))/(funkcja(x1)-funkcja(x0))); % Ze wzoru z wykladow
  49.         y = [y,funkcja(x2)];
  50.         err = [err,100*(x2 - x0)/x2];
  51.         x0 = x1; % Przyjmujemy kolejne punkty
  52.         x1 = x2;
  53.        
  54.         if (y(n)==0) % Po otrzymaniu y=0 zatrzymaj petle
  55.             break
  56.         end
  57.     end
  58. %end
  59.         figure(2); % Wykres bledu do ilosci iteracji
  60.         semilogy( 1:length(err) ,abs(err),'m.-'); grid minor;
  61.         ylabel('err [%]'); xlabel('numer iteracji'); title('SIECZNE');
  62. x2,
  63. % Za pomoca metody siecznych wynik otrzymalismy juz po 8 iteracjach, w
  64. % porownaniu z metoda bisekcji jest szybko zbiezna.
  65. % Moze nie byc zbiezna do pierwiastka.
  66.  
  67.  
  68. % METODA NEWTONA
  69. x0=3;
  70. x1=1.5;
  71. y=[funkcja(x0)];
  72. err=[];
  73. %while ((funkcja(x0) > 0) & (pochodna(x0)>0)) % Warunek
  74.     for n = 1:ilosc
  75.         x2=x0 - funkcja(x0)/pochodna(x0); % Ze wzoru z wykladow
  76.         y = [y,funkcja(x2)];
  77.         err = [err,100*(x2 - x0)/x2];
  78.         x0 = x2; % Przyjmujemy kolejny punkt
  79.        
  80.         if (y(n)==0) % Po otrzymaniu y=0 zatrzymaj petle
  81.             break
  82.         end
  83.     end
  84. %end
  85.         figure(3); % Wykres bledu do ilosci iteracji
  86.         semilogy( 1:length(err) ,abs(err),'m.-'); grid minor;
  87.         ylabel('err [%]'); xlabel('numer iteracji'); title('NEWTON');
  88. x2,
  89. % Najszybciej zbiezna ze wszystkich, najmniej wykonanych iteracji.
Add Comment
Please, Sign In to add comment