2017-03-12 13 views
0

私はODE45を使用して解決しようとしているODEのシステムを持っています。複数の初期条件をテストするためにODE45をループで実行する

私はテストしたい約80の初期条件を持っています。 アイデアは、各反復後に従属変数の最終値を取得したいと考えています。

ODE45は初期条件が変わるたびに異なるサイズの行列を与えますが、繰り返しごとに新しい行列を生成したいと考えていましたが、オンラインではこれはです。実際にはです。

私はセルアレイを使用する必要がありますが、私はそれについてどうすればいいか分かりません。

明確にするために、私は本質的にODE45を一度に実行することによって、最終的な値(ドメインの終わりで)と初期状態をプロットしようとしています。

ありがとうございます!

EDITは、ここに私の現在のセットアップです:

y0=0.02; 
z0=0; 
T0=[450:0.25:470]; 
initialconditions=[y0 T0]; 
[zsol, DVsol]=ode45(@ccDEdef,domain,initialconditions(1:N)); 

そして私はちょうど手動で初期条件T0

を変更するために、Nの値を変更して、私のようなの何かの並べ替えをしたい:

for k=1:length(initialconditions) 
[zsolN, DVsolN]=ode45(@ccDEdef,domain,initialconditions(1:k)); 
end 

次に、DVsolで最終的な数値を抽出し、それをT0に対してプロットしてください。

parpool(N) %N is your desired number of initial conditions 
spmd 
    q=your_function(your_inputs(labindex)); %labindex is index of your initial condition 
end 

あなたは、並列コンピューティング・ツールボックスがインストールされている必要があります:あなたは(同じプログラムの複数のデータを意味する)のmatlab SPMDここ

を使用することができます

+0

を私が作ることができるかもしれどれエレガントな解決策は、あなたのODEのカップリングに依存するので、あなたは 'ccDEdef'のコードを投稿してくださいでしたか?その間に、 '' deval'](https://www.mathworks.com/help/matlab/ref/deval.html)を使って出力ベクトルのサイズを 'ode45'から正規化することができます。 – TroyHaskin

+0

それは正確ですか?あなたのシステムは可変次元「1 + N」を持っていますか?その結果、次元と構成のベクトルのリストが結果として得られるはずです。 – LutzL

+0

'DVsolN(end、:)'を配列に保存できないのはなぜですか?あなたの 'for'ループの各インクリメントごとに(あらかじめそれをあらかじめ割り当てておいてください)あなたのTSPAN(あなたの 'domain')に2つ以上の値を持たせてください。その場合、出力ソリューションの次元は固定されます。 – horchler

答えて

0

は一例です。

あなたは「この文を使用することができ、データ取得するために:

q{1} % result of your first initial condition 
    q{2} 
    q{your_desired_labindex} 
関連する問題