メインコンテンツ

ゼロクロッシングの低減

R2026b

この例では、Simulink モデル内のゼロクロッシングを特定して削除する方法を示します。ゼロクロッシングにより、これらのイベントではソルバーのタイム ステップが小さくなります。固定ステップかつ固定コストでシミュレーションする場合、ソルバーはステップ サイズを維持するため、ゼロクロッシング イベントで忠実度が低下します。ゼロクロッシングを削除するプロセスでは、ゼロクロッシングのソースを等価なエンティティに置き換えます。同様のプロセスを適用することで、ゼロクロッシングの他のソースを置き換え、新しい結果を検証できます。次の要素が、ゼロクロッシングの一般的な原因です。

  • Step ブロックや Relay ブロックなどのブロックによる不連続信号

  • Diode ブロックや Transistor ブロックなどのブロックによる非線形要素

  • Switch ブロックや Multiport Switch ブロックなどのブロックによる切り替えイベント

  • ハード ストップや摩擦、接触力を含む物理システム

  • 制御ロジック

ゼロクロッシングの発生回数を減らすと、可変ステップでのパフォーマンスが向上し、固定ステップへの変換時に忠実度の損失を最小限に抑えられます。すべてのゼロクロッシングを削除しなくても、妥当な結果が得られる場合があります。

ベースライン結果の生成

モデルを開きます。このモデルでは、Flow Rate Source (IL) ブロックを使用して、あるタンクから別のタンクに液体を移送します。PS Step ブロックは一方の Flow Rate Source (IL) ブロックを制御し、Step ブロックはもう一方を制御します。

system = "ReduceZeroCrossings";
open_system(system)

モデルをシミュレーションし、ReduceZeroCrossingsPlotFlowRate 補助関数を使用して結果をプロットします。

sim(system);
ReduceZeroCrossingsPlotFlowRate

Figure ReduceZeroCrossings contains an axes object. The axes object with title Simscape and Simulink, xlabel Time (s), ylabel Flow Rate (kg/s) contains 2 objects of type line. These objects represent Simscape, Simulink.

ソルバー プロファイラー ツールを使用してソルバーのパフォーマンスを解析するには、[デバッグ] タブの [パフォーマンス] セクションにあるボタンを [ソルバー プロファイラー] に設定します。

[ゼロクロッシング] チェック ボックスを選択し、モデルを実行します。

ソルバー プロファイラー ツールでは、1 秒と 2 秒の時点でゼロクロッシングが示されます。これは、Step ブロックと PS Step ブロックのステップ時間に対応しています。

Step ブロックのゼロクロッシングの削除

Step ブロックによって発生するゼロクロッシングを削除するには、Step Inputs サブシステムを開き、Step ブロックを、ステップ動作を近似する MATLAB Function ブロックに置き換えます。

Step ブロックのパラメーター値は次のとおりです。

ステップ時間

1

初期値

-2

最終値

3

サンプル時間

0

tanh 関数を使用することで、ステップ動作を近似できます。調整可能なステップを作成するには、次の式を使用します。

y=xInitial+(xFinal-xInitial)⋅1+tanh(k*(t-t0))2,

ここで、

  • y は、MATLAB Function ブロックからの信号出力です。

  • k は、調整可能な急峻度係数です。

  • t は現在の時間です。

  • t0 はステップの開始時刻です。

  • xInitial はステップの初期値です。

  • xFinal はステップの最終値です。

Clock ブロックを入力として受け取るように MATLAB Function ブロックを設定します。

Step ブロックを設定済みの MATLAB Function ブロックと Clock ブロックに置き換えるには、補助関数 replaceStepWithMATLABFunction を使用します。

replaceStepWithMATLABFunction(system)

MATLAB Function ブロックでは次のコードを使用します。

function y = smoothStep(t)
    t0 = 1;
    xInitial = -2;    
    xFinal = 3; k = 100;
    y = xInitial + (xFinal-xInitial) * (1+tanh(k*(t-t0)))/2;
end

PS Step ブロックのゼロクロッシングの削除

MATLAB Function ブロックで使用したのと同じ tanh 関数を SSC ファイルに追加して、Simscape Component ブロックで実装することで、PS Step ブロックを置き換えられます。PS Step ブロックを、コメント アウトされた Simscape Component ブロック Tanh Step に置き換え、補助関数 replacePSStepWithTanhStep を使用してそのブロックのコメントを解除します。

replacePSStepWithTanhStep(system)

Tanh Step ブロックは TanhStep.ssc ファイルを実装します。このファイルは、tanh 関数を含み、Flow Rate Source (IL) ブロックに物理量信号を送信するための端子を備えています。SSC ファイルは、PS Step ブロックの値を既定のパラメーター値として使用します。time 変数は、現在のシミュレーション時間を示します。

ステップ時間

2

初期値

-3

最終値

2

サンプル時間

0

SSC ファイルの内容を表示します。

text = fileread("TanhStep.ssc");
disp(text)
component TanhStep
    % Define outputs
    outputs
        y; % :right
    end

    % Define parameters
    parameters
        y_initial = {-3, '1'}; % Initial value (unitless)
        y_final = {2, '1'}; % Final value (unitless)
        t_step = {2, 's'}; % Step time
        k = {1000, '1/s'}; % Steepness 
    end

    % Define equations
    equations
        % Hyperbolic tangent step function
        y == y_initial + (y_final - y_initial) / 2 * (1 + tanh(k*(time - t_step)));
    end
end

次の図は、更新された Step Inputs サブシステムを示します。

更新された結果のシミュレーション

ソルバー プロファイラー ツールを開いてモデルを実行し、ゼロクロッシングが発生するかどうかをチェックします。

ゼロクロッシングはなくなりました。PS Step ブロックを置き換えると、最小ステップ サイズは約 10e-4 となり、ゼロクロッシングによって生じた 10e-14 と比べて改善します。Step ブロックを置き換えても、ステップ サイズには影響しないようです。

新しい流量結果を表示するには、シミュレーションを実行し、ReduceZeroCrossingsPlotFlowRate 補助関数を使用します。

sim(system);
ReduceZeroCrossingsPlotFlowRate

Figure ReduceZeroCrossings contains an axes object. The axes object with title Simscape and Simulink, xlabel Time (s), ylabel Flow Rate (kg/s) contains 2 objects of type line. These objects represent Simscape, Simulink.

Simulink の結果はベースライン結果と一致しません。傾斜したステップが生じるのは、可変ステップ ソルバーが局所誤差の推定に基づいてタイム ステップを選択し、さらに tanh 遷移の急峻部分ではサンプリング密度が十分でない場合があるためです。可変ステップでの結果を改善するために、ソルバーの許容誤差を調整できます。Solver Configuration ブロックの [ローカル ソルバーを使用] パラメーターを使用すると、固定ステップでの結果が改善します。

set_param(system + "/Solver Configuration", UseLocalSolver="on")
sim(system);
ReduceZeroCrossingsPlotFlowRate

Figure ReduceZeroCrossings contains an axes object. The axes object with title Simscape and Simulink, xlabel Time (s), ylabel Flow Rate (kg/s) contains 2 objects of type line. These objects represent Simscape, Simulink.

参考

| | | |

参考

トピック