Procedimientos numéricos
Ecuación diferencial de segundo orden
Resolver la ecuación diferencial de segundo orden
por procedimientos numéricos con las condiciones iniciales: en el instante t=0, dθ/dt=0, θ=0.
public class Sistema extends RungeKutta{
double radio;
double dist;
final double cte=0.001;
final double roz=0.1;
public Sistema(double radio, double dist, double h){
super(h);
this.radio=radio;
this.dist=dist;
}
public double f(double x, double v, double t){
return cte*momento(x)-roz*v;
}
double momento(double ang){
double angulo=ang%(Math.PI/6); //30 grados
double y=radio*Math.sin(angulo);
double x=radio+dist-radio*Math.cos(angulo);
double momento1=radio*Math.cos(Math.atan(x/y)-angulo)/(x*x+y*y);
angulo=Math.PI/6-angulo;
y=radio*Math.sin(angulo);
x=radio+dist-radio*Math.cos(angulo);
double momento2=radio*Math.cos(Math.atan(x/y)-angulo)/(x*x+y*y);
return 2*(momento1+momento2);
}
} |
Se establece el estado incial
Estado estado=new Estado(0.0, 0.0, 0.0);
Se crea un objeto de la clase derivada
Sistema sis=new Sistema(0.2, 0.05, 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
sis.resolver(estado);![]()
