Advertisement
mihainan

Derivare numerica

Aug 30th, 2014
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.03 KB | None | 0 0
  1. function y = Euler(x0, a, n, f, y0)
  2. % Functia care calculeaza solutia ecuatiei: y' = f(x, y) prin metoda Euler.
  3. %   Date de intrare:
  4. %       - x0 -> capatul stang al intervalului;
  5. %       - a  -> lungimea intervalului;
  6. %       - n  -> numarul de puncte;
  7. %       - y0 -> conditia initiala;
  8. %       - f  -> functia de integrat.
  9. %   Date de iesire:
  10. %       - y  -> vectorul aproximatiilor solutilor.
  11.     y = zeros(n+1, 1);
  12.     y(1) = y0;
  13.     h = a / n;
  14.     for i = 2 : n + 1
  15.         x = x0 + (i - 1) * h;
  16.         y( i) =y(i-1) + h * f(x, y( i-1 ) );
  17.     endfor
  18. endfunction
  19.  
  20.  
  21. function y = PredictorCorector(a, b, n, y0, f)
  22. %   Functia care calculeaza solutia ecuatiei
  23. %y' = f(x, y) prin metoda Runge - Kutta
  24. %   Date de intrare:
  25. %       - a, b -> intervalul de integrare;
  26. %       - n    -> numarul de puncte;
  27. %       - y0   -> conditia initiala;
  28. %       - f    -> functia de integrat y'=f(x,y).
  29. % Date de iesire:
  30. %       - y    -> vectorul aproximatiilor solutiei.
  31.     y = Runge_Kutta(a, b, n, y0, f);
  32.     h = (b-a) / n;
  33.     x0=a;
  34.     x1 = a + h;
  35.     x2 = a + 2 * h;
  36.     y0 = y(1);
  37.     y1 = y(2);
  38.     y2 = y(3);
  39.     for k = 4 : n
  40.         x = a+k*h;
  41.         %Urmatoarele doua linii de cod se vor modifica!
  42.         %Mai exact, se vor inlocui cu formulele date/deduse!
  43.         ypr = y2 + h*( 23 * f(x2,y2)- 6 *f(x1,y1) +5 * f(x0,y0) )/12;
  44.         ycor = ypr  +h*(5 * f(x,ypr) + 8 * f(x2,y2) - f(x1,y1) )/ 2;
  45.         y(k) = ycor;
  46.         y0 = y1;
  47.         y1 = y2;
  48.         y2 = ycor;
  49.         x0 = x1;
  50.         x1 = x2;
  51.         x2 = x;
  52.     endfor
  53. endfunction
  54.  
  55.  
  56.  
  57. function y = Runge_Kutta(a, b, n, y0, f)
  58. %   Functia care rezolva sistemul de ecuatii y' = f(x, y)
  59. %prin metoda Runge - Kutta
  60. %   Date de intrare:
  61. %       - a, b -> intervalul de integrare;
  62. %       - n    -> numarul de puncte;
  63. %       - y0   -> conditia initiala;
  64. %       - f    -> functia y'=f(x,y) .
  65. %   Date de iesire:
  66. %       - y    ->aproximarea solutiei ÃŽn punctele xi.
  67.     h = (b-a)/n;
  68.     y = zeros(n+1,1);
  69.     y(1) = y0;
  70.     for k = 2 : n+1
  71.         x = a + (k - 1)*h;
  72.         K1 = h * f(x,  y(k-1) );
  73.         K2 = h * f(x + h/2, y(k-1) + K1/2);
  74.         K3 = h * f(x + h/2, y(k-1) + K2/2);
  75.         K4 = h * f(x + h, y(k-1) + K3);
  76.         y(k) = y(k-1) + (K1 + 2 * K2 + 2 * K3 + K4 )/6;
  77.     endfor
  78. endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement