如何在MATLAB中编写动画代码?

时间:2015-07-19 09:58:54

标签: matlab animation symbolic-math

我试图使用内置函数bernstein在MATLAB中显示Bernstein多项式的收敛性,bernstein过载了符号变量。
我写了下面的代码,它显示了不同图形窗口中的所有bernstein多项式 我在MathWorks网站上搜索动画,作为MATLAB的初学者,我没有找到一些简单的功能来做到这一点。
请帮我解释一下代码 感谢。

          syms x  
          axis tight  
          for k=1:10  
             figure  
             ezplot(bernstein(sin(x),k,x))  
          end

2 个答案:

答案 0 :(得分:0)

您的代码中存在两个问题:

  1. 通过在每次迭代开始时调用figure,您总是打开一个新的数字窗口,最终得到10个数字。使用例如figure(1)始终使用数字nr。 1,或者更好的是首先使用h=figure;创建一个新数字,然后按figure(h)打开该数字。

  2. 现在你看不到多少,因为这些图的生成速度非常快。使用pause函数,您可以指定迭代之间的延迟,例如延迟0.5秒使用pause(0.5)

  3. 放在一起,这为您的动画提供了以下代码:

    syms x
    h = figure;
    for k=1:10  
        figure(h);
        ezplot(bernstein(sin(x),k,x));
        pause(0.5);
    end
    

答案 1 :(得分:0)

mathworks网站上有非常好的动画教程。

{{3}}

但是,要想先行一步,您可以尝试复制此代码,并在循环中粘贴您自己的函数。

  for k = 1:16
    figure(1);  
    axis tight;

    plot(sin(k:0.1:k+(2*pi))); % replace with your function

    M(k) = getframe;
  end

fps = 10; % adjust this to change playback speed

movie(M,1,fps); % run this to play movie

%% Save the animation to avi file
writerObj = VideoWriter('test.avi');
writerObj.FrameRate = fps;
open(writerObj);
writeVideo(writerObj,M);
close(writerObj);

更改fps的值以调整播放速度,您可以随时重新运行行movie(M,1,fps);以重播动画,而无需再次生成所有帧。最后一段代码将生成的动画保存到具有指定帧速率的AVI文件中。