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.
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.
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).
ResponderEliminar¿Hay alguna forma de lograr tal cosa usando el comet?
Saludos.
Dib: tu pregunta es pertinente. Alternativas como el siguiente código:
Eliminarclc, 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
saludos vicente como puedeo introducir datos desde exel al toolbox ident de matlab gracias
ResponderEliminarYa vista la sig. entrada, te puede dar una idea. Saludos
Eliminarhttp://5minutosdematlab.blogspot.mx/2012/06/importando-y-manipulando-datos-entre.html
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:
ResponderEliminarif(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
como es el comoando para la letra e
ResponderEliminarexp(n)
EliminarSignifica e^n