Anterior

Procedimientos numéricos

Ecuación diferencial de segundo orden

Resolver la ecuación diferencial de segundo orden

d 2 x d t 2 = 1 a+x ( g(ax) ( dx dt ) 2 )

por procedimientos numéricos con las condiciones iniciales t=0, x=0, dx/dt=0.

public class SistemaArriba extends RungeKutta{
        double a;
    public SistemaArriba(double a, double h){
      super(h);
      this.a=a;
     }
    public double f(double x, double v, double t){
         double aceleracion=(9.8*(a-x)-v*v)/(a+x);
         return aceleracion;
    }
}

Se establece el estado incial

Estado estado=new Estado(0.0, 0, 0.0);

Se crea un objeto de la clase derivada

 SistemaArriba sa=new SistemaArriba(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

sa.resolver(estado);

Cuando la velocidad se hace cero, v=0, la posición final es x1 iniciándose el movimiento hacia abajo

Resolver la ecuación diferencial de segundo orden

d 2 x d t 2 =g ax a+x

por procedimientos numéricos con las condiciones iniciales t=t0,x=x1, dx/dt=0.

public class SistemaAbajo extends RungeKutta{
        double a;
    public SistemaAbajo(double a, double h){
      super(h);
      this.a=a;
     }
    public double f(double x, double v, double t){
         double aceleracion=9.8*(a-x)/(a+x);
         return aceleracion;
    }
}

Se establece el estado incial

estado=new Estado(estado.t, x1, 0.0);

Se crea un objeto de la clase derivada

 SistemaAbajo sb=new SistemaAbajo(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

sb.resolver(estado);   

Cuando la velocidad se hace cero, v=0, la posición final es x2 que es a su vez, la posición inicial x0 para el movimiento hacia arriba, completándose un ciclo.

estado=new Estado(estado.t, x0, 0.0);

Procedimiento del punto medio

La posición final del movimiento hacia arriba es la raíz de la ecuación cúbica

z- z 3 3 z 0 + z 0 3 3 =0

con z=x/a y z0=xd/a.

La ecuación cúbica se pude resolver por el procedimiento del punto medio, pero es más exacto calcular directemente sus raíces mediante las fórmulas de la página "Raíces de una ecuación cúbica"

public class FuncionArriba extends Ecuacion {
    double x0;
    public FuncionArriba(double x0){
        this.x0=x0;
    }
    public double f(double x){
        double y=(x-x*x*x/3)-(x0-x0*x0*x0/3);
        return y;
    }
}

Se calcula la posición final x1 del movimiento hacia abajo conocida la posición inicial x0 de partida.

public class Aplicacion {
 public static void main(String[] args) {
     double z0=0.0;     
     Funcion f=new FuncionArriba(z0);
     try{
            double z1=f.puntoMedio(0.0, 2.0);
            System.out.println("posición final "+z1);
        }catch(RaizExcepcion ex){
            System.out.println(ex.getMessage());
        }
  }

}

La posición final del movimiento hacia abajo es la raíz de la ecuación trascendente

2ln 1+z 1+ z 0 z+ z 0 =0  

con z=x/a y z0=xd/a.

public class FuncionAbajo extends Ecuacion {
    double x1;
    public FuncionAbajo(double x1){
        this.x1=x1;
    }
    public double f(double x){
        double y=2*Math.log((1+x)/(1+x1))-x+x1;
        return y;
    }
}

Se calcula la posición final x2=a·z2 del movimiento hacia abajo conocida la posición inicial x1 =a·z1de partida.

public class Aplicacion {
 public static void main(String[] args) {
     double z1=Math.sqrt(3);     
     Funcion f=new FuncionAbajo(z1);
     try{
            double z2=f.puntoMedio(z1, 2.0);
            System.out.println("posición final "+z2);
        }catch(RaizExcepcion ex){
            System.out.println(ex.getMessage());
        }
  }

}

La posición final es x2 =a·z2 que es a su vez, la posición inicial x0 para el movimiento hacia arriba, completándose un ciclo.

Anterior