
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);![]()