Ecuación diferencial de primer orden
Resolver la ecuación diferencial de primer orden
por procedimientos numéricos con las
condiciones iniciales: en el intante t=0, t=0, θ=θ0
public class Sistema extends RungeKutta{
final double masa=1.0; //1 kg final double rMax=2.0; //radio del cilindro final double rMin=1.0; final double L0=20; //longitud inicial de la cuerda double angInicio=Math.PI/4; //45º double fuerza=1.5; int signo=1;
public Sistema(double angInicio, double fuerza, double h){
super(h);
this.angInicio=angInicio;
this.fuerza=fuerza;
}
void setSigno(int signo){
this.signo=signo;
}
double f(double x, double t){
double temp=Math.sin(x)*Math.sin(x)/(L0*Math.sin(angInicio)+ rMin*(Math.cos(x)-Math.cos(angInicio)));
double aux=eCinetica(x);
if(aux>=0){
eCin=aux;
}
return (signo*temp*Math.sqrt(2*eCin/masa));
}
double eCinetica(double ang){
return (2*fuerza*(g(ang)-g(angInicio))/3);
}
double g(double ang){
double A=rMax*(rMin*Math.cos(angInicio)-L0*Math.sin(angInicio));
double B=-rMax*rMin;
double C=rMin*L0*Math.sin(angInicio);
double D=rMin*rMin;
double y=(A+B*(Math.cos(ang)+ang*Math.sin(ang))+C*Math.cos(ang)+ D*(1-Math.cos(angInicio)*Math.cos(ang)))/(rMax*Math.sin(ang));
return y;
}
}
|
Se establece el estado incial
Estado estado=new Estado(0.0, angInicial);
Se crea un objeto de la clase derivada
Sistema sis=new Sistema(angInicio,fuerza 0.05);
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);