Advertisement
Guest User

Untitled

a guest
Apr 20th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.53 KB | None | 0 0
  1. function [uout, tout, error ] = rk4(f_1, f_2, f_3, ti, tf, k, u0 )
  2. dt = k;
  3. nt_steps = (tf - ti)/dt;
  4.  
  5.  
  6. vexact = @(t) -sin(2.*t) + t.^2 - 3;
  7. %Initializing Arrays
  8. t = linspace(0, 2, nt_steps);
  9. x = zeros(1, nt_steps);
  10. y = zeros(1, nt_steps);
  11. z = zeros(1, nt_steps);
  12.  
  13.  
  14. vbar = vexact(t);
  15. x(1) = u0(1);
  16. y(1) = u0(2);
  17. z(1) = u0(3);
  18.  
  19. for i  = 1:(nt_steps - 1)
  20.     k_1 = k*f_1(t(i),x(i),y(i),z(i));
  21.     L_1 = k*f_2(t(i),x(i),y(i),z(i));
  22.     m_1 = k*f_3(t(i),x(i),y(i),z(i));
  23.  
  24.     k_2 = k*f_1(t(i) + 0.5*dt, x(i) + ...
  25.         0.5*k_1, y(i) + 0.5*L_1, z(i) + 0.5*m_1);
  26.     L_2 = k*f_2(t(i) + 0.5*dt, x(i) + ...
  27.         0.5*k_1, y(i) + 0.5*L_1, z(i) + 0.5*m_1);
  28.     m_2 = k*f_3(t(i) + 0.5*dt, x(i) + ...
  29.         0.5*k_1, y(i) + 0.5*L_1, z(i) + 0.5*m_1);
  30.    
  31.    
  32.     k_3 = k*f_1(t(i) + 0.5*dt, x(i) + ...
  33.         0.5*k_2, y(i) + 0.5*L_2, z(i) + 0.5*m_2);
  34.     L_3 = k*f_2(t(i) + 0.5*dt, x(i) + ...
  35.         0.5*k_2, y(i) + 0.5*L_2, z(i) + 0.5*m_2);
  36.     m_3 = k*f_3(t(i) + 0.5*dt, x(i) + ...
  37.         0.5*k_2, y(i) + 0.5*L_2, z(i) + 0.5*m_2);
  38.  
  39.  
  40.     k_4 = k*f_1(t(i) + dt, x(i) + ...
  41.         k_3, y(i) + L_3, z(i) + m_3);
  42.     L_4 = k*f_2(t(i) + dt, x(i) + ...
  43.         k_3, y(i) + L_3, z(i) + m_3);
  44.     m_4 = k*f_3(t(i) + dt, x(i) + ...
  45.         k_3, y(i) + L_3, z(i) + m_3);
  46.  
  47.  
  48.     x(i+1) = x(i) + (k_1 + 2*k_2 + 2*k_3 + k_4)/6;
  49.     y(i+1) = y(i) + (L_1 + 2*L_2 + 2*L_3 + L_4)/6;
  50.     z(i+1) = z(i) + (m_1 + 2*m_2 + 2*m_3 + m_4)/6;
  51. end
  52. uout = [x;y;z];
  53. tout = t;
  54. error = max(max(abs(x(5) - vbar(5))));
  55.  
  56.  
  57.  
  58.  
  59. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement