主要代码如下
在你生成数据的for循环中添加下述代码,即可生成数据动态gif图片。frame=getframe(gcf);imind=frame2im(frame);[imind,cm] = rgb2ind(imind,256);if i==1imwrite(imind,cm,'test.gif','gif', 'Loopcount',inf,'DelayTime',1e-4);elseimwrite(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) == 0pause(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==1imwrite(imind,cm,'test.gif','gif', 'Loopcount',inf,'DelayTime',1e-4);elseimwrite(imind,cm,'test.gif','gif','WriteMode','append','DelayTime',1e-4);end%endend
主要是两个点:1.for循环的i对应if的i值。2.plot函数上加cla;
此代码只是函数的一个部分,并不能运行,全代码来自:/yh18783996170/article/details/107175969
运行效果如下:
如果觉得太快了可以修改pause函数里的数字,表示延迟多少秒。
如果觉得《matlab中不同数据点的动态显示并生成gif图片》对你有帮助,请点赞、收藏,并留下你的观点哦!