Advertisement
Guest User

Tema - Pendulul Anarmonic

a guest
Nov 19th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.73 KB | None | 0 0
  1. clear; close all; clc;
  2.  
  3. g = 9.80665; % acceleratia gravitationala (m/s^2)
  4. lungime = 0.5; % lungimea firului (m)
  5. omega0 = sqrt(g/lungime); % pulsatia oscilatiilor armonice (amplitudini mici)
  6. T0 = 2*pi/omega0; % perioada proprie oscilatiilor armonice
  7. ti = 0; tf = 15*T0; N = 700;
  8. t = linspace(ti, tf, N); % sirul momentelor de timp
  9. dt = t(2) - t(1); % pas de timp
  10. theta_i = 45*pi/180; % unghiul initial (intre Oy si fir)
  11.  
  12. theta_an = theta_i * sin(omega0 * t + pi/2); % solutia armonica
  13.  
  14. figure(1); % reprezentarea legii unghiulare de miscare
  15. plot(t, theta_an*180/pi, '-r'); hold on;
  16. xlabel('t/s'); ylabel('theta/grade'); grid;
  17. title('Legea unghiulara de miscare');
  18.  
  19. theta_num = zeros(1, N); % prealocare solutie numerica
  20. theta_num(1) = theta_i; theta_num(2) = theta_i; % conditii initiale ale recurentei
  21.  
  22. aux1 = g/lungime*dt^2;
  23. aux2 = dt/g;
  24. for i=2 : 1 : N-1
  25.     % Relatia de recurenta - oscilatie amortizata
  26.     theta_num(i+1) = 2*theta_num(i) - theta_num(i-1) - aux1*sin(theta_num(i)) - aux2*(theta_num(i) - theta_num(i-1));
  27. end
  28.  
  29. plot(t, theta_num*180/pi, '-', 'Color', [0.1 0.5 0.1]);
  30. legend('Analitic', 'Numeric');
  31.  
  32. figure(2); % simularea dinamica a oscilatiei
  33. xp = lungime*sin(theta_num);
  34. yp = -lungime*cos(theta_num);
  35.  
  36. for i=1 : 1 : N
  37.     plot([0 xp(i)], [0 yp(i)], '-k', xp(i), yp(i), 'ob');
  38.     xlabel('x/m'); ylabel('y/m'); grid;
  39.     title('Simularea Oscilatiei');
  40.     axis equal;
  41.     axis([-lungime lungime -lungime 0]); % limitele graficului
  42.     Film(i) = getframe();
  43. end
  44.  
  45. figure(3); % simularea in timp real
  46. xlabel('x/m'); ylabel('y/m'); grid;
  47. title('Simularea oscilatiei in timp real');
  48. axis equal;
  49. axis([-lungime lungime -lungime 0]); % stabileste limitele graficului [xmin xmax ymin ymax]
  50. movie(Film, 1, N/tf);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement