最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Simulink.sdi.compareRuns

2 つのシミュレーション実行でデータを比較

説明

diffResult = Simulink.sdi.compareRuns(runID1,runID2)runID1runID2 に対応する実行でデータを比較し、結果を Simulink.sdi.DiffRunResult オブジェクト diffResult に返します。

diffResult = Simulink.sdi.compareRuns(runID1,runID2,Name,Value) は、1 つ以上の Name,Value のペアの引数で指定したオプションを使用して runID1runID2 に対応するシミュレーション実行を比較し、比較結果を Simulink.sdi.DiffRunResult オブジェクト diffResult に返します。シミュレーション データ インスペクターで比較のために信号を整列する方法の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

すべて折りたたむ

この例では、シミュレーション データの実行を比較して、シミュレーション データ インスペクターのプログラムによるインターフェイスで比較結果を解析する方法を示します。

シミュレーション データの実行を生成

異なる Desired relative slip 値でモデルのシミュレーションを実行し、シミュレーション データ インスペクターのプログラム インターフェイスで解析するシミュレーション データの実行を作成します。

% Open model
load_system('ex_sldemo_absbrake')

% Set the desired slip ratio to 0.24 and simulate
set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.24')
out_1 = sim('ex_sldemo_absbrake');

% Change the desired slip ratio to 0.25 and simulate
set_param('ex_sldemo_absbrake/Desired relative slip','Value','0.25')
out_2 = sim('ex_sldemo_absbrake');

グローバル許容誤差を使用して実行を比較

関数 Simulink.sdi.getAllRunIDs で作成した実行の実行 ID を取得します。次に、グローバルな相対許容誤差とグローバルな時間の許容誤差を使用して実行を比較し、データが仕様を満たすかどうかを解析します。

% Get run IDs for last two runs
runIDs = Simulink.sdi.getAllRunIDs;
runID1 = runIDs(end - 1);
runID2 = runIDs(end);

% Compare runs
runResult = Simulink.sdi.compareRuns(runID1,runID2,'reltol',0.2,'timetol',0.5);

比較結果のプロットを作成

前の手順で Simulink.sdi.compareRuns で作成した Simulink.sdi.DiffRunResult オブジェクトを使用し、Figure でプロットする Ww 信号結果のデータにアクセスします。

% Plot the |Ww| signal difference
signalResult_Ww = getResultByIndex(runResult,1);
figure(1)
plot(signalResult_Ww.Diff)

信号基底による信号の許容誤差の値を変更し、モデル パラメーターの変更による影響を評価できます。この例では slexAircraftExample モデルとシミュレーション データ インスペクターを使用し、制御入力の後にローパス フィルターの時定数を変更することによる影響を評価します。

設定

モデルを読み込み、q, rad/sec 信号および alpha, rad 信号をログ記録するようマークします。次に、モデルのシミュレーションを実行してベースライン実行を作成します。

% Load example model
load_system('slexAircraftExample')

% Mark the q, rad/sec and alpha, rad signals for logging
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',3,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')

% Simulate system
out_1 = sim('slexAircraftExample');

モデル パラメーターの変更

モデル ワークスペースでモデル パラメーター Ts を変更して、入力ローパス フィルターの時定数を変更します。

% Change input filter time constant
modelWorkspace = get_param('slexAircraftExample','modelworkspace');
assignin(modelWorkspace,'Ts',1)

% Simulate again
out_2 = sim('slexAircraftExample');

実行の比較と結果の検査

関数 Simulink.sdi.compareRuns を使用して、シミュレーションで得たデータを比較します。次に、信号結果の match プロパティを検査し、信号が既定の許容誤差 0 の範囲内にあるかどうかを確認します。

% Get run data
runIDs = Simulink.sdi.getAllRunIDs;
runID1 = runIDs(end - 1);
runID2 = runIDs(end);

% Compare runs
diffRun1 = Simulink.sdi.compareRuns(runID1,runID2);

% Get signal result
sig1Result1 = getResultByIndex(diffRun1,1);
sig2Result1 = getResultByIndex(diffRun1,2);

% Check whether signals matched
sig1Result1.Status
ans = 
OutOfTolerance
sig2Result1.Status
ans = 
OutOfTolerance

信号の許容誤差を使用して実行を比較

信号は既定の許容誤差 0 の範囲内に一致しませんでした。時定数の変更の影響をさらに解析するために、信号の許容誤差をベースライン信号プロパティとの比較に追加し、パスに必要な許容誤差を特定します。この例では、時間の許容誤差と絶対許容誤差の組み合わせを使用します。

% Get signal object for sigID1
run1 = Simulink.sdi.getRun(runID1);
sigID1 = getSignalIDByIndex(run1,1);
sigID2 = getSignalIDByIndex(run1,2);

sig1 = Simulink.sdi.getSignal(sigID1);
sig2 = Simulink.sdi.getSignal(sigID2);

% Set tolerances for q, rad/sec
sig1.AbsTol = 0.1;
sig1.TimeTol = 0.6;

% Set tolerances for alpha, rad
sig2.AbsTol = 0.2;
sig2.TimeTol = 0.8;

% Run the comparison again
diffRun2 = Simulink.sdi.compareRuns(runID1,runID2);
sig1Result2 = getResultByIndex(diffRun2,1);
sig2Result2 = getResultByIndex(diffRun2,2);

