Main Content

数値的剛性の軽減

この例は、リアルタイム モデルの準備のワークフローに記載された手順を完了し、モデルを準備する目的で説明した目標を達成するために役立ちます。

ステップ サイズの決定では、Simscape™ モデルの可変ステップ シミュレーションの結果を使用して、ステップ サイズが小さくなるタイミングを特定します。ステップ サイズの減少は、不連続点で動作を正確にキャプチャしたり、数値的にスティッフなシステムにおける急激なダイナミクスに対応したりするために発生します。この種のイベントでは、リアルタイム シミュレーションをサポートするには小さすぎるステップをソルバーで使用する必要が生じる場合が多くあります。この例では、ステップ サイズの決定の結果を使用してモデル内の数値的にスティッフな要素を特定する方法を説明します。また、要素を修正して、精度を低下させずにシミュレーションの速度を上げる方法についても示します。

剛性を軽減する理由

数値的な剛性の場合、モデルをリアルタイム対応にできないことがあります。リアルタイム対応モデルとは、ターゲット プロセッサでシミュレーションを実行した際に、オーバーランを引き起こすことなく許容可能な結果を生成するモデルです。スティッフなシステムには、高速に変化するダイナミクスと、低速に変化するダイナミクスの両方が含まれています。ソルバーで大きなステップを使用すると、通常、低速に変化するダイナミクスはキャプチャされますが、急激な変化は、小さいステップを使用していない限り見逃される傾向があります。小さいステップ サイズを使用すると、1 つのステップ中にリアルタイム コンピューターで解の計算を完了するのに十分な時間がない場合、オーバーランが発生します。

数値的剛性を軽減するには、急激な変化を取り除きます。急激な変化がなければ、ソルバーのステップを大きくしても正確なシミュレーション結果が得られます。ステップ サイズが大きくなるほど、リアルタイム シミュレーション時にモデルでオーバーランが発生する可能性は低くなります。

参照結果のレビュー

  1. このモデルを開くには、MATLAB® コマンド プロンプトで次を入力します。

    model = 'ssc_pneumatic_rts_reference';
    open_system(model)

  2. モデルをシミュレートします。

    sim(model)

  3. ソルバーのステップ サイズの片対数プロット、モーター回転数の結果のプロット、ガスの流れの結果のプロットを含む Figure を作成します。

    h1 = figure;
    subplot(3,1,1)
    semilogy(tout(1:end-1),diff(tout),'-x')
    title('Solver Step Size and Results')
    ylabel('Step Size (s)')
    subplot(3,1,2)
    plot(tout,Pneu_rts_RPM_DATA.signals.values)
    ylabel('Speed (rpms)')
    subplot(3,1,3)
    plot(tout,Pneu_rts_Vol_Flow_DATA.signals.values)
    xlabel('Time (s)')
    ylabel('Flow Rate (m^3/min)')

    次のような場合に、シミュレーションで 1e-10 秒より小さいステップが使用されます。

    • モーター回転数が 0 rpm に近い場合 (シミュレーション時間 t = 約 1、5、9 秒)

    • モーター回転数のステップ変化が定常状態の回転数から開始され、新たな回転数に移行する場合 (時間 t = 約 4、8 秒)

    • 流量のステップ変化が定常状態の速度から開始され、新たな流量に移行する場合 (時間 t = 約 4、8 秒)

    • 体積流量が 0 m^3/min に近い場合 (t = 約 1、4、5 秒)

    この結果は、摩擦や圧縮可能な小さいボリュームを伴うダイナミクスをシミュレーションでキャプチャしているときに、小さいステップ サイズを使用して高い精度を達成する必要があることを示しています。また、ゼロクロッシングを生成する要素も、小さいステップと回復時間の遅さの原因となっている場合があります。

  4. シミュレーション結果を、MATLAB ワークスペース内の新しい変数に割り当てます。そうすることで、データと修正したモデルの結果を比較できます。

    timeRef  = tout;
    simlogRef = simlog;

スティッフな要素の特定と修正

