Main Content

ノミナル値によるスケーリングを使用したパフォーマンスの改善

ノミナル値は、モデル内で予想される変数の大きさを指定する方法を提供します。これは、変圧器の定格の指定や電圧計の範囲の設定に似ています。この例では、モデル内で個々の変数のスケーリングを微調整してソルバーのパフォーマンスを改善し、シミュレーションのロバスト性を高めるための方法を説明します。

ソルバーが数値シミュレーションおよび数値解析を実行する際には、単位なしの変数が使用されます。ノミナル値は、単位をもつ工学変数を単位なしの変数に変換し、それらをソルバーの最適なパフォーマンス用にスケーリングするための方法です。ノミナル値の値には単位があり、この単位を使用して数値計算で単位を除去します。ノミナル値は次に、数値アルゴリズムから見た変数の大きさを決定します。一般に、大きさのスケールが近いと有利になります。

大きなバネ定数をもつ単純なマス-バネ-ダンパー モデルを考えてみましょう。

このモデルでは、バネ定数を除き、既定のブロック パラメーター設定が使用されています。

  • バネ定数、k = 1e6 N/m

  • 減衰係数、b = 100 N/(m/s)

  • 質量、m =1 kg

初期の質量速度変数 v の優先度は [High]、初期ターゲット値は 0.1 m/s です。モデルでは、m を長さの単位とする既定のノミナル値を使用します。

このモデルをシミュレートすると、バネの [変形] (位置) 変数 x は 10^-5 m の範囲の小さな値になります。

モデル ウィンドウの右下隅にあるハイパーリンクをクリックして、ソルバー プロファイラーを開きます。

ソルバーでは位置変数が完全に無視され、速度変数のみに注目します。位置の数値的大きさは、この変数の許容誤差を下回っています。

ソルバー プロファイラーのツールストリップからアクセスした状態ビューアーには、ソルバーから見た各変数の大きさが表示されます。

モデルの方程式を見ると、状況は明らかです。

mdvdt+bv+kx=0dxdt=v

m や b と比べて k が非常に大きい場合、x は、積 k*x が妥当なサイズとなるよう、方程式内の他の項と比べて小さくなります。この状況を是正するには、x をスケーリングする必要があります。言い換えると、スケーリングされた変数 xs がより妥当なサイズになるよう、x のノミナル値には小さな値を選択する必要があります。

xs=xc,

ここで、c は大きな値です。たとえば、ノミナル値が 1 μm で、元の x の単位が m の場合、c は 1e6 です。方程式は次のようになります。

mdvdt+bv+(k/c)xs=0dxsdt=cv

各項は、同じようなスケールの大きさになります。

このスケーリングの原則をモデル変数に適用してみましょう。最初に、プロパティ インスペクターを使用して、バネの [変形] 変数のノミナル値 x を 100 um (1e-4 m) に変更します。

同様に、質量の [速度] 変数のノミナル値を 10 cm/s (0.1 m/s) に変更します。

これにより、ソルバーから見た両変数の大きさのスケールがおよそ 1 になります。

シミュレーションを再実行します。

これで、ソルバーの例外はシミュレーション開始時の 2 件だけになります。

質量の速度では、有効な絶対許容誤差が絞られていることに注意してください。Simscape™ モデルの有効な絶対許容誤差には単位があり、(ノミナル値 * 単位なしのグローバル AbsTol) として計算されます。最初のシミュレーション実行において、有効な絶対許容誤差は 1e-3 m/s でしたが、現在は 1e-4 m/s となっています。これは、ノミナル値の大きさが変わり、グローバル AbsTol1e-3 のままであるためです。しかし、質量の速度で AbsTol が大きくなり、タイム ステップが大きくなっても、シミュレーションの速度はほぼ同じです。

ソルバーから見た値は、速度変数と位置変数の両方についてほぼ同じ大きさです。

次に、最初のシミュレーション実行中の速度変数の精度により厳密に合致するよう、グローバル AbsTol1e-2 に変更します。

シミュレーションを再実行します。

タイム ステップは同様で、例外は 3 件あり、ここでもシミュレーションの開始時のものです。

参考

関連するトピック