Anterior

Procedimientos numéricos

Ecuaciones diferenciales de segundo orden

Fuerza de rozamiento proporcional a la velocidad

d 2 x d t 2 =g+ u τ λ m dx dt m= m 0 exp( t/τ )

Condiciones iniciales: t=0, dx/dt=0, x=0

public class Particula extends RungeKutta{
    double roza;
    final double masaInicial=1000.0;
    double tiempo;
    double vEscape;
    public Particula(double vEscape, double tiempo, double roza, double h){
      super(h);
      this.roza=roza;
      this.tiempo=tiempo;
      this.vEscape=vEscape;
    }
    public double f(double x, double v, double t){
         double masa=masaInicial*Math.exp(-t/tiempo);
         return (-roza*v/masa+vEscape/tiempo-9.8);
    }
}

d 2 x d t 2 =g λ m 0 m c dx dt

Condiciones iniciales: t=te, dx/dt=ve y x=xe

public class Particula1 extends RungeKutta{
    double roza;
    final double masaFinal=300.0;
    public Particula1(double roza, double h){
      super(h);
      this.roza=roza;
    }
    public double f(double x, double v, double t){
         return (-roza*v/masaFinal-9.8);
    }
}

Fuerza de rozamiento proporcional al cuadrado de la velocidad

d 2 x d t 2 =g+ u τ λ m ( dx dt ) 2 m= m 0 exp( t/τ )

Condiciones iniciales: t=0, dx/dt=0, x=0

public class Particula3 extends RungeKutta{
    double roza;
    final double masaInicial=1000.0;
    double tiempo;
    double vEscape;
    public Particula3(double vEscape, double tiempo, double roza, double h){
      super(h);
      this.roza=roza;
      this.tiempo=tiempo;
      this.vEscape=vEscape;
    }
    public double f(double x, double v, double t){
         double masa=masaInicial*Math.exp(-t/tiempo);
         return (-roza*v*v/masa+vEscape/tiempo-9.8);
    }
}

d 2 x d t 2 =g λ m 0 m c ( dx dt ) 2

Condiciones iniciales: t=te, dx/dt=ve y x=xe

public class Particula4 extends RungeKutta{
    double roza;
    final double masaFinal=300.0;
    public Particula4(double roza, double h){
      super(h);
      this.roza=roza;
    }
    public double f(double x, double v, double t){
         return (-roza*v*v/masaFinal-9.8);
    }
} 

Objetos de las clases Particula, Particula1, Particula3, Particula4

public class MiCanvas extends Canvas {
//parámetros
    final double masaInicial=1000.0;
    final double masaFinal=300;
    boolean bLineal=true;
     int opcion=1;
     double  tMax=0.0;    
     final double dt=0.025;
     RungeKutta particula;
     Estado e=new Estado(0.0, 0.0, 0.0);

  void setNuevo(double vEscape, double tiempo, double roza, boolean bLineal){
//tiempo hasta que se agota el combustible
       tMax=-tiempo*Math.log(masaFinal/masaInicial);
       e=new Estado(0.0, 0.0, 0.0);
       if(vEscape/tiempo<9.8){
          opcion=0;
          return;
       }
       opcion=1;
       if(bLineal)
            particula=new Particula(vEscape, tiempo, roza, dt);
       else
           particula=new Particula3(vEscape, tiempo, roza, dt);
  }

  void mover(){
     switch(opcion){
        case 0:
            e.t+=dt;
            break;
        case 1:
             particula.resolver(e);
            if(e.t>tMax){
                  if(bLineal)
                        particula=new Particula1(roza, dt);
                  else
                        particula=new Particula4(roza, dt);
                  opcion=2;
            }
            break;
        case 2:
        particula.resolver(e);
        if(e.v<0){
            //se detiene
         }
            break;
        default:
            break;
     }
     repaint();
  }
Anterior