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);
