Procedimientos numéricos
Ecuación diferencial del segundo orden
Resolver el sistema de ecuaciones diferenciales, una de primer orden y otra de segundo orden
con las condiciones iniciales v1=0, cuando x1=h-h10. Siendo h la altura de equilibrio, y h10 la altura inicial en el primer recipiente.
public class Oscilador extends RungeKutta{
double a;
double b;
Oscilador(double a, double b, double paso){
super(paso);
this.a=a;
this.b=b;
}
public double f(double x, double v, double t){
double temp=-980*x/(a+b*x); // x en cm y t en s
return temp;
}
}
void setNuevo(double radioIzq, double radioDcha, double radioCom){
//parámetros
hEquilibrio=(radioIzq*radioIzq*hIzq+radioDcha*radioDcha*hDcha)
/(radioIzq*radioIzq+radioDcha*radioDcha);
double sIzq=radioIzq*radioIzq;
double sDcha=radioDcha*radioDcha;
double sCom=radioCom*radioCom;
double a=hEquilibrio+(lonComunica*sIzq/sCom)/(1+sIzq/sDcha);
double b=sIzq/sDcha-1.0;
double periodo=2*Math.PI*Math.sqrt(a/980);
//oscilador
oscila=new Oscilador(a, 0.0, periodo/200);
estado=new Estado(0.0, (hIzq-hEquilibrio), 0.0);
}
void mover(){
//movimiento
oscila.resolver(estado);
double sIzq=radioIzq*radioIzq;
double sDcha=radioDcha*radioDcha;
hIzq=hEquilibrio+estado.x;
hDcha=((sIzq+sDcha)*hEquilibrio-sIzq*hIzq)/sDcha;
}
|
