
Procedimientos numéricos
Ecuación diferencial de segundo orden
- Movimiento hacia arriba
Resolver la ecuación diferencial de segundo orden
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
Iniciándose el movimiento hacia abajo
- Movimiento hacia abajo
Resolver la ecuación diferencial de segundo orden
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
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; |
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()); } } } |