3

次のサブシステムを含む Simulink モデルがあります。

解釈された MATLAB 関数を含む Simulink サブシステム

ブロックは同じ名前のbm_train_adapterMATLAB 関数を呼び出し、すべての入力引数を 1 つのベクトルで渡します。

サブシステムには 900 (秒) のサンプル時間が与えられています。これが、すべての信号が赤色で表示されている理由です (離散信号の場合)。

ただし、デバッガーでは、bm_train_adapter各シミュレーション タイムステップで関数が 2 回呼び出されることがわかりました。関数には副作用が含まれているため、これはひどく間違った結果をもたらします。

Simulink が解釈された MATLAB 関数をタイムステップごとに複数回呼び出すのはなぜですか? どうすればこれを防ぐことができますか?

4

2 に答える 2

1

その理由は、サブシステムの単位遅延ブロックによって引き起こされる代数ループがモデルに含まれていたためです。これらのループを解決するために、ソルバーはいくつかのブロックを複数回評価するしかありませんでした。

解決策は、サブシステムからすべての単位遅延を移動することでした。

于 2012-09-13T13:40:53.200 に答える
1

これは、ソルバーの設定が原因だと思います。Configuration Parametersウィンドウで、ペインを確認しますSolver Options

discreteおよびode1ソルバーはタイムステップごとに 1 回呼び出される と思います。ode2タイムステップごとに 2 回呼び出し、タイムステップode4ごとに 4 回呼び出します。

この動作は、連続ダイナミクスをシミュレートするのに非常に役立ちますが、離散要素と相互作用する場合は混乱する可能性があります。

于 2012-08-14T00:12:42.167 に答える