ivodevweb

Untitled

Jan 25th, 2023
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 2.83 KB | Source Code | 0 0
  1. % UC: 21048 - Física Geral
  2. % Ano 2022/23 - EFOLIO B - Gráfico Pêndulo Gravítico - UAb
  3. %  Aluno: 2100927 - Ivo Baptista
  4.  
  5. close all;
  6. clc;
  7. % criação de ficheiro txt que conterá a tabela de resultados
  8. ficheiro=fopen("heun.txt","w");
  9.  
  10. % opções para representação gráfica
  11. hold on;
  12. grid;
  13. title('Pendulo Gravitico');
  14.  
  15. % Constantes
  16. m = 2.6*0.001;  % Massa em Kg
  17. L = 1.0;  % Comprimento do fio em memtros
  18. R = 30*0.01; % Raio 30 cm convertido para metros
  19. p = 1.28 % densidade do ar em kg/m^3
  20. g = 9.81; % Aceleração da gravidade em m/s^2
  21.  
  22. A = pi * R^2;
  23. % Calcula o coeficiente de arrasto aerodinâmico
  24. b = 1/2 * p * cd *A;
  25.  
  26. % Valores iniciais
  27. theta0 = 0.05;  % Ângulo inicial em rad
  28. w0 = 0.0;       % Velocidade angular inicial em rad/s
  29. t0 = 0.0;       % Tempo inicial em s
  30. h = 0.1;        % Passo de tempo em s
  31.  
  32. % Vetores para armazenar os resultados
  33. t = t0;
  34. theta = theta0;
  35. w = w0;
  36.  
  37.  
  38. printf("  tempo   |          Theta      |      Omega     |        k1x       |      k1v          | k2x      | k2v            \n");        % imprime no terminal
  39. fprintf(ficheiro,"  tempo   |     Theta|  Omega | k1x | k1v | k2x | k2v      \n");   % imprime no ficheiro
  40. printf("----------|---------------------|----------------|------------------|-------------------|----------|----------|\n");        % imprime no terminal
  41. fprintf(ficheiro,"----------|------------|-----------|------------|-----------|-----------|----------|\n");   % imprime no ficheiro
  42. printf(" t = %4d | theta = %8d | w = %8d |k1x = %8d | k1v = %8d  |k2x = %8d |k2v = %8d|\n",t,theta,w0, k1x,k1v,k2x,k2v);          % imprime no terminal
  43. fprintf(ficheiro," t = %4d | theta = %8d | w = %8d |k1x = %8d  |k1v = %8d |k2x = %8d   |k2v = %8d | \n",t,theta,w0, k1x,k1v,k2x,k2v);     % imprime no ficheiro
  44.  
  45. % Loop de tempo
  46. while (t0 < 100.0)
  47.   % Cálculo dos valores intermediários
  48.   k1x = w0;
  49.   k1v = (-sign(w0) * (b*L)/m * (w0)^2 - (g / L) * theta0);
  50.   k2x = w0 + k1v*h;  
  51.   k2v = -sign(w0 + k1v*h) * (((b*L)/m) * (w0 + k1v*h)**2) - (g/L) * (theta0 + k1x*h);
  52.  
  53.   % Atualização dos valores de θ e w
  54.   theta0 = theta0 + ((k1x + k2x) / 2.0)*h;
  55.   w0 = w0 + ((k1v + k2v) / 2.0)*h;
  56.  
  57.   % Atualização do tempo
  58.   t0 = t0 + h;
  59.  
  60.   % Adiciona os resultados aos vetores
  61.   t = [t t0];
  62.   theta = [theta theta0];
  63.   w = [w w0];
  64.  
  65. % e apresentação de resultados
  66. printf(" t = %4d | theta = %8d | w = %8d |k1x = %8d |k1v = %8d |k2x = %8d |k2v = %8d |\n",w0, k1x,k1v,k2x,k2v); % imprime no terminal
  67. fprintf(ficheiro," t = %4d | theta = %8d | w = %8d |k1x = %8d |k1v = %8d |k2x = %8d |k2v = %8d |\n",w0, k1x,k1v,k2x,k2v); % imprime no ficheiro
  68.  
  69. end
  70.  
  71. fclose(ficheiro);
  72.  
  73. % Cria o gráfico
  74. plot(t, theta, 'r', t, w, 'b')
  75.  
  76. % Adiciona legenda
  77. legend('Theta', 'w')
  78. % Adiciona títulos aos eixos
  79. xlabel('tempo (s)');
  80. ylabel('Theta (rad), w (rad/s)');
  81. % Exibe o gráfico
  82. hold off;
  83.  
  84.  
  85.  
Add Comment
Please, Sign In to add comment