2014-09-09 7 views
0

저는 Matlab을 처음 사용하고 여러 곡선 (Legendre 다항식)의 .avi 파일을 만들기 위해 각 곡선을 따라 빨간색 점이 그려지는 것으로 추적하고 있습니다. 전에 파라 메트릭 방정식과 linspace를 사용하여이 작업을 수행 했으므로 제대로 작동하는 것으로 보입니다. 나는 코드가 기본적으로 내가 여기서 뭘 원하는거야 무엇에 대해 동일 할 것이라고 생각,하지만 난 프로그램 실행하려고 다음과 같은 오류 메시지가 매번 점점 계속 :Matlab에서 여러 플롯을 사용하여 동영상 만들기

??? 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

아래의 질문에 대한 완벽한 답변 외에; 각 루프마다 새로운 줄거리를 만드는 것은 느립니다. 예를 들어, 필요한 점의 전체 집합을 생성하고 'get'(예 : 'get (h,'XData ')') 및 'set'명령으로 이동하거나 단일 점을 만들어 주변을 이동할 수 있습니다 그림에서 오래된 값을 제거하지 마십시오 ('에라 모드'참조). 각 루프에서 그림을 업데이트하려면 'drawnow'를 사용하십시오. –

+0

@ A.Klomp - 아주 좋은 지적입니다! – rayryeng

답변

1

당신의 y0 변수는 단일 값이며, 아직 y1,...y5의 다른 값이 배열 때문입니다 이유. 따라서 루프에 y0의 색인을 생성하면 배열에없는 경우를 가정합니다.

이 코드를 실행할 때 크기가 일정하게 유지되도록하려면 y01 x 500 배열이어야합니다. 따라서, 당신은 당신의 y0 문을 대체해야합니다

y0 = ones(1,500); 

귀하의 코드는 다음과 교체를 수행 한 후 실행해야합니다.


약간의 노트

난 그냥 내 말에이 코드를 실행, 그리고 내가 만든 y0 보정을 제외하고, 당신이 정확한 형태로 위의 무엇을 사용하여 제대로하려하지 않는 것 . for 루프의을 시작하는 에서

  • 놓습니다 hold all; 문 : 실행하려면이를 얻기 위해, 당신이 다음과 같이 변경합니다 좋습니다. 이렇게하면 커브를 포함한 모든 점들이 플롯됩니다. for 루프 중간에서 꺼내서 처음에 넣습니다.
  • 데이터 포인트가 500 개이고 for 루프가 2의 배수로 데이터를 플로팅합니다. 따라서 for 루프 제한을 1:50에서 1:250으로 늘려야합니다. 즉 : 나는 이러한 변경을하면

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

, 나는이 작동하도록 코드를 얻었다.

+0

그건 정말 바보 같았 어. 그래도 고마워! – Alan

+0

@Alan - 하하, 환영합니다. 우리 모두에게 일어납니다. 행운을 빕니다! – rayryeng