Anterior

Procedimiento numérico

Raíz de una ecuación trascendente

Resolver por el procedimientos numérico del punto medio la ecuación trascendente 

x 0 + v 0 x t + 1 2 g t 2 = g ω 2 + v 0 y ω sin ( ω t ) + ( y 0 + g ω 2 ) cos ( ω t )

  void setSoltar(){
    t=0.0;
    opcion=1;
    w=Math.sqrt(k/M);
    x=x0=altura;
    y=-yEquilibrioIni;
  }


  void mover(){
    t+=dt;
    tt+=dt;
    switch(opcion){
        case 1:    //el bloque cae
            x=x0-9.8*t*t/2;
            vx=-9.8*t;
            if(x<-yEquilibrioIni){
                vy=0.0;
                vx=-Math.sqrt(2*(x0+yEquilibrioIni)*9.8);
                y0=x0=-yEquilibrioIni;
                t=0.0;
                opcion=2;
            }
            break;
       case 2:  //choque elástico
                v0x=((m-M)*vx+2*M*vy)/(M+m);
                v0y=(2*m*vx+(M-m)*vy)/(m+M);
              t=0.0;
              opcion=3;
              break;
          case 3:
              x=posBloque(t);
              vx=v0x-9.8*t;
              y=posPlataforma(t);
              vy=v0y*Math.cos(w*t)-(y0*w+9.8/w)*Math.sin(w*t);
              if(x<y){  //choque
                double t0=puntoMedio((t-dt), t);
                vx=v0x-9.8*t0;
                vy=v0y*Math.cos(w*t0)-(y0*w+9.8/w)*Math.sin(w*t0);
                y0=posPlataforma(t0);
                x0=posBloque(t0);
                t=0.0;
                opcion=2;
              }
              break;
        default:
            break;
    }
  }

double puntoMedio(double a, double b) {
	double m, ym;
	int iter=0;
	do{
		m=(a+b)/2;
		ym=f(m);
		if(Math.abs(ym)<CERO) break;
		if(Math.abs((a-b)/m)<ERROR) break;

		if((f(a)*ym)<0) b=m;
		else a=m;
		iter++;
	}while(iter<MAXITER);
	if(iter==MAXITER){
		System.out.println("No se ha encontrado la raíz");
	}
	return m;
}

double f(double t){
	return (posBloque(t)-posPlataforma(t));
}
 double posBloque(double t){
    return (x0+v0x*t-9.8*t*t/2);
 }
  double posPlataforma(double t){
    return (-9.8/(w*w)+v0y*Math.sin(w*t)/w+(y0+9.8/(w*w))*Math.cos(w*t));
 }

 

Anterior