2017-05-01 21 views
-1

시간당 t = 0 : 0.1 : 2로 인해 플롯 된 함수의 동영상을 만드는 방법을 묻고 싶습니다. 코드에서 나는 계수의 공식 (a)을 작성한 후에 미분 방정식 (gif)의 공식을 작성했습니다. GIF의 공식에서 시간 (t)에 의존하기 위해 (x-v * t) 대신에 (x-v * t)를주었습니다. 나는 물론 그것을 계획했지만, 단지 시간의 가치를 위해서. 나는 0에서 2 사이의 다른 시간 값에 대한 그림을 단계 너비 = 0.1로 동영상으로 만드는 방법에 매달 렸습니다. 그 문제에 대해 저를 도울 수 있기를 바랍니다.시간 (t = 0 : 0.1 : 2)으로 인해 플롯 된 함수의 동영상을 만들 수 있습니까?

syms x; 

    a=zeros(110,1); 
    %stage 3 

    v=1; %m/s 
    gif=0; 
    t=0; 
    for i=1:1:110 

    a(i)=(2/50)*(int(x*sin((i*pi*x)/50),x,0,1)+int((2-x)*sin((i*pi*x)/50),x,1,2)); 
    gif =gif + a(i)*sin((i*pi*(x-v*t)/50)); 

    end 

    clear x 
    figure(1) 
    x=[-20 20]; 
    plot=fplot(gif,x); 
    grid on 
    xlabel('space'); 
    ylabel('phi(x)'); 

답변

0

이 시도 :

syms x; 

a=zeros(110,1); 
%stage 3 

v=1; %m/s 
gif=0; 
t=0; 
for i=1:1:110 

    a(i)=(2/50)*(int(x*sin((i*pi*x)/50),x,0,1)+int((2-x)*sin((i*pi*x)/50),x,1,2)); 
    gif =gif + a(i)*sin((i*pi*(x-v*t)/50)); 

end 

clear x; 
x = -20:20; % your x values 
y = double(subs(gif,x)); % calculate your y values 
figure; hold on; grid on; 
xlabel('space'); 
ylabel('phi(x)'); 
for i = 1:length(x)-1 
    plot(x(i:i+1),y(i:i+1),'b'); 
    pause(0.1) % pause to create a frame. 
end 

기본 아이디어는 두 점 한 번에 라인을 나타내는 루프를하는 것입니다. 프레임을 일시 중지하고 시각적으로 만들려면 pause(timeIntervalInSecond)을 사용하십시오.

0

해결 방법은 매우 느립니다. 필요하지 않을 때는 기호를 사용하지 마십시오. 함수 이름 인 변수 이름 ('plot')을 사용하지 마십시오. 당신이 그것을 할 방법을 먹으 렴 :

clear 
syms x k real 
[email protected](f) simplify(f, 'Steps', 100, 'IgnoreAnalyticConstraints', true); 
a=matlabFunction(simp((2/50)*(int(x.*sin((k.*pi.*x)/50),x,0,1)+int((2-x).*sin((k.*pi.*x)/50),x,1,2)))); 

clearvars -except a 

[email protected](v,k,x,t)sum(a(1:k).*sin(((1:k).*pi.*(x-v.*t)/50)),2); 

v=1; 
[email protected](x,t)gif(v,110,x,t); 

figure(1) 
x=[-20:0.1:20]'; 
h=plot(x,gif_110(x,0)); 
grid on;xlabel('space');ylabel('phi(x)'); 

for t=0:0.1:2 
    h.YData=gif_110(x,t); 
    drawnow; 
    pause(0.1); 
end 
0

다른 대답은 컴퓨터의 속도와 기능의 복잡성에 따라 실시간으로되지 않을 수있는, 직접 영화를 재생합니다. 또는 동영상을 원하는 속도로 재생하는 play it을 나중에 녹화 할 수 있습니다.

% record the movie 
F(frameCount) = struct('cdata',[],'colormap',[]); 
for i=1:frameCount 
    plot(.., ..) % plot your data 
    drawnow 
    F(i) = getframe; 
end 

% Play the movie one time with the correct frame speed 
movie(F,1,1/dt);