2016-10-20 20 views
1

は、我々は一階のODEのシステムのために、以下のソルバーを持っていると仮定してみましょう:Matlabのode45の結果をリアルタイムで表示するには?

% func.m 
    function dydt = func(t,y) 
    dydt = [y(2); (1-y(1)^2)*y(2)-y(1)]; 

とメインコード:

% solver.m 
tspan=0:1:10; 
[t,y] = ode45(@func,tspan,[2; 0]); 

リアルタイムに結果を表示する方法、Y1( (t = 0,1,2、...、10)の各時間ステップtについて、コード全体が終了するのを待つことなく、y2(t)とy2

答えて

2

OutputFcn odeソルバーオプションを使用する必要があります。例えば、時間対解をプロットするために、内蔵の出力機能odeplotを使用することができます。

options= odeset('OutputFcn',@odeplot); 
[t,y] = ode45(@func,[0 200],[2; 0],options); 

独自の出力機能を使用することができます。ここに例があります:

myOutputFcn= @(t,y,flag)fprintf('t= %s y= %s\n',mat2str(t),mat2str(y))*0; 
options= odeset('OutputFcn',myOutputFcn); 
[t,y] = ode45(@f,0:1:10,[2; 0],options); 
+0

私はこのコードを次のように変更しました:tspan = 0:1:10; [t、y] = ode45(@ func、tspan、[2; 0]、オプション); t = 0,1,2、...、10の場合、tとy1(t)、y2(t)をどのように印刷するか?あなたのコードは、tとyについていくつか奇妙な結果を出します。ここでyには2つの列があります。 – Andyk

+0

@Andyk申し訳ありませんが、 'fprintf'を使用するといくつかのバグがありました。私は答えを修正しました – AVK

+0

なぜfprintfに0を掛けましたか? – Andyk

関連する問題