このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Simulink.sdi.compareRuns
2 つのシミュレーション実行でデータを比較
構文
説明
は、diffResult
= Simulink.sdi.compareRuns(runID1
,runID2
)runID1
および runID2
に対応する実行のデータを比較し、結果を Simulink.sdi.DiffRunResult
オブジェクト diffResult
に返します。比較アルゴリズムの詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。
は、1 つ以上の名前と値の引数で指定したオプションを使用して diffResult
= Simulink.sdi.compareRuns(runID1
,runID2
,Name=Value
)runID1
および runID2
に対応するシミュレーション実行を比較します。比較オプションの詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。
例
グローバル許容誤差を使用して実行を比較
2 つのシミュレーション実行の比較に使用するグローバル許容誤差値を指定できます。グローバル許容誤差値は実行内のすべての信号に適用されます。この例では、実行比較のグローバル許容誤差値を指定する方法と、比較結果を解析して保存する方法を説明します。
まず、比較するデータを含むセッション ファイルを読み込みます。セッション ファイルには航空機用縦方向コントローラーの 4 つのシミュレーションに対するデータが含まれます。この例では、さまざまな入力フィルターの時定数を使用する 2 つの実行のデータを比較します。
Simulink.sdi.load('AircraftExample.mldatx');
比較する実行データにアクセスするには、関数Simulink.sdi.getAllRunIDs
を使用して、最新の 2 つのシミュレーション実行に対応する実行 ID を取得します。
runIDs = Simulink.sdi.getAllRunIDs; runID1 = runIDs(end - 1); runID2 = runIDs(end);
関数Simulink.sdi.compareRuns
を使用して実行を比較します。グローバル相対許容誤差の値 0.2
およびグローバル時間許容誤差の値 0.5
を指定します。
runResult = Simulink.sdi.compareRuns(runID1,runID2,'reltol',0.2,'timetol',0.5);
返された Simulink.sdi.DiffRunResult
オブジェクトの Summary
プロパティをチェックし、信号が許容誤差値の範囲内または範囲外のどちらであるのかを確認します。
runResult.Summary
ans = struct with fields:
OutOfTolerance: 0
WithinTolerance: 3
Unaligned: 0
UnitsMismatch: 0
Empty: 0
Canceled: 0
EmptySynced: 0
DataTypeMismatch: 0
TimeMismatch: 0
StartStopMismatch: 0
Unsupported: 0
3 つの信号の比較結果はすべて指定したグローバル許容誤差の範囲内にあります。
関数saveResult
を使用して、比較の結果を MLDATX ファイルに保存できます。
saveResult(runResult,'InputFilterComparison');
信号の許容誤差を使用したシミュレーション データの解析
シミュレーション データ インスペクターを使用して、実行した比較で使用する信号の許容誤差値をプログラムによって指定できます。この例では、航空機用縦方向飛行制御システムのモデルをシミュレーションして収集したデータを比較します。各シミュレーションは入力フィルターの時定数に異なる値を使用して、入出力信号をログに記録します。シミュレーション データ インスペクターと信号許容誤差を使用して結果を比較し、時定数の変更の影響を解析します。
まず、シミュレーション データを含むセッション ファイルを読み込みます。
Simulink.sdi.load('AircraftExample.mldatx');
セッション ファイルには 4 つの実行が含まれます。この例では、ファイル内の最初の 2 つの実行からデータを比較します。ファイルから読み込まれた最初の 2 つの実行について、Simulink.sdi.Run
オブジェクトにアクセスします。
runIDs = Simulink.sdi.getAllRunIDs; runIDTs1 = runIDs(end-3); runIDTs2 = runIDs(end-2);
次に、許容誤差を指定しないで 2 つの実行を比較します。
noTolDiffResult = Simulink.sdi.compareRuns(runIDTs1,runIDTs2);
関数 getResultByIndex
を使用して q
信号と alpha
信号の比較結果にアクセスします。
qResult = getResultByIndex(noTolDiffResult,1); alphaResult = getResultByIndex(noTolDiffResult,2);
各信号結果の Status
をチェックし、比較結果が許容誤差の範囲内または範囲外にあるかどうかを判断します。
qResult.Status
ans = ComparisonSignalStatus enumeration OutOfTolerance
alphaResult.Status
ans = ComparisonSignalStatus enumeration OutOfTolerance
比較では、すべての許容誤差に 0
の値を使用するため、OutOfTolerance
の結果は信号が同一でないことを意味します。
信号の許容誤差値を指定して、時定数の影響をさらに解析できます。比較対象の信号に対応する Simulink.sdi.Signal
オブジェクトのプロパティを設定し、許容誤差を指定します。比較ではベースライン信号に対して指定された許容誤差が使用されます。この例では、時間の許容誤差と絶対許容誤差を指定します。
許容誤差を指定するには、最初にベースライン実行から Signal
オブジェクトにアクセスします。
runTs1 = Simulink.sdi.getRun(runIDTs1); qSig = getSignalsByName(runTs1,'q, rad/sec'); alphaSig = getSignalsByName(runTs1,'alpha, rad');
AbsTol
プロパティと TimeTol
プロパティを使用して、q
信号に対して 0.1
の絶対許容誤差と 0.6
の時間の許容誤差を指定します。
qSig.AbsTol = 0.1; qSig.TimeTol = 0.6;
alpha
信号に対して、0.2
の絶対許容誤差と 0.8
の時間の許容誤差を指定します。
alphaSig.AbsTol = 0.2; alphaSig.TimeTol = 0.8;
結果を再度比較します。比較の結果にアクセスし、各信号の Status
プロパティをチェックします。
tolDiffResult = Simulink.sdi.compareRuns(runIDTs1,runIDTs2); qResult2 = getResultByIndex(tolDiffResult,1); alphaResult2 = getResultByIndex(tolDiffResult,2); qResult2.Status
ans = ComparisonSignalStatus enumeration WithinTolerance
alphaResult2.Status
ans = ComparisonSignalStatus enumeration WithinTolerance
メタデータをチェックする比較の構成
関数 Simulink.sdi.compareRuns
を使用して、データ型と開始時間および終了時間を含む信号データとメタデータを比較できます。単一の比較で 1 つ以上のメタデータに不一致があるかどうかをチェックする場合があります。信号メタデータに不一致があるかどうかをチェックすると、Simulink.sdi.DiffSignalResult
オブジェクトの Status
プロパティがメタデータの不一致を示している可能性があるため、Simulink.sdi.DiffRunResult
オブジェクトの Summary
プロパティが基本的な比較と異なる場合があります。関数 Simulink.sdi.compareRuns
を使用して、インポートされたデータとシミュレーションからログ記録されたデータの比較を構成できます。
この例では、DiffSignalResult
オブジェクトの Summary
が信号の不一致に関する特定の情報をどのように提供できるのかを示す、ワークスペース データから 3 つの方法で作成された実行の比較を構成します。
ワークスペース データの作成
関数 Simulink.sdi.compareRuns
は時系列データを比較します。ベースライン信号として使用する正弦波のデータを timeseries
形式を使用して作成します。timeseries
に Wave Data
という名前を付けます。
time = 0:0.1:20;
sig1vals = sin(2*pi/5*time);
sig1_ts = timeseries(sig1vals,time);
sig1_ts.Name = 'Wave Data';
2 つ目の正弦波を作成してベースライン信号と比較します。少し異なる時間ベクトルを使用して信号を減衰し、2 つの信号が同一でなくなるようにします。信号データを single
データ型にキャストします。この timeseries
オブジェクトにも Wave Data
という名前を付けます。シミュレーション データ インスペクターの比較アルゴリズムは名前を使用した比較のためにこれらの信号を整列します。
time2 = 0:0.1:22;
sig2vals = single(0.98*sin(2*pi/5*time2));
sig2_ts = timeseries(sig2vals,time2);
sig2_ts.Name = 'Wave Data';
シミュレーション データ インスペクターでの実行の作成と比較
関数 Simulink.sdi.compareRuns
は Simulink.sdi.Run
オブジェクトに含まれるデータを比較します。関数 Simulink.sdi.createRun
はシミュレーション データ インスペクターでデータ用に実行を作成します。関数 Simulink.sdi.createRun
は作成された各実行について実行 ID を返します。
runID1 = Simulink.sdi.createRun('Baseline Run','vars',sig1_ts); runID2 = Simulink.sdi.createRun('Compare to Run','vars',sig2_ts);
関数 Simulink.sdi.compareRuns
を使用して実行を比較できます。比較アルゴリズムは信号データを double
データ型に変換し、差分信号を計算する前に信号データを同期します。
basic_DRR = Simulink.sdi.compareRuns(runID1,runID2);
返された Simulink.sdi.DiffRunResult
オブジェクトの Summary
プロパティをチェックし、比較の結果を確認します。
basic_DRR.Summary
ans = struct with fields:
OutOfTolerance: 1
WithinTolerance: 0
Unaligned: 0
UnitsMismatch: 0
Empty: 0
Canceled: 0
EmptySynced: 0
DataTypeMismatch: 0
TimeMismatch: 0
StartStopMismatch: 0
Unsupported: 0
信号間の差が許容誤差から外れています。
実行を比較してデータ型の一致をチェック
システム要件に応じて、比較する信号のデータ型を一致させる場合があります。関数 Simulink.sdi.compareRuns
を使用し、データ型に不一致があるかどうかをチェックしてレポートする比較アルゴリズムを構成できます。
dataType_DRR = Simulink.sdi.compareRuns(runID1,runID2,'DataType','MustMatch'); dataType_DRR.Summary
ans = struct with fields:
OutOfTolerance: 0
WithinTolerance: 0
Unaligned: 0
UnitsMismatch: 0
Empty: 0
Canceled: 0
EmptySynced: 0
DataTypeMismatch: 1
TimeMismatch: 0
StartStopMismatch: 0
Unsupported: 0
ベースライン信号のデータは double
データ型であるのに対し、ベースラインと比較した信号のデータが single
データ型であるため、信号比較の結果は DataTypeMismatch
になります。
実行を比較し、開始時間と終了時間の一致をチェック
関数 Simulink.sdi.compareRuns
を使用して、整列された信号の開始時間と終了時間が同じであるかどうかをチェックする比較アルゴリズムを構成できます。
startStop_DRR = Simulink.sdi.compareRuns(runID1,runID2,'StartStop','MustMatch'); startStop_DRR.Summary
ans = struct with fields:
OutOfTolerance: 0
WithinTolerance: 0
Unaligned: 0
UnitsMismatch: 0
Empty: 0
Canceled: 0
EmptySynced: 0
DataTypeMismatch: 0
TimeMismatch: 0
StartStopMismatch: 1
Unsupported: 0
ワークスペースで作成された信号に異なる終了時間があるため、信号の比較結果は StartStopMismatch
になります。
整列基準を使用して実行を比較
シミュレーション データ インスペクターを使用して実行を比較する際、信号をどのような組み合わせで比較するかを決定する整列基準を指定できます。この例では、航空機用縦方向制御システムのモデルのシミュレーション データを比較します。シミュレーションには矩形波入力が使用されました。1 回目のシミュレーションで使用された入力フィルターの時定数は 0.1s
、2 回目のシミュレーションで使用された入力フィルターの時定数は 0.5s
です。
まず、この例のデータを含むセッション ファイルからシミュレーション データを読み込みます。
Simulink.sdi.load('AircraftExample.mldatx');
セッション ファイルには 4 つのシミュレーションについてのデータが含まれています。この例では、最初の 2 つの実行からのデータを比較します。セッション ファイルから読み込まれた最初の 2 つの実行について、実行 ID にアクセスします。
runIDs = Simulink.sdi.getAllRunIDs; runIDTs1 = runIDs(end-3); runIDTs2 = runIDs(end-2);
比較を実行する前に、シミュレーション データ インスペクターで実行間で信号を整列する方法を定義します。この例では、名前、ブロック パス、Simulink 識別子の順に信号を整列します。
alignMethods = [Simulink.sdi.AlignType.SignalName Simulink.sdi.AlignType.BlockPath Simulink.sdi.AlignType.SID];
指定した整列基準を使用して、2 つの実行でシミュレーション データを比較します。この比較では、矩形波入力の遷移時にソルバーによって使用されるステップ サイズの差異がもたらす影響を説明するために、小さな時間許容誤差が使用されます。
diffResults = Simulink.sdi.compareRuns(runIDTs1,runIDTs2,'align',alignMethods,... 'timetol',0.005);
関数 getResultByIndex
を使用して、比較した実行に含まれる整列した信号の比較結果にアクセスできます。Simulink.sdi.DiffRunResult
オブジェクトの Count
プロパティを使用して、各 Simulink.sdi.DiffSignalResult
オブジェクトについて Status
プロパティをチェックする for
ループを設定できます。
numComparisons = diffResults.count; for k = 1:numComparisons resultAtIdx = getResultByIndex(diffResults,k); sigID1 = resultAtIdx.signalID1; sigID2 = resultAtIdx.signalID2; sig1 = Simulink.sdi.getSignal(sigID1); sig2 = Simulink.sdi.getSignal(sigID2); displayStr = 'Signals %s and %s: %s \n'; fprintf(displayStr,sig1.Name,sig2.Name,resultAtIdx.Status); end
Signals q, rad/sec and q, rad/sec: OutOfTolerance Signals alpha, rad and alpha, rad: OutOfTolerance Signals Stick and Stick: WithinTolerance
入力引数
runID1
— ベースライン実行の識別子
整数
比較におけるベースライン実行の数値識別子。シミュレーション データ インスペクター内の実行に対応する実行 ID として指定します。シミュレーション データ インスペクターは実行の作成時に実行 ID を割り当てます。Simulink.sdi.Run
オブジェクトの ID
プロパティ、関数 Simulink.sdi.getAllRunIDs
、または関数 Simulink.sdi.getRunIDByIndex
を使用して、実行の実行 ID を取得できます。
runID2
— 比較する実行の識別子
整数
比較する実行の数値識別子。シミュレーション データ インスペクターの実行に対応する実行 ID として指定します。シミュレーション データ インスペクターは実行の作成時に実行 ID を割り当てます。Simulink.sdi.Run
オブジェクトの ID
プロパティ、関数 Simulink.sdi.getAllRunIDs
、または関数 Simulink.sdi.getRunIDByIndex
を使用して、実行の実行 ID を取得できます。
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後に表示されなければなりませんが、ペアの順序は重要ではありません。
R2021a より前は、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: AbsTol=x,Align=alignOpts
Align
— 信号の整列オプション
Simulink.sdi.AlignType
スカラー | Simulink.sdi.AlignType
ベクトル
信号の整列オプション。Simulink.sdi.AlignType
スカラーまたはベクトルとして指定します。Simulink.sdi.AlignType
列挙型には、ベースライン実行の各信号を比較実行の信号とペアリングするために使用できる各オプションの値が含まれます。比較に対して 1 つ以上の整列オプションを指定できます。1 つを超える整列オプションを使用するには、配列を指定します。複数の整列オプションを指定する場合、シミュレーション データ インスペクターでは、最初に配列内の最初の要素のオプション、次に 2 番目の要素配列のオプションといった順で信号が整列されます。詳細については、信号の整列を参照してください。
値 | 整列基準 |
---|---|
Simulink.sdi.AlignType.BlockPath | 信号のソース ブロックへのパス |
Simulink.sdi.AlignType.SID | 自動的に割り当てられる Simulink® 識別子 |
Simulink.sdi.AlignType.SignalName | 信号名 |
Simulink.sdi.AlignType.DataSource | MATLAB® ワークスペース内の変数のパス |
例: [Simulink.sdi.AlignType.SignalName,Simulink.sdi.AlignType.BlockPath]
は、信号の名前、次にブロック パスによって信号の整列を指定します。
AbsTol
— 比較のためのグローバル絶対許容誤差
0
(既定値) | 正の値のスカラー
比較のためのグローバル絶対許容誤差。正の値のスカラーとして指定します。
グローバル許容誤差は実行比較のすべての信号に適用されます。比較の信号に対して異なる許容誤差値を使用するには、ベースライン実行の Simulink.sdi.Signal
オブジェクトで使用する許容誤差を指定して、その信号の OverrideGlobalTol
プロパティを true
に設定します。
許容誤差が比較でどのように使用されるかの詳細については、許容誤差の指定を参照してください。
例: 0.5
データ型: double
RelTol
— 比較のためのグローバル相対許容誤差
0
(既定値) | 正の値のスカラー
比較のためのグローバル相対許容誤差。正の値のスカラーとして指定します。相対許容誤差は非整数乗数として表されます。たとえば、0.1
は 10 パーセントの許容誤差を指定します。
グローバル許容誤差は実行比較のすべての信号に適用されます。比較の信号に対して異なる許容誤差値を使用するには、ベースライン実行の Simulink.sdi.Signal
オブジェクトで使用する許容誤差を指定して、その信号の OverrideGlobalTol
プロパティを true
に設定します。
許容誤差が比較でどのように使用されるかの詳細については、許容誤差の指定を参照してください。
例: 0.1
データ型: double
TimeTol
— 比較のためのグローバル時間許容誤差
0
(既定値) | 正の値のスカラー
比較のためのグローバル時間許容誤差。秒単位を使用した正の値のスカラーとして指定します。
グローバル許容誤差は実行比較のすべての信号に適用されます。比較の信号に対して異なる許容誤差値を使用するには、ベースライン実行の Simulink.sdi.Signal
オブジェクトで使用する許容誤差を指定して、その信号の OverrideGlobalTol
プロパティを true
に設定します。
シミュレーション データ インスペクターにおける許容誤差の詳細については、許容誤差の指定を参照してください。
例: 0.2
データ型: double
DataType
— 信号のデータ型に対する比較の感度
"MustMatch"
信号のデータ型に対する比較の感度。"MustMatch"
として指定します。比較される信号の数値データ型の不一致について、比較が影響を受けるようにするには、DataType="MustMatch"
を指定します。
信号のデータ型が一致しない場合、結果に対する Simulink.sdi.DiffSignalResult
オブジェクトの Status
プロパティは DataTypeMismatch
に設定されます。
関数 Simulink.sdi.compareRuns
は、信号データを同期して比較する前に、整列された信号のデータ型を比較します。この名前と値の引数を指定しない場合、比較によるデータ型のチェックで string と数値データの比較の検出のみが行われます。string と数値データの比較では、結果は計算されず、結果のステータスは DataTypeMismatch
になります。異なる数値データ型をもつ整列された信号については、比較で結果が計算されます。
最初の不一致で停止するように比較を構成すると、データ型の不一致によって比較は停止します。停止した比較では、すべての信号について必ずしも結果が計算されない可能性があります。
Time
— 信号の時間ベクトルに対する比較の感度
"MustMatch"
信号の時間ベクトルに対する比較の感度。"MustMatch"
として指定します。比較される信号の時間ベクトルの不一致について、比較が影響を受けるようにするには、Time="MustMatch"
を指定します。この名前と値の引数を指定すると、信号データを同期して比較する前に、整列された信号について、アルゴリズムによって時間ベクトルの比較が行われます。
信号の時間ベクトルが一致しない場合、結果に対する Simulink.sdi.DiffSignalResult
オブジェクトの Status
プロパティは TimeMismatch
に設定されます。
この名前と値の引数を指定しない限り、比較では信号時間ベクトルの差異に影響を受けません。時間ベクトルの差異に影響を受けない比較では、比較の前に比較アルゴリズムによって信号の同期が行われます。同期の動作の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。
時間ベクトルが一致しなければならないよう指定し、また最初の不一致で停止するように比較を構成すると、時間ベクトルの不一致によって比較は停止します。停止した比較では、すべての信号について必ずしも結果が計算されない可能性があります。
StartStop
— 信号の開始時間と終了時間に対する比較の感度
"MustMatch"
信号の開始時間と終了時間に対する比較の感度。"MustMatch"
として指定します。信号の開始時間と終了時間の不一致について、比較が影響を受けるようにするには、StartStop="MustMatch"
を指定します。この名前と値の引数を指定すると、信号データを同期して比較する前に、整列された信号について、アルゴリズムによって開始時間と終了時間の比較が行われます。
開始時間と終了時間が一致しない場合、結果に対する Simulink.sdi.DiffSignalResult
オブジェクトの Status
プロパティは StartStopMismatch
に設定されます。
開始時間と終了時間が一致しなければならないよう指定し、また最初の不一致で停止するように比較を構成すると、開始時間と終了時間の不一致によって比較は停止します。停止した比較では、すべての信号について必ずしも結果が計算されない可能性があります。
StopOnFirstMismatch
— 最初に検出された不一致で比較が停止するかどうか
"Metadata"
| "Any"
最初に検出された不一致で、残りの信号を比較せずに比較が停止するかどうか。"Metadata"
または "Any"
として指定します。停止した比較では、すべての信号について必ずしも結果が計算されない可能性があり、不一致となった結果をより迅速に返す可能性があります。
"Metadata"
- 整列された信号に対するメタデータの不一致によって比較が停止します。メタデータの比較は信号データの比較の前に行われます。シミュレーション データ インスペクターでは、常に信号を整列して信号単位を比較します。最初の不一致で停止するよう比較を構成すると、整列されていない信号、または単位の不一致により、常に比較が停止します。追加の名前と値の引数を指定して、信号のデータ型、開始時間と終了時間、および時間ベクトルなどの追加のメタデータをチェックし、その最初の不一致で停止するよう、比較を構成できます。
"Any"
- 整列された信号に対するメタデータまたは信号データの不一致によって比較が停止します。
ExpandChannels
— 多次元信号の各チャネルの比較結果を計算するかどうか
true
または 1
(既定値) | false
または 0
多次元信号の各チャネルの比較結果を計算するかどうか。logical true
(1
) または false
(0
) として指定します。
true
または1
- 非スカラーのサンプル値をもつ単一の信号として表される多次元信号をスカラーのサンプル値をもつ一連の信号に展開し、各信号の比較結果を計算します。多次元信号が非スカラーのサンプル値をもつ単一の信号として表されるシミュレーション データ インスペクターでの表現は変わりません。
false
または0
— 非スカラーのサンプル値をもつ単一の信号として表される多次元信号の比較結果を計算しません。
出力引数
diffResult
— 結果の比較
Simulink.sdi.DiffRunResult
オブジェクト
比較の結果。Simulink.sdi.DiffRunResult
オブジェクトとして返されます。
制限
シミュレーション データ インスペクターは以下の比較をサポートしていません。
R2020a より前: データ型
int64
またはuint64
の信号。可変サイズの信号。
バージョン履歴
R2011b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)