Ecuación diferencial de segundo orden
Resolver el sistema de ecuaciones diferenciales de segundo orden
Con las condiciones iniciales siguientes: en el instante t=0, x=x0, y=0, vx=0, vy=v0y.
public class Planeta extends RungeKutta{
Planeta(double h){
super(h);
}
public double f(double x, double y, double vx, double vy, double t){
double r=Math.sqrt(x*x+y*y);
double z=-4*Math.PI*Math.PI*x/(r*r*r);
return z;
}
public double g(double x, double y, double vx, double vy, double t){
double r=Math.sqrt(x*x+y*y);
double z=-4*Math.PI*Math.PI*y/(r*r*r);
return z;
}
public double energia(double x, double y, double vx, double vy){
double r=Math.sqrt(x*x+y*y);
double z=(vx*vx+vy*vy)/2-4*Math.PI*Math.PI/r;
return z;
}
}
//Objetos de la clase Planeta Estado estado=new Estado(0.0, x, 0.0, 0.0, vy); //estado inicial
Planeta planeta=new Planeta(0.005);
eInicial=planeta.energia(estado.x, estado.y, estado.vx, estado.vy);
//rutina que calcula la trayectoria paso a paso
planeta.resolver(valor);
double energia=planeta.energia(estado.x, estado.y, estado.vx, estado.vy);
double error=Math.abs((energia-eInicial)*100/eInicial);
if(error>1.0){
//detiene el movimiento
}
|