モデルの摩擦負荷を調べて、この摩擦負荷が不連続点を導入したり、数値的剛性を引き起こす小さい時定数をもっていたりするかどうかを判断します。ある要素が、小さいステップ サイズを必要とするような、ダイナミクスの急激な変化を引き起こしている場合、その要素を修正します。

  1. MATLAB パス上の書き込み可能なフォルダーに、モデルを rts_stiffness_model として保存します。

  2. Friction Load ブロックのプロパティ インスペクター (Rotational Friction ブロック) を開きます。次の図は、摩擦トルクと相対速度の特性を示します。これは、ブロックがモデル化する連続的な摩擦をシンプルに近似します。

    起動トルクは、速度しきい値の関数としてモデル化されます。速度がゼロに近いときには、速度の小さな変化によってトルクが大きく変化します。速度がゼロに近くないときには、トルクの変化はより緩やかです。このブロックはスティッフな要素を示しています。要素のスティッフ性を軽減するには、より高い値を [分離摩擦速度] に指定します。

  3. プロパティ インスペクターの [パラメーター] タブで、[分離摩擦速度]0.059137 rad/s から 0.1 rad/s に変更します。

  4. 修正したモデルのシミュレーションを実行します。

結果の解析

Friction ブロックの速度しきい値の変更がコンポーネントの剛性に与える影響を確認するために、2 つのシミュレーションのステップ サイズを比較します。参照結果は、実測データと理論データに基づく予測と一致します。修正モデルの精度を評価するには、修正モデルの速度の結果を、元のバージョンのモデルの結果と比較します。

  1. 修正モデルの参照結果のステップ サイズを、参照データを含む Figure にプロットします。

    h2 = figure;
    semilogy(timeRef(1:end-1),diff(timeRef),'-x',...
    	'LineWidth',1,'MarkerSize',7)
    hold on
    semilogy(tout(1:end-1),diff(tout),'--x','Color','r',...
    	'LineWidth',.1,'MarkerSize',5)
    title('Solver Step Size')
    xlabel('Time (s)')
    ylabel('Step Size (s)')
    h1Leg = legend({'Reference','Modified'},'Location','best');

    ステップ サイズは、シミュレーション時間 t = 4 秒と 9 秒の時点で発生するイベントからの方がより速く回復します。これらの時点では、シミュレーションのスティッフ性が軽減されています。

  2. 元のモデルと修正モデルのログ ノードから、速度と時間のデータを抽出します。

    speedRefNode = simlogRef.Measurements.Ideal_Rotational_Motion_Sensor.R.w;
    speedRef = speedRefNode.series.values('rpm');
    timeRef = speedRefNode.series.time;
    speedModNode = simlog.Measurements.Ideal_Rotational_Motion_Sensor.R.w;
    speedMod = speedModNode.series.values('rpm');
    timeMod = speedModNode.series.time;
    
  3. 両方のシミュレーションの速度データの結果をプロットして比較し、修正モデルの結果が正確であることを確認します。

    h3 = figure;
    plot(timeRef,speedRef)
    h3;
    hold on
    plot(timeMod,speedMod,'r--')
    title('Speed')	
    xlabel('Time (s)')
    ylabel('Speed (rpms)')
    h3Leg = legend({'Reference','Modified'},'Location','best');

  4. 時間 (t) = 約 5 秒の時点にズームして、変曲点を詳しく調べます。

    h3;
    xStart = 0;
    xEnd = 10;
    yStart = -4000;
    yEnd = 4000;
    xZoomStart1 = 4.8;
    xZoomEnd1 = 5.2;
    yZoomStart1 = -400;
    yZoomEnd1 = 150;
    axis([xZoomStart1 xZoomEnd1 yZoomStart1 yZoomEnd1])

    このズーム レベルでは、修正モデルのシミュレーション結果に、実測データと理論データに基づいた予想に応える十分な精度があることがわかります。

これで、Friction Load の数値的スティッフ性が軽減されました。シミュレーション時のステップ サイズの Figure は、回復時間の遅さの原因になっている要素が他にもモデルに存在することを示しています。剛性の原因になっているその他の要素を調べて修正し、回復の遅いステップをさらに削減します。

また、計算コストの削減ゼロクロッシングの削減の手法を使用してモデルを修正し、速度を上げることもできます。オーバーランを発生させる可能性のある小さいステップをすべて除去できれば、ステップ サイズと反復回数の選択の手法を使用して固定ステップ シミュレーションの実行を試すことができます。

参考

関連する例

詳細