欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

matlab中不同数据点的动态显示并生成gif图片

程序员文章站 2022-05-20 22:09:15
...

主要代码如下

  • 在你生成数据的for循环中添加下述代码,即可生成数据动态gif图片。
		frame=getframe(gcf);
        imind=frame2im(frame);
        [imind,cm] = rgb2ind(imind,256);
        if i==1
            imwrite(imind,cm,'test.gif','gif', 'Loopcount',inf,'DelayTime',1e-4);
        else
            imwrite(imind,cm,'test.gif','gif','WriteMode','append','DelayTime',1e-4);
        end
  • 但上述代码会保留原来的数据继续画图,如果你要画的是数据变化的图,在你的plot函数加个
cla;
  • 这样就可以在画入gif时删除上一次的数据
  • 其中i为对应for循环起点,以下述代码为例:
for i = 1:100
    %计算适应度值(函数值)
    objvalue = cal_objvalue(pop);
    fitvalue = objvalue;
    %选择操作
    newpop = selection(pop,fitvalue);
    %交叉操作
    newpop = crossover(newpop,pc);
    %变异操作
    newpop = mutation(newpop,pm);
    %更新种群
    pop = newpop;
    objvalue = cal_objvalue(pop);
    fitvalue = objvalue;
    %寻找最优解
    [bestindividual,bestfit] = best(pop,fitvalue);
    x2 = binary2decimal(bestindividual);
    x1 = binary2decimal(newpop);
    y1 = cal_objvalue(newpop);
%     if mod(i,10) == 0
        pause(1);
        figure(1);
        cla;
        fplot(@(x)4.*cos(2.*x).*sin(6.*x)+10.*sin(5.*x).*sin(3.*x)-3.*abs(x-5)+10,[0 10]);
        hold on;
        
        plot(x1,y1,'*');
        title(['迭代次数为n=' num2str(i)]);
        frame=getframe(gcf);
        imind=frame2im(frame);
        [imind,cm] = rgb2ind(imind,256);
        if i==1
            imwrite(imind,cm,'test.gif','gif', 'Loopcount',inf,'DelayTime',1e-4);
        else
            imwrite(imind,cm,'test.gif','gif','WriteMode','append','DelayTime',1e-4);
        end
%     end
end
  • 主要是两个点:
  • 1.for循环的i对应if的i值。
  • 2.plot函数上加cla;

此代码只是函数的一个部分,并不能运行,全代码来自:https://blog.csdn.net/yh18783996170/article/details/107175969
运行效果如下:matlab中不同数据点的动态显示并生成gif图片

  • 如果觉得太快了可以修改pause函数里的数字,表示延迟多少秒。
相关标签: matlab图像处理