シミュレーションの実行中に、「Inf または NaN です」というエラーメッセージが出力されます。
24 ビュー (過去 30 日間)
古いコメントを表示
MathWorks Support Team
2009 年 6 月 29 日
編集済み: MathWorks Support Team
2017 年 2 月 7 日
シミュレーションの実行中に、「Inf または NaN です」というエラーメッセージが出力されます。
(エラーメッセージ)
時間 ** での 'ブロック名' の微係数入力 1 は、Inf または NaN です。シミュレーションは停止します。 特異解が存在する場合があります。
そうでない場合は、(固定ステップサイズを小さくする、または許容誤差を厳しくすることによって)ステップサイズを減らしてみてください。
または
ブロック xxx の 時間 t における状態 n の導関数が有限ではありません。シミュレーションを停止します。解に特異点が存在する可能性があります。そうでない場合は、(固定ステップ サイズを小さくする、または許容誤差を厳しくすることによって)ステップ サイズを減らしてみてください
採用された回答
MathWorks Support Team
2017 年 2 月 7 日
【原因】
'ブロック名'に該当するブロックにおいて、ある計算ステップの前後の状態値が数値表現できないほど大きな差となることから特異解が存在してしまい、結果として値がInf(無限大)やNaN(ゼロ割などの要因により数値として表現できない)となっていることが考えられます。
各計算ステップでの状態値の差は、次のようにして確認することができます。
(1) モデルウィンドウの「シミュレーション」メニューから「コンフィギュレーションパラメータ」を選択します。
(2) 「データのインポート/エクスポート」を選択し、「ワークスペースに保存」パネルから「状態」にチェックを入れます。
(3) エラーによりシミュレーションが停止した後、以下コマンドを実行します。
plot(tout,xout)
【対策】
次の方法によってエラーが回避できる場合があります。
●固定ステップソルバでシミュレーションしている場合、不連続点を正確に検出してシミュレーションするために、可変ステップソルバに変更する。
●固定ステップソルバでの解析が要求される場合、固定ステップの設定をさらに小さな値にする。
●許容誤差の設定をより小さな値にする。
これらの設定によってもエラーが出力される場合は、モデリング内容やパラメータ等の見直しも必要です。
なお、上記エラーメッセージにおいて、「時間0での・・・」と表示されている場合、エラーの発生しているブロックへの初期入力がInfやNaNになっていると考えられますので、初期入力を与えている部分を見直してください。
0 件のコメント
その他の回答 (0 件)
参考
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!