PLECSコンポーネントライブラリに「微分」ブロックがないのはなぜですか?

問題: 

PLECSコンポーネントライブラリに積分器ブロックはありますが、微分ブロックはありません。 この理由は何ですか?

 

解決手法: 

一般的に、数値微分はシミュレータでの取り扱いが非常に難しく、 合理的かつ正確な解を得るには、非常に小さな時間ステップを必要とします。 また、可変ステップソルバの自動ステップサイズ制御は積分器では機能しますが、数値微分では機能しません。 他にも、微分ブロックは入力信号のノイズを増幅するという現実的な問題があります。

上記より、問題を定式化して、微分の代わりに積分器を使用してモデリングすることをお勧めしています。

可変ステップソルバーと組み合わせて微分を使用する場合は、下記をC言語ブロックに記述して実装することが可能です:

指定タブ:

入力数:1
出力数:1
離散状態数:2
サンプリング時間:0

コード入力タブ
宣言文:

#define lastTime DiscState(0)
#define lastInput DiscState(1)

コード入力タブ
初期化関数:

lastTime = CurrentTime;
Output(0) = 0;

コード入力タブ
出力関数:

if (lastTime != CurrentTime)
{
   Output(0) = (Input(0) - lastInput)/(CurrentTime - lastTime);
}

コード入力タブ
更新関数:

lastTime = CurrentTime;
lastInput = Input(0);
分類: