Anterior

Procedimiento numérico

Ecuaciones diferenciales de segundo orden

d 2 θ d t 2 = v 0 2 sinθ L 2 cos 3 θ

Con las condiciones iniciales: en el instante t=0, θ=θ0, /dt=v0/(Lcos θ0)

d 2 θ d t 2 = 3 2 g L sinθ

Con las condiciones iniciales: en el instante t=tc, θ=θc, /dt=v0/(Lcos θc)

public class Sistema extends RungeKutta{
    double lonVarilla;
    double v0;
    public Sistema(double lonVarilla, double v, double h){
      super(h);
      this.lonVarilla=lonVarilla;
      this.v0=v;
    }
    public double f(double x, double v, double t){
         double coseno=Math.cos(x);
         return (Math.sin(x)*v0*v0/(coseno*coseno*coseno*lonVarilla*lonVarilla));
    }
}
public class Sistema1 extends RungeKutta{
    double lonVarilla;
    public Sistema1(double lonVarilla, double h){
      super(h);
      this.lonVarilla=lonVarilla;
    }
    public double f(double x, double v, double t){
         return (14.7*Math.sin(x)/lonVarilla);
    }
}
public class MiCanvas extends Canvas {

 void setNuevo(int ang, double velocidad){
    this.angInicial=ang*Math.PI/180;
    this.velocidad=velocidad;
    double wIni=velocidad/(lonVarilla*Math.cos(angInicial));
     estado=new Estado(0.0, angInicial, wIni);
    angCritico=Math.PI/2;
    bPrimeraVez=false;
    if(velocidad*velocidad/(9.8*lonVarilla)>1.5){
        sistema=new Sistema1(lonVarilla, dt);
    }else{
        double temp=2*velocidad*velocidad/(3*9.8*lonVarilla);
        angCritico=Math.acos(Math.pow(temp, 1.0/3));
        if(angInicial>angCritico){
            sistema=new Sistema1(lonVarilla, dt);
            angCritico=Math.PI/2;
        }
        else
            sistema=new Sistema(lonVarilla, velocidad, dt);
    }
 }

 void mover(){
     xExtremo=velocidad*estado.t;
     sistema.resolver(estado);
     if(estado.x>angCritico && !bPrimeraVez){
        double tc=estado.t;
        double wC=velocidad/(lonVarilla*Math.cos(angCritico));
        estado=new Estado(tc, angCritico, wC);
        sistema=new Sistema1(lonVarilla, dt);
        bPrimeraVez=true;
     }
 }
}
 
Anterior