Anterior

Ecuación diferencial de primer orden

Resolver la ecuación diferencial de primer orden

dθ dt = sin 2 θ l 0 sin θ 0 +r(cosθcos θ 0 ) 2 E k (θ) m E k (θ)=f(θ)f( θ 0 ) f(θ)= 2 3 F{ ( l 0 sin θ 0 +rcos θ 0 + r 2 R ) 1 sinθ +( r+ r R ( l 0 sin θ 0 rcos θ 0 ) ) 1 tanθ rθ }

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);
Anterior