質問: 'simple_model'; open_system(slx); sim(slx); システム同定で同定した伝達関数を用いてシミュレーション・実験を行っていますが、固定ステップサイズを1にしたときに出力が無限大に発散してしまいシミュレーションが停止してしまいます。2次遅れ系(1次/2次)や1次遅れ系(0次/1次)の伝達関数ではシミュレーションは正常に終了します。 2次遅れ系(0次/2次)モデルにおいて固定ステップサイズのみを変更すると(0.1 , 0.25 , 0.5 , 1)、その値によって結果が収束したり、振動的になったり、無限大に発散し、シミュレーションが停止するなど、固定ステップサイズによって結果が変動します。 エラー: order_0_2_constant_simple_model (line 38) ブロック 'simple_model/transfer fcn' の時間 110.0 における状態 '1' の導関数が有限ではありません。シミュレーシ ョンを停止します。解に特異点が存在する可能性があります。そうでない場合は、(固定ステップ サイズを小さくする、または許容 誤差を厳しくすることによって) ステップ サイズを減らしてみてください 診断ビューアーでは「解に特異点が存在する場合があります。そうでない場合は、(固定ステップサイズを小さくする、または許容誤差を厳しくすることによって)ステップサイズを減らしてみてください」と表示されます。実験の都合上、固定ステップサイズをできるだけ大きな値を取りたい場合でもシミュレーションが正常に終了するためには、やはり固定ステップサイズを小さくするという方法しかないのでしょうか。ソルバーを変更してみても、固定ステップサイズが1だと、シミュレーションが停止するか、明らかに違う結果が出てしまいます(目標値30に対し、定常偏差が25残ってしまうなど)。もし根本的な解決策があれば教えて頂ければ幸いです。 また診断ビューアーに表示されているようなステップサイズが大きいと状態の導関数が有限でなくなる理由も教えて頂きたいです。
回答: おっしゃっている2次遅れ系(0次/2次)モデルのステップ応答は、添付ファイル「応答.png」のようになります。固定ステップサイズというのは、信号処理の世界で言う「サンプリングタイムステップ」にあたります。サンプリングタイムステップが1秒のとき、このモデルのダイナミクスは正確に再現することはできません。発散したりするのもそれが理由です。 一般的に、離散時間の計算でそのモデルのダイナミクスを表現するには、立ち上がり時間の10分の1のサンプリングタイムステップが必要とされています。今回の場合は0.02秒ぐらいに設定するのがよいと考えられます。 simulinkのブロックはサブシステムごとにサンプリングタイムステップを設定することができます。フィルター部分だけを連続状態にして、それ以外のサンプリングタイムステップを例えば1秒に設定する、ということが可能です。添付のモデルを確認してください。 この2次遅れ系のモデルの計算は簡単なので、この部分だけを0.02秒にしても、計算時間にはそれほど影響しないのではないでしょうか。