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
运行效果如下:
- 如果觉得太快了可以修改pause函数里的数字,表示延迟多少秒。