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

主要代码如下

  • 在你生成数据的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
运行效果如下:在这里插入图片描述

  • 如果觉得太快了可以修改pause函数里的数字,表示延迟多少秒。
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值