Anterior

Procedimientos numéricos

Sistema de ecuaciones diferenciales

Resolver el sistema de ecuaciones diferenciales

{ d 2 x d t 2 =( qB m ) dy dt +gsinθ d 2 y d t 2 =( qB m ) dx dt gcosθ

por procedimientos numéricos con las condiciones iniciales: en el instante t=tl, la velocidad de la partícula es dx/dt= vl, dy/dt=0, y su posición es x= xl, y=0

B es el módulo del campo magnético producido por la corriente rectilínea en la posición que ocupa la partícula.

B = μ 0 i 2 π ( h y )

public abstract class RungeKutta {
    double h;
    public RungeKutta(double h){
      this.h=h;
    }
    void setPaso(double dt){
      this.h=dt;
    }
    public void resolver(Estado e){
//variables auxiliares
	    double k1, k2, k3, k4;
	    double l1, l2, l3, l4;
	    double q1, q2, q3, q4;
	    double m1, m2, m3, m4;
//estado inicial
	    double x=e.x;
	    double y=e.y;
	    double vx=e.vx;
	    double vy=e.vy;
	    double t=e.t;

		    k1=h*vx;
		    l1=h*f(x, y, vx, vy, t);
		    q1=h*vy;
		    m1=h*g(x, y, vx, vy, t);

		    k2=h*(vx+l1/2);
		    l2=h*f(x+k1/2, y+q1/2, vx+l1/2, vy+m1/2, t+h/2);
		    q2=h*(vy+m1/2);
		    m2=h*g(x+k1/2, y+q1/2, vx+l1/2, vy+m1/2, t+h/2);

		    k3=h*(vx+l2/2);
		    l3=h*f(x+k2/2, y+q2/2, vx+l2/2, vy+m2/2, t+h/2);
		    q3=h*(vy+m2/2);
		    m3=h*g(x+k2/2, y+q2/2, vx+l2/2, vy+m2/2, t+h/2);

		    k4=h*(vx+l3);
		    l4=h*f(x+k3, y+q3, vx+l3, vy+m3, t+h);
		    q4=h*(vy+m3);
		    m4=h*g(x+k3, y+q3, vx+l3, vy+m3, t+h);

		    x+=(k1+2*k2+2*k3+k4)/6;
		    vx+=(l1+2*l2+2*l3+l4)/6;
		    y+=(q1+2*q2+2*q3+q4)/6;
		    vy+=(m1+2*m2+2*m3+m4)/6;
        t+=h;
//estado final
	    e.x=x;
	    e.y=y;
	    e.vx=vx;
	    e.vy=vy;
	    e.t=t;
    }
    abstract public double f(double x, double y, double vx, double vy, double t);
    abstract public double g(double x, double y, double vx, double vy, double t);

}

 

public class Particula extends RungeKutta{
    double angulo;
    double dist;
    double intensidad;
    double p;
    public Particula(double angulo, double dist, double intensidad, 
double parametro, double h){ super(h); this.angulo=angulo; this.dist=dist; this.intensidad=intensidad; this.p=parametro; } public double f(double x, double y, double vx, double vy, double t){ double z=-p*intensidad*vy/(dist-y)+9.8*Math.sin(angulo); return z; } public double g(double x, double y, double vx, double vy, double t){ double z=p*intensidad*vx/(dist-y)-9.8*Math.cos(angulo); return z; } } }

 

public class Estado {
    public double t;
    public double x;
    public double y;
    public double vx;
	public double vy;
    public Estado(double t, double x, double y, double vx, double vy) {
        this.t=t;
        this.x=x;
        this.y=y;
        this.vx=vx;
		this.vy=vy;
    }
}

Se establece el estado incial

Estado estado=new Estado(0.0, x0, 0.0, v0, 0.0);

Se crea un objeto de la clase derivada

 Particula p=new Particula(anguloRampa, dist, intensidad, parametro, dt);

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