Anterior

Sistema de ecuaciones diferenciales de primer orden

Resolver el sistema de dos ecuaciones diferenciales de primer orden

dθ dt = 2L+MR· v r ·cosδ r(4mr+MRsinδ) dr dt = 2E(4m r 2 +M R 2 )2 L 2 2m r 2 (M+4m)

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.

dθ dt = 2rLsinδ+M R 2 · v r ·cosδ r(4m r 2 +M R 2 )sinδ dr dt = E(4m r 2 +M R 2 ) L 2 (4 m 2 r 2 +mM R 2 / sin 2 δ)

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