Anterior

Procedimientos numéricos

Ecuación diferencial de segundo orden

Resolver la ecuación diferencial de segundo orden

d 2 x d t 2 = F ρx g 1 x ( dx dt ) 2

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

public class SistemaArriba extends RungeKutta{
    final double xe=0.5;
   public SistemaArriba(double h){
      super(h);
    }
    public double f(double x, double v, double t){
         double aceleracion=9.8*(xe/x-1-v*v/(9.8*x));
         return aceleracion;
    }
}

Se establece el estado incial

Estado estado=new Estado(0.0, x0, 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

x 1 = 1 2 ( 3 2 x e x 0 )+ 1 2 3 x 0 2 + 9 4 x e 2 +3 x e x 0

Iniciándose el movimiento hacia abajo

Resolver la ecuación diferencial de segundo orden

d 2 x d t 2 = F ρx g

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

public class SistemaAbajo extends RungeKutta{
    final double xe=0.5;
   public SistemaAbajo(double h){
      super(h);
    }
    public double f(double x, double v, double t){
         double aceleracion=9.8*(xe/x-1);
         return aceleracion;
    }
}

Se establece el estado incial

double x1=(3*xe/2-x0)/2+Math.sqrt(-3*x0*x0+9*xe*xe/4+3*xe*x0)/2;
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 la raíz de la ecuación trascendente

x e ln( x 1 x 2 )= x 1 x 2

Conocido x1 se calcula x2, resolviendo la ecuación trascendente por el procedimiento numérico del punto medio.

Finalmente, x2 es 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

public class Funcion extends Ecuacion{
    final double xe=0.5;
    double x0;
public Funcion(double x0){ this.x0=x0; } public void setInicial(double x0){ this.x0=x0; } public double f(double x){ double y=xe*Math.log(x/x0)+x0-x;
return y; } }

Se calcula la posición final x2 del movimiento hacia abajo conocida la posición final x1 del movimiento hacia arriba anterior.

public class Aplicacion {
 public static void main(String[] args) {
     double xe=0.5;     
     double x0=0.3;     
     double x1=(3*xe/2-x0)/2+Math.sqrt(-3*x0*x0+9*xe*xe/4+3*xe*x0)/2;;
     Funcion f=new Funcion(x1);
     try{
            double x2=f.puntoMedio(0.0, xe);
            System.out.println("posición final "+x2);
        }catch(RaizExcepcion ex){
            System.out.println(ex.getMessage());
        }
  }

}

Anterior