Dibujando gráficas como si fueran animaciones en Matlab

Manos dibujando
Matlab permite fácilmente crear gráficas; pero ¿qué pasa cuando queremos hacer una animación de esa gráfica? Por ejemplo, ir presentado cómo se produce la trayectoria de un cuerpo en movimiento. Con animaciones esta tipo de gráficas son espectaculares en cualquier presentación. En una entrada anterior trate un poco sobre este tema utilizando fotogramas.

Aquí, presentare ejemplos donde no se crea video.

Ingenuamente podemos usar un código simple, como el siguiente.

figure(1);
for i=1:1000
T(i)=cos(i);
plot(T);
end

Efectivamente, aunque no aprovechamos la ventaja de la preasginación de memoria, la idea es que no es importante la velocidad del cálculo, sino que se cuente con la construcción dinámica de la curva; por ello, el comando plot tiene ir dentro del ciclo for.

Sin embargo, hasta este punto, el código es inútil. Pues la reserva de memoria de los cálculos es independiente y asíncrona de la memoria gráfica. Es decir la gráfica se producirá cuando se cuente con el vector completo.  La solución es insertar un comando que actualice todas las ventanas ese comando es drawnow.

Con todo, nuestro código se puede estar ejecutando muy rápido; por lo que hay que añadir dentro del código una pausa (comando pause) al que se le puede controlar el tiempo de ejecución. Digamos que esperamos .3 segundos por iteración. De tal modo que nos da bastante tiempo para ver con comodidad los resultados, pero esto es útil cuando los cálculos son pocos.

Mi ejemplo de código entonces es:

figure(1);
for i=1:1000
T(i)=cos(i);
plot(T);
drawnow;
pause(0.3)
end

El factor comet

El comando comet es otra opción para darle movimiento a la construcción de nuestras gráficas. Sin embargo, para pocos puntos su ejecución es demasiado rápida para apreciarse. Por lo cual se requieren muchos puntos para poder apreciar la construcción. Una alternativa es disminuir el paso entre punto y punto o aumentar el intervalo del vector a graficar. Lamentablemente, este comando no tiene una opción para controlar la velocidad, y aunque se puede alterar el código original para cambiar la velocidad, no es muy recomendable si estas iniciando el arte de hacer código para Matlab.

Pero si sientes que tu experiencia es suficiente para hacerlo, pues te recomiendo ir a los foros del mismo Matlab Central donde te puedes dar una idea de cómo hacer tal alteración: foro1, foro2


El siguiente video te muestra el código y los resultados que obtengo.



Preguntas para pensar 

1) Sin que se cree un video en que casos particulares es más útil esta opción que la de crear un video en Matlab. Revisa nuestra entrada anterior  sobre la  creación de animaciones.

Ejercicios

1)  Realiza una rutina donde se pueda visualizar al mismo tiempo varias gráfica en un una sola ventana, puedes usar el comando subplot

2) Aplica esta solución para ver la dinámica una gráfica de tres variables (X,Y,Z) que cambia con el tiempo.

7 comentarios:

  1. Yo quiero hacer una animación usando el comet para graficar dos variables distintas, al mismo tiempo. Pero no quiero graficarlas como subplot porque no muestra la parte que me interesa (sincronización).
    ¿Hay alguna forma de lograr tal cosa usando el comet?

    Saludos.

    ResponderEliminar
    Respuestas
    1. Dib: tu pregunta es pertinente. Alternativas como el siguiente código:

      clc, clear, close all
      t = 0:.01:5*pi;
      y = sin(2*t);
      yy = sin(5*t);
      hold on
      axis([0 10 -1.1 1.1])
      comet(t,y);
      comet(t,yy);
      hold off

      No muestran el efecto que deseas.

      Yo te recomiendo usar draw, del modo cómo se explica en la entrada. También puedes consultar el sig. link.

      http://5minutosdematlab.blogspot.mx/2012/03/como-hacer-la-animacion-de-una-senoidal.html

      Suerte. Y Saludos

      Eliminar
  2. saludos vicente como puedeo introducir datos desde exel al toolbox ident de matlab gracias

    ResponderEliminar
    Respuestas
    1. Ya vista la sig. entrada, te puede dar una idea. Saludos

      http://5minutosdematlab.blogspot.mx/2012/06/importando-y-manipulando-datos-entre.html

      Eliminar
  3. Buenas, me gustaría muchísimo que me ayudarás a animar unas gráficas, son de un applet para análisis de vibraciones. Te dejo parte del código:

    if(s>w)
    c2=(v1-Pos1*(m1))/(-m1+m2);
    c1=Pos1-c2;
    x2=(c1*exp(m1*t2))+(c2*exp(m2*t2));
    tmax=log((-c2*m2)/(c1*m1));
    xmax=((c1*exp(m1*tmax))+(c2*exp(m2*tmax)))+1;
    axes(hanldes.axes1);
    plot(t2,x2,'-b','linewidth',2),xlabel('Tiempo s'),ylabel('Movimiento'),axis([-2 T2 -1 xmax]),title('Respuesta Sobre Amortiguado'),grid on,hold on;
    else

    Es una de las 5 gráficas que se utilizan. Gracias de antemano

    ResponderEliminar
  4. como es el comoando para la letra e

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...