Anterior

Procedimientos numéricos

Ecuación diferencial de segundo orden

Resolver la ecuación diferencial de segundo orden

( 1+ a 2 x 2 ax+μ ) d 2 x d t 2 +a ( dx dt ) 2 =g

por procedimientos numéricos con las condiciones iniciales: la partícula está en reposo vx=dx/dt=0 en el instante t=0, cuando se encuentra en la posición x0

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

Se establece el estado incial

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

Se crea un objeto de la clase derivada

 Particula p=new Particula(roza, a, 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 x0, tal que tanθ0= a·x0. El ángulo θ1es la raíz de la ecuación trascendente que resolvemos por el procedimiento del punto medio

lncosθμθ=lncos θ 0 μ θ 0

Una vez calculado la raíz θ1,obtenemos la posición x1 a partir de la relación tanθ1= a·x1

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=Math.log(Math.cos(x))-roza*x; return y; } }

Se calcula la posición final x1 cuando la posición inicial x0=-2.5 y el coeficiente de rozamiento μ=0.1

public class Aplicacion {
 public static void main(String[] args) {
     double roza=0.1;
     double a=2.0;
     double xIni=-2.5;     
     double angIni=Math.atan(a*xIni);
Funcion f=new Funcion(roza); double temp=f.funcion(angIni);
f.setInicial(temp); try{ double raiz=f.puntoMedio(-angIni, angIni); System.out.println("posición "+Math.tan(raiz)/a); }catch(RaizExcepcion ex){ System.out.println(ex.getMessage()); } } }

La posición final x1 es la posición inicial x0 para la siguiente etapa del movimiento. El coeficiente de rozamiento cambia de signo. Anterior