Anterior

Procedimientos numéricos

Ecuación diferencial de segundo orden

Resolver la ecuación diferencial de segundo orden

d 2 θ d t 2 = g R (sinθ+μcosθ)μ ( dθ dt ) 2

por procedimientos numéricos con las condiciones iniciales t=0, θ=-θ0, dθ/dt=0.

public class Particula extends RungeKutta{
    final double radio=1.0;
    double roza;
    public Particula(double roza,  double h){
        super(h);
        this.roza=roza;
    }
    public void setRozamiento(double roza){
      this.roza=roza;
    }
    public double f(double x, double v, double t){
        double temp=9.8*(-Math.sin(x)-roza*Math.cos(x))/radio-roza*v*v;
        return temp;
    }
}

Se establece el estado incial

Estado estado=new Estado(0.0, angInicial, 0.0);

Se crea un objeto de la clase derivada

 Particula p=new Particula(roza, 0.0025);

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

p.resolver(estado);

Procedimiento del punto medio

Supongamos que la partícula parte de la posición θ0. Para calcular la posición de parada θ1 se calcula la raíz de la ecuación trascendente por el procedimiento del punto medio

( 3μ·sin θ 0 +(12 μ 2 )cos θ 0 )exp( 2μ θ 0 )=( 3μ·sinθ+(12 μ 2 )cosθ )exp( 2μθ )

public class Funcion extends Ecuacion{
    double roza;
double valorIni;
public Funcion(double roza){ this.roza=roza; valorIni=0.0; } public void setRozamiento(double roza){ this.roza=roza; } public void setInicial(double x0){ valorIni=x0; } public double f(double x){ double y=valorIni-funcion(x); return y; } public double funcion(double x){ double y=(-3*roza*Math.sin(x)+(1-2*roza*roza)*Math.cos(x))*Math.exp(2*roza*x); return y; } }

Se calcula el ángulo final θ1 cuando el ángulo inicial θ0=-60º y el coeficiente de rozamiento μ=0.1

public class Aplicacion {
 public static void main(String[] args) {
     double roza=0.1;
     double angInicial=-60*Math.PI/180;
     Funcion f=new Funcion(roza);
    double temp=f.funcion(angInicial);
f.setInicial(temp); try{ double raiz=f.puntoMedio(-angInicial, angInicial); System.out.println("ángulo "+raiz*180/Math.PI); }catch(RaizExcepcion ex){ System.out.println(ex.getMessage()); } } }

El ángulo final θ1 es el ángulo inicial θ0 para la siguiente etapa del movimiento. El coeficiente de rozamiento cambia de signo. Anterior