0% encontró este documento útil (0 votos)
96 vistas3 páginas

Código para Resolver El Péndulo Simple Forzado y Con Disipación Con Runge PDF

Este documento presenta el código para resolver numéricamente las ecuaciones del movimiento de un péndulo simple forzado y disipativo usando el método de Runge-Kutta de cuarto orden. El código calcula la posición, velocidad, energía cinética, energía potencial y error fraccional de energía a lo largo del tiempo, y grafica los resultados.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
96 vistas3 páginas

Código para Resolver El Péndulo Simple Forzado y Con Disipación Con Runge PDF

Este documento presenta el código para resolver numéricamente las ecuaciones del movimiento de un péndulo simple forzado y disipativo usando el método de Runge-Kutta de cuarto orden. El código calcula la posición, velocidad, energía cinética, energía potencial y error fraccional de energía a lo largo del tiempo, y grafica los resultados.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 3

APÉNDICE

Código para resolver el péndulo simple forzado y con disipación


con Runge-Kutta de orden 4.
clc
clear

%% Runge-Kutta de orden 4 para sistemas de n ecuaciones


diferenciales.

a=0;
m=2; %%número de ecuaciones
w(1,1)= input('Posición inicial:') ; %% condición inicial Xo
w(2,1)= input('Velocidad inicial: '); %%condición inicial
Vob=10;
wo= input('Frecuencia w: '); %%frecuencia que introduce el
usuario y no unitaria.
b= input('Tiempo al cual sea integrada la aproximación (tf): ')
; %tiempo final
n= input('Paso de tiempo que se usara para la integración: ');
%Delta t de error 1*10-4 con 600
%tic%%%%%%%%%%% %Temporizador inicial para saber cuanto tarda en
hacer el calculo
N=1/n;
h=(b-a)/N; %% Partición
Q= input('Factor de calidad Q: ');% Factor de calidad
Eo=(.5*((w(2,1))^2))+(1-cos(w(1,1))); %Energia inicial Eo
A= input('Amplitud de la fuerza externa: '); %Amplitud de la
fuente que aporta energِía al resorte.

for j=1:N
t(j)=a+j*h;

for i=1:m
K(1,i)=h*FUNS(i,t(j),A,w(1,j),w(2,j),Q,wo); %%genero los
coeficientes K1,1 K1,2
end

for i=1:m
K(2,i)=h*FUNS(i,t(j)+
h/2,A,w(1,j)+K(1,1)*1/2,w(2,j)+K(1,2)*1/2,Q,wo); %%genero los
coeficientes K2,1 K2,2
end
for i=1:m
K(3,i)=h*FUNS(i,t(j)+
h/2,A,w(1,j)+(K(2,1)/2),w(2,j)+(K(2,2)/2),Q,wo);%%genero los
coeficientes K3,1 K,2
end
for i=1:m

K(4,i)=h*FUNS(i,t(j)+h,A,w(1,j)+(K(3,1)),w(2,j)+(K(3,2)),Q,wo);%
%genero los coeficientes K4,1 K4,2
end
for i=1:m
w(i,j+1)=w(i,j)+1/6*(K(1,i)+2*K(2,i)+2*K(3,i)+K(4,i)); %%genero
las aproximaciones W

%opcion para encerrar intervalo donde gira pendulo


% % %
% if w(1,j+1)>=pi
% w(1,j+1)=w(1,j+1)-2*pi; %w(1,j+1)-pi;
% end
% if w(1,j+1)<=-pi
% w(1,j+1)=w(1,j+1)+2*pi; %w(1,j+1)+pi;
% end
%
end
%%%%Cálculo de fuerza y energia en esta parte con los valores ya
obtenidos en la integración
%ac(j)=-(wo^2).*(w(1,j+1)); %aceleración
Ep(j)=(1-cos(w(1,j+1))); %energia potencial Ep=1/2 k x^2
Ec(j)=(.5).*((w(2,j+1)).^2); %Energia cinetica E=1/2 m v^2
Et(j)=Ep(j)+Ec(j); % Energia total en cada cálculo de corrida
EF(j)=abs((Et(j)-Eo)./Eo);% Error fraccional Energía
end
%t=(wo.*t)./2*pi;
%%%%%%%%%%%%%%%%%%%%%%%%%%
%modulo de cálculo RMS
%RMS(1)=0; %inicializo suma
%for i=1:N
% RMS(i+1)=sqrt( (1/i)*( ((EF(i))^2)+ (i-1)*((RMS(i))^2) ));
%end
%RMS(1)=[];
%N=1:N;
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Guardo valores
x=w(1,:); %selecciono la parte de la posicion en la aproximacion
x(1)=[]; %%elimino el valor corrrespondiente a la condicion
inicial Xo
v=w(2,:); %selecciono la parte de la velocidad en la
aproximacion
v(1)=[]; %%elimino el valor corrrespondiente a la condicion
inicial Vo
%save OA t x v Et EF Ec Ep ac N RMS -ascii % documento de
guardado
%t=t./30;
figure
plot(t,x,'b.')
% hold on
% plot(t,x,'r')
% % %comet(t,x)
xlabel('Tiempo (u.a.)')
ylabel('\theta (u.a.)')
%axis([0 236 -5 5])
% % %hold on
% % %plot(t,v)
figure
plot(x,v)
plot(x,v,'m.')
xlabel('$\theta$ (u.a.)', 'Interpreter','latex')
ylabel('$\dot{\theta}$ (u.a.)', 'Interpreter','latex')
%axis([-pi pi -4 7])
% hold on
% plot(x,v,'b')
% %comet(x,v)
% %figure
% % figure
%plot(t,EF)
% figure
% plot3(x,v,t)

figure
%subplot(1,1,1)
%plot(t,Et) %Energi total
%hold on
plot(t,EF,'b') %Energía fraccional error
xlabel 'Tiempo (u.a.)'
ylabel 'Valor absoluto del error fraccional de energía'
%axis([0 40 3e-6 3.9e-4])

function [y]=FUNS(i,t,A,w1,w2,Q,wo)

if (i==1)
y=w2;
else
y=-(w2/Q)-(sin(w1))+ A*sin(wo*t);
end

También podría gustarte