vinocastro

Exam3_3

Jun 23rd, 2021 (edited)
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 4.88 KB | None | 0 0
  1. function exam3_3()
  2.     % Initialize step-size variables
  3.     h = 0.1;
  4.     omega_plot = (0:0.1:7)';
  5.     t = (0:0.1:7)';
  6.     N = length(t);
  7.     % each amplitudes
  8.     amplitude1 = zeros(N-1,1);
  9.     amplitude2 = zeros(N-1,1);
  10.     amplitude3 = zeros(N-1,1);
  11.     amplitude4 = zeros(N-1,1);
  12.     amplitude5 = zeros(N-1,1);
  13.     % max amplitude
  14.     max_amplitude = zeros(N-1,1);
  15.     % Initialize derivative function
  16.     dz1 = @(t,x1,x2,omega)(-20*x1 + 10*x2 - ((omega^2)*cos(omega*t)));
  17.     dz2 = @(t,x1,x2,x3,omega)(10*x1 - 20*x2 + 10*x3 - ((omega^2)*cos(omega*t)));
  18.     dz3 = @(t,x2,x3,x4,omega)(10*x2 - 20*x3 + 10*x4 - ((omega^2)*cos(omega*t)));
  19.     dz4 = @(t,x3,x4,x5,omega)(10*x3 - 20*x4 + 10*x5 - ((omega^2)*cos(omega*t)));
  20.     dz5 = @(t,x4,x5,omega)(10*x4 - 20*x5 - ((omega^2)*cos(omega*t)));
  21.     dx1 = @(t,z1) z1;
  22.     dx2 = @(t,z2) z2;
  23.     dx3 = @(t,z3) z3;
  24.     dx4 = @(t,z4) z4;
  25.     dx5 = @(t,z5) z5;
  26.     % Iterate, computing each K value in turn, then the i+1 step values
  27.     counter = 1;
  28.     for omega = 0:0.1:7
  29.         % Initialize vectors
  30.         x1 = zeros(N,1); x2 = zeros(N,1); x3 = zeros(N,1); x4 = zeros(N,1); x5 = zeros(N,1);
  31.         z1 = zeros(N,1); z2 = zeros(N,1); z3 = zeros(N,1); z4 = zeros(N,1); z5 = zeros(N,1);
  32.         % Initialize K vectors
  33.         kx1 = zeros(1,4)'; kx2 = zeros(1,4)'; kx3 = zeros(1,4)'; kx4 = zeros(1,4)'; kx5 = zeros(1,4)';
  34.         kz1 = zeros(1,4)'; kz2 = zeros(1,4)'; kz3 = zeros(1,4)'; kz4 = zeros(1,4)'; kz5 = zeros(1,4)';
  35.         b = [1 2 2 1]'; % RK4 coefficients
  36.         for i = 1:(N-1) %% for t
  37.             kz1(1) = dz1(t(i),x1(i),x2(i),omega);
  38.             kz2(1) = dz2(t(i),x1(i),x2(i),x3(i),omega);
  39.             kz3(1) = dz3(t(i),x2(i),x3(i),x4(i),omega);
  40.             kz4(1) = dz4(t(i),x3(i),x4(i),x5(i),omega);
  41.             kz5(1) = dz5(t(i),x4(i),x5(i),omega);
  42.             kx1(1) = z1(i); kx2(1) = z2(i); kx3(1) = z3(i); kx4(1) = z4(i); kx5(1) = z5(i);
  43.  
  44.             kz1(2) = dz1(t(i) + (h/2),x1(i)+(h/2)*kx1(1),x2(i)+(h/2)*kx2(1),omega);
  45.             kz2(2) = dz2(t(i) + (h/2),x1(i)+(h/2)*kx1(1),x2(i)+(h/2)*kx2(1),x3(i)+(h/2)*kx3(1),omega);
  46.             kz3(2) = dz3(t(i) + (h/2),x2(i)+(h/2)*kx2(1),x3(i)+(h/2)*kx3(1),x4(i)+(h/2)*kx4(1),omega);
  47.             kz4(2) = dz4(t(i) + (h/2),x3(i)+(h/2)*kx3(1),x4(i)+(h/2)*kx4(1),x5(i)+(h/2)*kx5(1),omega);
  48.             kz5(2) = dz5(t(i) + (h/2),x4(i)+(h/2)*kx4(1),x5(i)+(h/2)*kx5(1),omega);
  49.             kx1(2) = z1(i) + (h/2)*kz1(1);
  50.             kx2(2) = z2(i) + (h/2)*kz2(1);
  51.             kx3(2) = z3(i) + (h/2)*kz3(1);
  52.             kx4(2) = z4(i) + (h/2)*kz4(1);
  53.             kx5(2) = z5(i) + (h/2)*kz5(1);
  54.  
  55.             kz1(3) = dz1(t(i) + (h/2),x1(i)+(h/2)*kx1(2),x2(i)+(h/2)*kx2(2),omega);
  56.             kz2(3) = dz2(t(i) + (h/2),x1(i)+(h/2)*kx1(2),x2(i)+(h/2)*kx2(2),x3(i)+(h/2)*kx3(2),omega);
  57.             kz3(3) = dz3(t(i) + (h/2),x2(i)+(h/2)*kx2(2),x3(i)+(h/2)*kx3(2),x4(i)+(h/2)*kx4(2),omega);
  58.             kz4(3) = dz4(t(i) + (h/2),x3(i)+(h/2)*kx3(2),x4(i)+(h/2)*kx4(2),x5(i)+(h/2)*kx5(2),omega);
  59.             kz5(3) = dz5(t(i) + (h/2),x4(i)+(h/2)*kx4(2),x5(i)+(h/2)*kx5(2),omega);
  60.             kx1(3) = z1(i) + (h/2)*kz1(2);
  61.             kx2(3) = z2(i) + (h/2)*kz2(2);
  62.             kx3(3) = z3(i) + (h/2)*kz3(2);
  63.             kx4(3) = z4(i) + (h/2)*kz4(2);
  64.             kx5(3) = z5(i) + (h/2)*kz5(2);
  65.  
  66.             kz1(4) = dz1(t(i) + h,x1(i)+h*kx1(3),x2(i)+h*kx2(3),omega);
  67.             kz2(4) = dz2(t(i) + h,x1(i)+h*kx1(3),x2(i)+h*kx2(3),x3(i)+h*kx3(3),omega);
  68.             kz3(4) = dz3(t(i) + h,x2(i)+h*kx2(3),x3(i)+h*kx3(3),x4(i)+h*kx4(3),omega);
  69.             kz4(4) = dz4(t(i) + h,x3(i)+h*kx3(3),x4(i)+h*kx4(3),x5(i)+h*kx5(3),omega);
  70.             kz5(4) = dz5(t(i) + h,x4(i)+h*kx4(3),x5(i)+h*kx5(3),omega);
  71.             kx1(4) = z1(i) + h*kz1(3);
  72.             kx2(4) = z2(i) + h*kz2(3);
  73.             kx3(4) = z3(i) + h*kz3(3);
  74.             kx4(4) = z4(i) + h*kz4(3);
  75.             kx5(4) = z5(i) + h*kz5(3);
  76.  
  77.             z1(i+1) = z1(i) + (h/6)*sum(b.*kz1);
  78.             z2(i+1) = z2(i) + (h/6)*sum(b.*kz2);
  79.             z3(i+1) = z3(i) + (h/6)*sum(b.*kz3);
  80.             z4(i+1) = z4(i) + (h/6)*sum(b.*kz4);
  81.             z5(i+1) = z5(i) + (h/6)*sum(b.*kz5);
  82.             x1(i+1) = x1(i) + (h/6)*sum(b.*kx1);
  83.             x2(i+1) = x2(i) + (h/6)*sum(b.*kx2);
  84.             x3(i+1) = x3(i) + (h/6)*sum(b.*kx3);
  85.             x4(i+1) = x4(i) + (h/6)*sum(b.*kx4);
  86.             x5(i+1) = x5(i) + (h/6)*sum(b.*kx5);
  87.         end
  88.         amplitude1(counter) = max(x1) - min(x1);
  89.         amplitude2(counter) = max(x2) - min(x2);
  90.         amplitude3(counter) = max(x3) - min(x3);
  91.         amplitude4(counter) = max(x4) - min(x4);
  92.         amplitude5(counter) = max(x5) - min(x5);
  93.         temp = [amplitude1(counter); amplitude2(counter); amplitude3(counter); amplitude4(counter); amplitude5(counter);];
  94.         max_amplitude(counter) = max(temp);
  95.         counter = counter + 1;
  96.     end
  97.     plot(omega_plot,max_amplitude,'b-');
  98. end
Add Comment
Please, Sign In to add comment