2016-05-31 4 views
0

ode45は、内部可変ステップサイズを使用していることを知っているので、私は疑問を持っています。たとえば、私の場合、ODEのモデルがあり、サンプリング時間は5分です。したがって、私のメインのシミュレーションループ内で私はode45使用して、それを解くことで、私のモデルの出力を得るために、以下の行を持っている: Matlab ode45内部ステップ

[T,X] = ode45(@(t,x) model(t,x,u,data),[t t+scenario.Ts],x0); 
uがモデルの入力です

は、dataはパラメータを持つ構造体である

x0があります現在の時間ステップにおける初期条件および [t t+scenario.Ts]が初期および最終時間である。私の疑問は、 tt+scenario.Tsの間で、 ode45 - ソルバーは可変時間ステップを使用するため、私が入力アクションを導入する方法です。 uが影響を受ける可能性があります。したがって、私は特定の入力 uの値が [t t+scenario.Ts]の間の内部タイムステップによって一定に保たれることを理解します。次に、例えばフラックス、すなわち水をタンクに入れた場合、時間ステップはこれに直接的な影響を及ぼす。 u

もう少し例をあげて説明しましょう。 [t t+scenario.Ts]以上の場合は、私はu(1) = 10を知っています。それで、私が使用すべき実際の入力はu(1)=10/(# of time steps between [t0 tend])です。しかし、内部のステップは可変なので入力する必要がありますか?

私の問題を理解して助けてくれることを願っています。

+0

@ykaragol [推奨編集](http://stackoverflow.com/review/suggested-edits/12534423)でコードを書式設定する場合は、次回以降にすべての書式を設定してください。さもなければ、あなたの編集は何の改善もされていないとして拒否される可能性があります。 – Matt

+0

'model'(または代表的な実行可能な例)のコードを見ずに言うのが大変です。あなたは時間に関してパラメータを変えようとしているかもしれないようです。非効率的で不正確な結果をもたらす可能性のある堅牢なシステムを作成している可能性があります。 'model'関数は時間ステップの数の関数であってはなりません。 'u'は' t'や状態ベクトル 'x'の関数でなければなりません。 – horchler

答えて

0

入力は、離散化とは無関係に入力する必要があります。あなたの方程式が連続して定式化されていれば、これは問題ではありません。制御変数が一定でない場合は、明示的に従属変数tにして、関数u(t)を書き込む必要があります。

私の答えがあなたを助けるには不十分な場合は、アプリケーション、特にシミュレートするダイナミックモデルについて詳しく説明してください。その後、私たちはさらにあなたを助けることができます。

関連する問題