【问题标题】:How to create movies on each generation of a for loop in Matlab plot如何在 Matlab 图中的每一代 for 循环上创建电影
【发布时间】:2013-05-30 02:00:36
【问题描述】:

我想将球面函数绘制为曲面或等高线图,并通过与它叠加的高斯分布生成的数据的球面函数评估最佳个体的位置和适应度值。每一代的情节都会发生变化,所以我得到了一部电影。另外,在另一个图上,我想绘制与从高斯分布生成的整个种群叠加的球体函数的轮廓,其中保留的拟合个体以红色着色。这一代又一代应该再出一部电影。

这基本上是分布估计算法(EDA)的一种实现。有人知道怎么做吗?

编辑

K= 4 
for l = 1 : K 
contour(X,Y,ph); 
hold on 
plot(bestId, 'rx'); 
end 

上面的代码应该叠加等高线图和BestId。对于 l 的每个循环,生成一个 bestId 并与等高线图叠加。这一代 BestInd 应该发生在每个 l 上。但是在从 1 到 4 的 bestId 的世代中,有一个是其中最好的,我们应该在四代之后得到与等高线图叠加的那个。现在我希望这一代成为一部从 1 到 4 迭代迭代的电影,这样我就可以看到 bestId 是如何生成的,直到达到最佳(最佳)。 这就是我在matlab中的电影的意思。知道如何做到这一点吗?

【问题讨论】:

  • 我不知道您想做什么,但我知道您可以将图形帧捕获到视频文件中。我建议你看看VideoWriter(特别是最后一个自我解释的例子)和getframe
  • @pm89 感谢您的回复。你知道分布算法估计(EDA)吗?我试图通过实现它来理解它。
  • @pm89 感谢您的建议。
  • @user2179716:我认为VideoWriter 可能对你有用。请阅读关于 asking reasonably-scoped, specific questions 的 * FAQ(一次一个也不错)。
  • @user2179716,我用谷歌搜索了一下,结果出现了:MATEDA。也许它可以帮助你。

标签: matlab matlab-figure eda


【解决方案1】:

为了创建反映数字变化的电影,我使用了 avifile 类和函数 getframe()addframe() 的组合

这是一个例子

aviobj = avifile('example.avi','compression','None');

t = linspace(0,2.5*pi,40);
fact = 10*sin(t);
fig=figure;
[x,y,z] = peaks;
for k=1:length(fact)
    h = surf(x,y,fact(k)*z);
    axis([-3 3 -3 3 -80 80])
    axis off
    caxis([-90 90])

    F = getframe(fig);
    aviobj = addframe(aviobj,F);
end
close(fig);
aviobj = close(aviobj);

你可以在这里找到更多信息

http://www.mathworks.nl/help/matlab/ref/avifile.html

http://www.mathworks.nl/help/matlab/ref/movie.html

http://www.math.canterbury.ac.nz/~c.scarrott/MATLAB_Movies/movies.html

-----------------在 cmets 讨论后编辑---------------- --

pm89 在 cmets 中提出了另一种方法。 VideoWriter 类似乎更现代和最新。使用示例见下页尾

http://www.mathworks.nl/help/matlab/ref/videowriterclass.html

【讨论】:

  • 我仍然建议VideoWriter,因为avifile 将在2013a 之后被删除。
  • 我确实知道。在这种情况下,你是对的。我刚刚展示了我习惯使用的东西
  • 因此,对于一些有循环的代码,每次循环运行时,情节上的数据都应该改变,这样我们就可以制作出某种电影。上述建议能达到目的吗?我们可以移步聊天了解更多详情
  • 是的,它会的。您可以在页面末尾找到一个名为“AVI File from Animation”的示例mathworks.nl/help/matlab/ref/videowriterclass.html
  • 如果您不想在每次循环迭代时保存帧,您可以在循环内插入一个条件,这样您就可以为某些定义的计数器值保存帧
最近更新 更多