% Check the result
sig1Result2.Status
ans = 
WithinTolerance
sig2Result2.Status
ans = 
WithinTolerance

この例では、実行間での信号の整列で目標とする基準を使用して実行を比較する方法を説明します。

比較用のシミュレーション データの生成

まず、slexAircraftExample システムを読み込んで、関心のある信号をログ記録用にマークします。

% Load the model slexAircraftExample
load_system('slexAircraftExample')

% Mark signals for logging
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot',1,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',... 
    4,'on')

この例では、変数 Ts のさまざまな値で slexAircraftExample モデルの 2 つのシミュレーションを実行します。get_param を使用して、slexAircraftExample モデルのモデル ワークスペースにアクセスします。次に、変数の値を割り当てて、最初のシミュレーションを実行します。

% Get the model workspace and set the value of variable Ts
modelWorkspace = get_param('slexAircraftExample','modelworkspace');
modelWorkspace.assignin('Ts',0.1);

% Configure model "slexAircraftExample" for logging and simulate
out_1 = sim('slexAircraftExample');

Ts の値を変更して、2 番目のシミュレーションを実行します。次に、シミュレーション データ インスペクターのプログラムによるインターフェイスを使用して、2 つのシミュレーション実行の実行 ID にアクセスします。

% Modify the value of model workspace variable Ts
modelWorkspace.assignin('Ts',0.2);
 
% Simulate again with the new value of Ts
out_2 = sim('slexAircraftExample');
      
% Get run IDs for simulations
runIDs = Simulink.sdi.getAllRunIDs;
runID1 = runIDs(end-1);
runID2 = runIDs(end);

比較のための整列基準を定義

比較を実行する前に、シミュレーション データ インスペクターで実行間で信号を整列する方法を定義します。この例では、名前、ブロック パス、Simulink 識別子の順に信号を整列します。

% Define the alignment criteria for the comparison to align signals by
% name, then by block path, then by SID
alignMethods = [Simulink.sdi.AlignType.SignalName
               Simulink.sdi.AlignType.BlockPath
               Simulink.sdi.AlignType.SID];

指定した整列基準で実行を比較

指定した整列基準を使用して、2 つの実行でシミュレーション データを比較します。この比較では、矩形波入力の遷移時にソルバーによって使用されるステップ サイズの差異がもたらす影響を説明するために、小さな時間許容誤差が使用されます。

% Compare the runs
diffResults = Simulink.sdi.compareRuns(runID1,runID2,'align',alignMethods,...
    'timetol',0.005);

整列した信号の比較結果をチェック

getResultByIndex メソッドを使用して、比較した実行に含まれる整列した信号の比較結果にアクセスできます。

% Check the number of comparisons in the result
numComparisons = diffResults.count;
      
% Display result for each signal in command window
for k = 1:numComparisons
    
    resultAtIdx = diffResults.getResultByIndex(k);
 
    % Get signal IDs for each comparison result
    sigID1 = resultAtIdx.signalID1;
    sigID2 = resultAtIdx.signalID2;
    
    sig1 = Simulink.sdi.getSignal(sigID1);
    sig2 = Simulink.sdi.getSignal(sigID2);
 
    % Display whether signals match
    displayStr = 'Signals %s and %s: %s \n';
    fprintf(displayStr,sig1.Name,sig2.Name,resultAtIdx.Status);
end
Signals alpha, rad and alpha, rad: OutOfTolerance 
Signals Stick and Stick: WithinTolerance 

入力引数

すべて折りたたむ

比較における [ベースライン] 実行の識別番号。

比較における [比較対象] 実行の識別番号。

名前と値のペアの引数

オプションのコンマ区切りされた Name,Value の引数ペアを指定します。ここで、Name は引数名、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペア引数を任意の順序で指定できます。

例: 'abstol',x,'align',alignOpts

整列アルゴリズムを指定する配列を、比較する実行から信号の組み合わせに使用する。シミュレーション データ インスペクターでは、最初に配列内の最初の要素、次に配列内の 2 番目の要素といった順で信号が整列されます。

整列基準
Simulink.sdi.AlignType.BlockPath信号のソース ブロックへのパス
Simulink.sdi.AlignType.SIDSimulink® 識別子 Simulink 識別子を使用したブロック線図コンポーネントの検索
Simulink.sdi.AlignType.SignalName信号名
Simulink.sdi.AlignType.DataSourceMATLAB® ワークスペース内の変数のパス

例: [Simulink.sdi.AlignType.SignalName,Simulink.sdi.AlignType.SID] は、信号を名前で整列してから SID で整列するように指定します。

実行比較ですべての信号に使用されるグローバルな絶対許容誤差 (正の値)。シミュレーション データ インスペクターにおける許容誤差の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

例: 0.5

データ型: double

実行比較ですべての信号に使用されるグローバルな相対許容誤差 (正の値)。相対許容誤差は非整数乗数として表されます。たとえば、0.1 は 10 パーセントの許容誤差を指定します。シミュレーション データ インスペクターに相対許容誤差が適用される方法の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

例: 0.1

データ型: double

実行比較ですべての信号に使用されるグローバルな時間の許容誤差 (正の値)。秒単位で時間の許容誤差を指定します。シミュレーション データ インスペクターにおける許容誤差の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

例: 0.2

データ型: double

出力引数

すべて折りたたむ

比較結果にアクセスを提供する Simulink.sdi.DiffRunResult オブジェクト。

R2011b で導入