
Sistema de ecuaciones diferenciales de primer orden
Resolver el sistema de dos ecuaciones diferenciales de primer orden
- Primera etapa del movimiento
por procedimientos numéricos con las condiciones iniciales: en el instante inicial t=0, la partícula se encuentra en θ=0, y r=R. Con estas condiciones iniciales dr/dt=0, por lo que lo procedimiento numérico no progresa. En la simulación, se toma como condiciones iniciales t=0, θ=0, y r=R+ΔR, siendo ΔR una cantidad pequeña, una milésima del valor de R.
- Segunda etapa del movimiento
La situación inicial de la segunda etapa del movimiento, es la situación final de la primera etapa.
public class Sistema1 extends RungeKutta{ Sistema1(double L, double E, double m, double paso){ super(L, E, m, paso); } public double g(double r){ // esta es dr/dt double y=(-2*L*L+2*E*(4*m*r*r+M*R*R))/(2*m*r*r*(M+4*m)); return Math.sqrt(y); } public double f(double r){ // esta es dang/dt double sen=R/r; double cos=Math.sqrt(1.0-sen*sen); double den=4*m*r+M*R*sen; double y=(2*L+M*R*g(r)*cos)/(r*den); return y; } public double wDisco(double r){ double sen=R/r; double cos=Math.sqrt(1.0-sen*sen); double den=4*m*r+M*R*sen; double y=(2*L*sen-4*m*r*g(r)*cos)/(R*den); return y; } } public class Sistema2 extends RungeKutta{ double lonHilo; Sistema2(double L, double E, double m, double lonHilo, double paso){ super(L, E, m, paso); this.lonHilo=lonHilo; } public double g(double r){ // esta es dr/dt double cos=(r*r+lonHilo*lonHilo-R*R)/(2*r*lonHilo); double sen2=1.0-cos*cos; double y=(E*(4*m*r*r+M*R*R)-L*L)/(4*m*m*r*r+m*M*R*R/sen2); return Math.sqrt(y); } public double f(double r){ // esta es dang/dt double cos=(r*r+lonHilo*lonHilo-R*R)/(2*r*lonHilo); double sen=Math.sqrt(1.0-cos*cos); double y=(2*r*L*sen+M*R*R*g(r)*cos)/(r*sen*(4*m*r*r+M*R*R)); return y; } public double wDisco(double r){ double cos=(r*r+lonHilo*lonHilo-R*R)/(2*r*lonHilo); double sen=Math.sqrt(1.0-cos*cos); double y=(2*L*sen-4*m*r*g(r)*cos)/(sen*(4*m*r*r+M*R*R)); return y; } } |
Primera etapa
Se establece el estado incial
Estado estado=new Estado(0.0, (R+R/1000), 0.0);
Se crea un objeto de la clase derivada
double L=(M/2+2*m)*R*R*w0; //momento angular
double E=(M/2+2*m)*R*R*w0*w0/2; //energía
RungeKutta sis=new Sistema1(L, E, m, 0.01);
Se llama a la función resolver que determina el estado del sistema en el instante t+h conocido el estado en el instante t
sis.resolver(estado);
Segunda etapa
Se crea un objeto de la clase derivada
double L=(M/2+2*m)*R*R*w0; //momento angular
double E=(M/2+2*m)*R*R*w0*w0/2; //energía
sis=new Sistema2(L, E, m, lonHilo, 0.01);
Se llama a la función resolver que determina el estado del sistema en el instante t+h conocido el estado en el instante t
sis.resolver(estado);
