2017-05-01 4 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); 
関連する問題