Main Content

ソルバーの例外イベント

許容誤差の超過イベント

この例は、2 つの同一の非線形バネによる減衰システムをシミュレーションします。2 つのシステムのバネのスティッフは異なります。

このモデルでソルバー プロファイラーを実行すると、[ソルバーの例外] タブで許容誤差の超過イベントを確認できます。

この結果は、バネのスティッフが高いため、ソルバーの許容誤差が限度を超えていることを示しています。通常、最も高速に変化するモデルの状態はソルバーの許容誤差の限度に最も近くなる傾向があります。

ソルバーは可能な限り最も大きいステップを取りながら、速度と精度の間で最適なトレードオフを行おうとします。このトレードオフによってソルバーが許容誤差の限度を超えるステップを取り、強制的にステップ サイズを減らす場合があります。許容誤差の限度を超えること自体は不適切なモデル化ではありません。このプロファイラー統計の目的は、許容誤差の超過イベントをゼロに減らすことではありません。

この統計は、許容誤差の限度を超えそうなモデルの部分を特定するのに役立ちます。最も高速に変化するか、最もスティッフが高いモデルのコンポーネントを特定できます。シミュレーションでこのモデル ダイナミクスを保持するか、簡略化してシミュレーションを高速化するかを決めることができます。

許容誤差の超過の統計を使用してモデリング エラーを特定することもできます。強調表示された状態が高速に変化することを想定していない場合、モデルにエラーがないかどうか調べることができます。この例のモデリング エラーは、スティッフの高いバネのスティッフ性を N/mm ではなく N/m で指定したことが原因であることが考えられます。このエラーにより、バネのスティッフは想定よりも 1000 倍高くなります。

ニュートン反復のエラー

ニュートン反復のエラーは ode15sode23t などの陰的ソルバーに固有であり、数回の試行後に収束しないニュートン反復によるものです。許容誤差の超過イベントと同様に、これらのエラーはシステムが急速に変化する場合に発生する傾向があります。

この例では、マッチを擦ったときに火の玉の半径が変化する方法をシミュレーションします。火の玉は、酸素消費量と玉の表面の成長とのバランスがとれる臨界サイズまで急速に成長します。

ソルバー プロファイラーをこのモデルで実行すると、[ソルバーの例外] タブでニュートン反復のエラーを確認できます。

この結果は、燃焼が始まると、ソルバーの許容誤差を複数回超過することを示しています。平衡状態に達するとシステムは異なって表示され、ニュートンの反復エラーが発生します。システムのヤコビアンが再計算され、ソルバーは引き続き前に進みます。

ニュートンのエラーは不適切なモデル化を示すものではありません。このプロファイラー統計の目的は、これらのエラーをゼロに減らすためではありません。この例では、ソルバーの許容誤差を減らしてこのエラーを回避できます。ただし、ソルバーは不必要に小さなステップを取るようになるため、非生産的です。したがって、この例ではこのエラーが許容されます。

このエラーのタイプは特に Simscape™ モデルにおいて、短期間で大量に発生する場合に問題となります。エラーが密に発生する場合、モデルのロバスト性が数値的に高くないことを示します。数値的なロバスト性を向上する 1 つの方法は、ソルバーの許容誤差を狭くすることです。もう 1 つの方法は、高速な変化を回避するようにモデルを変更することです。

無限状態の例外および無限微分の例外

無限状態の例外は、状態の大きさが無限に近づくと発生します。同様に、状態の微分の大きさが無限に近づくと無限微分の例外が発生します。ソルバーはステップ サイズを削減して、統合時に別の試行を行います。

この例では、若干 realmax より小さい初期状態をもつ 2 つの Integrator Limited ブロックのセットを示します。1e305Constant 入力を統合すると、ソルバーは無限状態の例外にすぐに到達します。

このモデルに対してソルバー プロファイラーを実行すると、[ソルバーの例外] タブで、InfiniteState5 ブロックおよび InfiniteState7 ブロックには 188 および 152 の無限状態の例外があることがわかります。

微分代数方程式のエラー

常微分方程式を使用する Simulink® モデルとは異なり、ほとんどの Simscape モデルは微分代数方程式 (DAE) を使用します。

DAE を使用すると、Simscape モデルの複雑さが増大します。ode15sode23t などのソルバーはさまざまなタイプの DAE を処理できます。ただし、Simscape コンポーネント間の代数制約が複雑で高速に変化する場合、ニュートンの反復プロセスはこれらの制約に関連付けることができません。

この例では、2 つの油圧室のいずれかに向けることができる圧力源をシミュレーションします。

このモデルをシミュレーションすると、Simulink に複数の警告が表示されます。

通常、小さいモデルはこのような警告を処理して完全に最後までシミュレーションすることができます。ただし、この警告は、モデルのロバスト性が数値的に高くないことを示します。モデルへのマイナー変更や大規模モデルへの統合により、エラーが発生する場合があります。

このモデルでソルバー プロファイラーを実行すると、[ソルバーの例外] タブで DAE エラーを確認できます。

この場合の例外は、ソルバーの許容誤差が大きいことが原因で発生しています。ソルバーの許容誤差を狭くすることで、ソルバーが小さなステップを取るように強制し、代数制約における変更をより明確にします。

または、代数制約を取り除くことで、この例外を回避することもできます。この例では、[Check Valve][4-Way Directional Valve] が直接接続されています。圧力と流れの関係が高速に変化すると、ソルバーはその変化を取得できません。この 2 つのコンポーネント間に [Hydraulic Chamber] を挿入すると、これらが適合します。ドライ ノードの詳細については、Simscape ドキュメンテーションを参照してください。