Anterior

Procedimientos numéricos

Ecuación diferencial del segundo orden

Resolver el sistema de ecuaciones diferenciales, una de primer orden y otra de segundo orden

d 2 x 1 d t 2 + g a + b x 1 x 1 = 0

con las condiciones iniciales v1=0, cuando x1=h-h10. Siendo h la altura de equilibrio, y h10 la altura inicial en el primer recipiente.

 public class Oscilador extends RungeKutta{
    double a;
    double b;
    Oscilador(double a, double b, double paso){
        super(paso);
        this.a=a;
        this.b=b;
    }
    public double f(double x, double v, double t){
        double temp=-980*x/(a+b*x);    // x en cm y t en s
        return temp;
    }
}
  void setNuevo(double radioIzq, double radioDcha, double radioCom){
 //parámetros
     hEquilibrio=(radioIzq*radioIzq*hIzq+radioDcha*radioDcha*hDcha)
/(radioIzq*radioIzq+radioDcha*radioDcha);
     double sIzq=radioIzq*radioIzq;
     double sDcha=radioDcha*radioDcha;
     double sCom=radioCom*radioCom;
     double a=hEquilibrio+(lonComunica*sIzq/sCom)/(1+sIzq/sDcha);   
     double b=sIzq/sDcha-1.0;
     double periodo=2*Math.PI*Math.sqrt(a/980);
//oscilador
      oscila=new Oscilador(a, 0.0, periodo/200);
      estado=new Estado(0.0, (hIzq-hEquilibrio), 0.0);
  }
    void mover(){
//movimiento
     oscila.resolver(estado);
     double sIzq=radioIzq*radioIzq;
     double sDcha=radioDcha*radioDcha;
     hIzq=hEquilibrio+estado.x;
     hDcha=((sIzq+sDcha)*hEquilibrio-sIzq*hIzq)/sDcha;
  }
Anterior