Mostrando las entradas con la etiqueta Ecuaciones Diferenciales. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Ecuaciones Diferenciales. Mostrar todas las entradas

lunes, 16 de septiembre de 2013

Animación Péndulo Simple


La siguiente función permite simular el movimiento de un péndulo simple.

function anim_pendulo
% @Jorge De Los Santos
f=figure('NumberTitle','off','name','Péndulo simple','MenuBar','none','color',[1 1 1]);
g=9.81; %Constante de aceleración de la gravedad
L=1; % Longitud
%% Solver de la ED
[t,y]=ode45(@psimple,[0 4*pi*sqrt(L/g)],[0 pi/4]);
% Condición inicial -> theta=pi/4
x1=cos(y(:,2));
y1=sin(y(:,2));
t_anim=length(t);
vx=[0 0];
vy=[0 0];
mx=0.04*cos(0:0.1:2*pi);
my=0.04*sin(0:0.1:2*pi);
hold on
plot([-0.2 0.2],[0 0],'k','linewidth',6); %Dibuja el "soporte" del péndulo
m=fill(my,mx,[1 0 0]); % Dibuja círculo.
h=plot(vy,vx,'linewidth',2); % Dibuja la línea de longitud del péndulo.
%% Animación
for i=1:t_anim
    axis([-1.1 1.1 -1.6 0]);
    set(h,'xdata',[0 y1(i)],'ydata',[0 -x1(i)]);
    set(m,'xdata',my+y1(i),'ydata',mx-x1(i));
    plot(y1(i),-x1(i),'-mo','Markersize',1);
    set(gca,'visible','off');
    drawnow;pause(0.1);
end

%% Sistema de Ecuaciones diferenciales del péndulo simple
    function dy=psimple(t,y)
        g=9.81;
        L=1;
        dy=zeros(2,1);
        dy(1)=y(2); % Sistema de Ecuaciones diferenciales
        dy(2)=-(g/L)*sin(y(1)); % de primer orden
    end

end



martes, 27 de agosto de 2013

Resolver ecuaciones diferenciales de primer orden en MATLAB (ode45)


Veremos cómo resolver una ecuación diferencial de primer orden utilizando el "solver" ode45.

La sintaxis de ode45 es la siguiente:

[t,y]=ode45(fun_edo, [t_min t_max], [Cond_Ini])

donde:

[t, y] ---- es el vector de salida que contiene la variable independiente "t" y a la función solución de la ecuación diferencial.

fun_edo: ---- es la función que contiene la definición de la ecuación diferencial a resolver

[t_min t_max] ---- Es el intervalo para la variable independiente en el cual se resolverá la ecuación diferencial.

[Cond_Ini]  --- Es un vector que contiene las condiciones iniciales $y(0)$

Para crear la función que contiene la ecuación diferencial, primero necesitamos expresar esta en la forma $\frac{dy}{dt}=\,f(t, y)$. Por ejemplo supongamos que queremos resolver la siguiente ED:

$$\frac{dy}{dt}=-0.3*y$$

Entonces, la asignación se haría como sigue:

dydt=@(t,y) -0.3*y;

En la siguiente línea escribiremos la declaración del solver:

[t,y]=ode45(dydt, [0 10], [3]);

Con ello estamos indicando que resolveremos la ED contenida en "dydt" en el intervalo de 0 a 10 sujeta a la condición inicial $y(0)=3$

Para graficar la curva solución simplemente habremos de utilizar el comando plot:

plot(t,y);

Si queremos añadir más condiciones iniciales simplemente habría que agregarlas al vector correspodiente, por ejemplo:

[t,y]=ode45(dydt, [0 10], [3 10 20]);

La línea anterior resuelve la ED para las tres condiciones iniciales $y(0)=3,\,\,y(0)=10,\,\, y(0)=20$.





domingo, 26 de mayo de 2013