我对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
答案 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
完成这些更改后,我就让您的代码正常运行。