使用几个图在Matlab中创建一个电影

时间:2014-09-09 05:02:19

标签: matlab plot movie

我对Matlab相对较新,并且我试图制作一个包含多条曲线(勒让德多项式)的.avi文件,并用红点描绘出每条曲线。我之前用一组参数方程和linspace完成了这个,它似乎运行正常。我认为代码对于我想要在这里做的事情基本上是相同的,但每次我尝试运行程序时都会收到以下错误消息:

??? Index exceeds matrix dimensions.

Error in ==> legpolymov at 25
    plot(x(1:2*i),y0(1:2*i));

我的代码如下所示。有什么我做错了或者只是错过了,或者是否有更好/更有效的方式来做我想做的事情?

谢谢!

clc
clear all;
close all;
delete legpolymov.txt
diary legpolymov.txt
figure
hold all
t=linspace(-2,2,500);
x = t;
y0 = 1;
y1 = t;
y2 = (3/2)*t.^2 - (1/2);
y3 = (5/2)*t.^3 - ((3/2)*t);
y4 = (3/8) - ((15/4)*t.^2) + ((35/8)*t.^4);
y5 = ((15/8)*t) - ((35/4)*t.^3) + ((63/8)*t.^5);
plot(x,y0)
plot(x,y1)
plot(x,y2)
plot(x,y3)
plot(x,y4)
plot(x,y5)
axis equal
M=moviein(50);
for i=1:50
    plot(x(1:2*i),y0(1:2*i));
    plot(x(1:2*i),y1(1:2*i));
    plot(x(1:2*i),y2(1:2*i));
    plot(x(1:2*i),y3(1:2*i));
    plot(x(1:2*i),y4(1:2*i));
    plot(x(1:2*i),y5(1:2*i));
    hold all
    plot(x(2*i),y0(2*i),'k*');
    plot(x(2*i),y1(2*i),'k*');
    plot(x(2*i),y2(2*i),'k*');
    plot(x(2*i),y3(2*i),'k*');
    plot(x(2*i),y4(2*i),'k*');
    plot(x(2*i),y5(2*i),'k*');
    axis([-2 2 -1 1])
    a = texlabel('alpha');
    title('Legendre Polynomials for (1-x^2)y''''-2xy''+ \alpha  * (\alpha +1) = 0');
    xlabel('x-axis')
    ylabel('y-axis')
    M(i)=getframe;
    hold off
end

movie(M)

movie2avi(M,'Legendre1','FPS',7)
diary off

1 个答案:

答案 0 :(得分:1)

原因是因为y0变量只是一个值,而y1,...y5的其他值是数组。因此,你在循环中索引y0,这样你就可以假定它是一个数组,而不是。

要确保在运行此代码时大小一致,您还需要确保y0也是1 x 500数组。因此,您需要将y0语句替换为:

y0 = ones(1,500);

您的代码应该在替换后运行。


一些小笔记

我刚刚在我的最后运行了这个代码,除了我所做的y0修正之外,它似乎没有正确地使用上面的内容进行绘图。为了使其运行,我建议您进行以下更改:

  • hold all;语句放在for循环的开头。这样就可以绘制所有点,包括曲线。从for循环的中间取出并放在开头。
  • 您有500个数据点,而您的for循环正在以2的倍数绘制数据。因此,您应该将for循环限制从1:50增加到1:250。换句话说:

    for i = 1 : 250
        %// Insert code here
    end
    

完成这些更改后,我就让您的代码正常运行。