Simulink で行うように、いくつかの基本的なシステム シミュレーションに Yampa を使用しようとしています。この場合、この simulink チュートリアルで導入されたスプリングとダンパー システムをシミュレートしたいと考えています。システムを表すために、次の信号関数を作成しました。
system = time >>> force >>> displacement
force = constant (m * g)
displacement = feedback (-) (velocity >>> integral) (gain $ k / m) 0
velocity = feedback (-) integral (gain $ c / m) 0
関数は基本的なフィードバック ループfeedback
を作成し、次のように実装されます。
feedback op a b b0 = loopPre b0 inner
where inner = arr (uncurry op) >>> a >>> (identity &&& b)
ああ、そして:
gain x = arr (*x)
賢明な正の定数を使用すると、非常に不安定なシステムが得られます。
フィードバック ループを構築したり、統合を適用したりする方法に明らかに問題がありますか?