viernes, 10 de junio de 2016

Disparo parabolico con Matlab/Octave

Los que hemos realizado el bachillerato de ciencias, nos hemos topado en la asignatura de física con el problema del tiro parabólico en alguna de sus modalidades.

Las ecuaciones del movimiento  son bastante sencillas

y=y0+v0y*t-0.5*g*t^2, para el movimiento en vertical
x=v0x*t para el movimiento horizontal

donde :

  • y0 es la altura inicial del punto de disparo
  • v0y es la componente en el eje y de la velocidad
  • v0x es la componente en el eje x de la velocidad
  • g es la aceleración de la gravedad
 los datos básicos son por lo tanto:
  • y0
  • pendiente de disparo
  • g (si no cambiamos de planeta pues 9.81 m/sg)
 Vamos por pasos:

lo primero que necesitamos es saber el tiempo que tarda en caer el cuerpo que lanzamos, resolvemos la ecuación y0+v0y*t-0.5*g*t^2=0, que nos da dos raices, seleccionamos el valor mayor.

Ya tenemos el tiempo que tarda el disparo en caer al suelo.

El código es el que sigue:

% modelizacion de un tiro parabólico
clc % limpiamos la pantalla
% datos de entrada
y0=0.5; % altura inicial [m]
pendiente=30; % pendiente en grados
g= -9.81; % aceleracion de la gravedad [m/sg^2] en negativo
v0=15 % velocidad inicial [m/s]

% calculos
% componentes de la velocidad
vy0=v0*sin(deg2rad(pendiente)); % velocidad inicial en y [m/sg]
vx0=v0*cos(deg2rad(pendiente)); % velocidad inicial en x [m/sg]

% valores del vector tiempo
[t1,t2]=grado2(g*0.5,vy0,y0); % obtenemos el tiempo que tarda en caer
tmax=max(t1,t2); % como tenemos dos soluciones obtenemos el tiempo maximo
t=linspace(0,tmax,100); %vector de valores del tiempo 100 valores

% valores de altura
y=y0+vy0*t+0.5*g*t.^2;
% valores de x
x=vx0*t;

% ploteamos dominio del espacio
figure (1)
plot(x,y)
axis equal
xlabel('Distancia [m]')
ylabel('Altura [m]')

% ploteamos dominio del tiempo
figure (2)
plot(t,y)
xlabel('tiempo [sg]')
ylabel('Altura [m]')

Nos ayudamos de una función que soluciona ecuaciones de segundo grado, que es grado2, este es el código:

function [ x1,x2 ] = grado2( a,b,c )
%Solución de la ecuacion
% y=ax^2+bx+c

delta=b^2-4*a*c;
fprintf('El valor de delta es %.2f \n',delta)

    if delta<0
        fprintf('Los valores de las raices son complejos \n')
        x1=(-b+i*sqrt(-delta))/(2*a);
        x2=(-b-i*sqrt(-delta))/(2*a);
        return
    else
        fprintf('Los valores de las raices son reales \n')
        x1=(-b+sqrt(delta))/(2*a);
        x2=(-b-sqrt(delta))/(2*a);
    end
   
end

Los reultados en forma de gráfica son:


Dominio del tiempo

Dominio del espacio





1 comentario: