Matlab 将计算结果制作成 gif 动画

Matlab 将计算结果制作成 gif 动画

引言

求解包含时间的偏微分方程 (组) 将得到随着时间变化的数值结果, 把这样的数据制作成 gif 动画并结合到幻灯片中, 在毕业答辩、小组讨论、课堂教学等场合有着广泛的应用。生动的彩色 gif 动画具有很强的表现力, 令人刮目相看, 大大提高了报告人所讲述理论结果的直观性、生动性、观赏性。

函数介绍

生成 gif 动画主要用到 4 4 4 个函数: getframeframe2imrgb2indimwrite

  1. getframe 函数的一般调用形式为: F=getframe(h), 其作用是截取句柄为 h 的窗口内的一帧图像。

  2. frame2im 函数的作用是把一帧截图转为图像数据。

  3. rgb2ind 函数的作用是将 RGB 图像转换为索引图像, 一般调用形式为: [X, map]= rgb2ind(RGB,n) 。其中, Xmap 分别为转换后的图像数据和颜色表数据, RGB 为转换前的图像数据, n 指定 map 中的颜色数。

  4. imwrite 函数的作用是将图像数据写入图像文件, 一般调用形式为: imwrite(X,map,filename,fmt,Param1,Val1,Param2,Val2...)。其中, Xmap 意义同上, filename 为文件名, fmt 为文件格式,Param1,Val1,Param2,Val2... 为若干可选参数及其取值。如:参数 LoopCount 为动画的循环播放次数, 这里设为 inf, 即无穷大。参数 DelayTime 为每帧间隔时间, 单位秒。参数 WriteMode 为写入文件的模式, 有覆盖 overwrite (默认) 和追加 append 两种选择。

Matlab源代码

生成 gif 动画的示例代码如下:


clear
clc
close
x=-1:0.02:1;y=x;
[X,Y]=meshgrid(x,y);
filename='test.gif';
for a=1:10
    u=a*exp(-10*(X.^2+Y.^2));
    mesh(x,y,u),axis([-1 1 -1 1 0 10]),drawnow
    im=frame2im(getframe(gcf));
    [A,map]=rgb2ind(im,256);
    if a==1
        %先以覆盖模式写入指定的gif文件
        imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',0.1);
    else
        %再以追加模式将每一帧写入gif文件
        imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',0.1);
    end
end

运行代码之后在当前目录下生成 gif 文件, 该动画显示了一个三维高斯函数的峰值逐渐增大的过程。

Matlab 将计算结果制作成 gif 动画_第1张图片

参考文献

张晓.《Matlab 微分方程高效解法:谱方法原理与实现》.机械工业出版社.


本人水平有限, 若有不妥之处, 恳请批评指正.

作者邮箱: [email protected]

你可能感兴趣的:(笔记,matlab,动画,开发语言)