ドキュメンテーション

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

出力信号の次元の決定

信号の次元について

ブロックが非スカラー信号を出力可能な場合、ブロックが出力する信号の次元は、ブロックがソース ブロックである場合はブロックのパラメーターによって決まり、そうでない場合はブロックの入力とパラメーターの次元によって決まります。

信号が最終的にシミュレーションで使用する次元を判別するには、最初にブロック線図を更新します (たとえば Ctrl+D を押します)。次に以下のいずれかの方法を選択します。

  • ブロック線図に直接次元を表示します。この手法を使用してブロックのパスに沿って信号の次元をトレースします。モデルで [情報表示][信号と端子][信号の次元] を選択します。

  • モデル データ エディターで次元を調べます。検索および並べ替えが可能なテーブルに情報が表示されます。テーブルの [次元] 列の各セルの右側に、モデル内の対応する信号線の正しい次元が表示されます。モデル データ エディターの詳細については、モデル データ エディターを使用したデータ プロパティの設定を参照してください。

ソース ブロックの出力の次元の決定

ソース ブロックは、入力のないブロックです。ソース ブロックの例としては、Constant ブロックや Sine Wave ブロックなどがあります。Simulink® ソース ブロックの一覧は、Sourcesを参照してください。ソース ブロックの出力の次元は、そのブロックの [ベクトル パラメーターを 1 次元として解釈] パラメーターがオフである (すなわち [ブロック パラメーター] ダイアログ ボックスで選択されていない) 場合は、ソース ブロックの出力値パラメーターの次元と同じになります。[ベクトル パラメーターを 1 次元として解釈] パラメーターがオンである場合は、パラメーターの次元が N 行 1 列または 1 行 N 列でない限り、出力の次元は出力値パラメーターの次元と同じになります。後者の場合、ブロックは幅 N のベクトル信号を出力します。

ソース ブロックの出力値パラメーター (複数の場合もあり) と [ベクトル パラメーターを 1 次元 として解釈] パラメーターによってソース ブロックの出力の次元がどのように決定されるかを考える例として、Constant ブロックの場合を見てみましょう。このブロックは、[定数] パラメーターに等しい定数信号を出力します。[定数値] パラメーターの次元と [べクトル パラメーターを 1 次元として解釈] パラメーターの設定によって、ブロック出力の次元がどのように決まるかを次の表に示します。

定数[ベクトル パラメーターを 1 次元として解釈]出力

スカラー

オフ

1 要素配列

スカラー

オン

1 要素配列

1 行 N 列

オフ

1 行 N 列

1 行 N 列

オン

N 要素ベクトル

N 行 1 列

オフ

N 行 1 列

N 行 1 列

オン

N 要素ベクトル

M 行 N 列

オフ

M 行 N 列

M 行 N 列

オン

M 行 N 列

Simulink のソース ブロックでは、出力する信号の次元または Simulink による次元の推測元である値を指定することができます。したがって、ソース ブロックを使用して、さまざまな次元の信号をモデルに組み込むことができます。

非ソースブロックの出力の次元の決定

ブロックに入力がある場合、スカラー拡張後の出力の次元は入力の次元と同じになります (信号とパラメーターの次元に関するルールで説明するように、すべての入力の次元が同じでなければなりません)。

信号とパラメーターの次元に関するルール

Simulink モデルを作成する際には、信号とパラメーターの次元に関する次のルールに従わなければなりません。

入力信号の次元に関するルール

ブロックへのすべての非スカラー入力は、次元が同じでなければなりません。

1 つのブロックにスカラー入力と非スカラー入力が混在していても構いませんが、すべての非スカラー入力の次元が同じでなければなりません。Simulink は、非スカラー入力と次元が同じになるようにスカラー入力を拡張します (入力とパラメーターのスカラー拡張を参照)。

ブロックパラメーターの次元に関するルール

一般に、ブロック パラメーターは、ブロックへの入力の次元と同じ次元をもたなければなりません。Simulink は、この一般ルールに関連した柔軟性を提供する処理をいくつか実行します。

  • ブロックは、非スカラー入力に対応するスカラー パラメーターをもつことができます。この場合、Simulink は、非スカラー入力と次元が同じになるようにスカラー入力を拡張します (入力とパラメーターのスカラー拡張を参照)。

  • 入力がベクトルの場合、対応するパラメーターは、Nx1 または 1xN の行列になります。この場合、Simulink は、N 個の行列要素を、入力ベクトルの対応する要素に適用します。このような例外処理が行われるため、実際には 1xN または Nx1 の行列である MATLAB® の行ベクトルや列ベクトルを使用して、ベクトル入力に適用するパラメーターを指定することができます。

ベクトルや行列の入力変換に関するルール

Simulink は、次のように、ベクトルを行または列の行列に、あるいは行または列の行列をベクトルに変換します。

  • 行列を必要とする入力にベクトル信号が接続される場合、Simulink は、ベクトルを 1 行または 1 列の行列に変換します。

  • 1 列あるいは 1 行の行列が、ベクトルを必要とする入力に接続される場合、Simulink は行列をベクトルに変換します。

  • ブロックへの入力が、ベクトルと行列の混在で、行列入力がすべて 1 列あるいは1行の場合、Simulink は、それぞれベクトルを 1 列あるいは1行の行列に変換します。

    メモ:

    シミュレーション中にベクトルや行列の変換が発生した場合に警告メッセージやエラー メッセージを表示するように、Simulink を構成することができます。詳細については、ベクトル/行列ブロック入力変換を参照してください。

入力とパラメーターのスカラー拡張

"スカラー拡張" とは、スカラー値を非スカラー配列に変換することです。Simulink は、ほとんどのブロックに対する入力またはパラメーターにスカラー拡張を適用します。Simulink がブロックの入力とパラメーターにスカラー拡張を適用するかどうかについては、それぞれのブロックの節に記載されています。

入力のスカラー拡張とは、他の非スカラー入力や非スカラー パラメーターの次元と一致するようにスカラー入力を拡張する処理です。ブロックへの入力にスカラー信号と非スカラー信号が混在している場合、Simulink は、スカラー信号を拡張して、他の非スカラー入力と同じ次元の非スカラー信号にします。たとえば、関連付けられた非スカラー入力が 3 の次元をもつ場合、4 のスカラーがベクトル [4 4 4] に拡張されます。

パラメーターのスカラー拡張とは、非スカラー入力の次元と一致するようにスカラー ブロック パラメーターを拡張する処理です。

入力関連付けられたブロック パラメータースカラー拡張

スカラー

非スカラー

パラメーターの次元に一致するように入力が拡張されます。

スカラー入力と非スカラー パラメーターを参照してください。

非スカラー

スカラー

入力要素の数と一致するようにスカラー パラメーターが拡張されます。

非スカラー入力とスカラー パラメーターを参照してください。

スカラーと非スカラーの組み合わせ

対応するパラメーターなし

最大の非スカラー入力の次元と一致するようにスカラー入力が拡張されます。

スカラー入力、非スカラー入力、関連付けられていないパラメーターを参照してください。

スカラー入力と非スカラー パラメーター

この例では、Gain ブロックへの Constant ブロック入力はスカラーです。Gain ブロックの [ゲイン] パラメーターは非スカラーです。Simulink は、非スカラーの [ゲイン] パラメーターの次元に一致するようにスカラー入力を拡張します。これは、Display ブロックのシミュレーション結果に反映されています。

非スカラー入力とスカラー パラメーター

この例では、Gain ブロックへの Constant ブロック入力は非スカラーです。Gain ブロックの [ゲイン] パラメーターはスカラーです。Simulink は、Constant ブロックの非スカラー入力の次元に一致するようにスカラー パラメーターを拡張します。これは、Display ブロックのシミュレーション結果に反映されています。

スカラー入力、非スカラー入力、関連付けられていないパラメーター

この例では、Sum ブロックへの Constant1 ブロック入力は非スカラーであり、Constant2 ブロック入力はスカラーです。Sum ブロックには、関連付けられたパラメーターがありません。Simulink は、非スカラーの Constant1 ブロック入力の次元と一致するように Constant2 のスカラー入力を拡張します。入力は拡張されてベクトル [3 3 3] になります。

コンパイルされた端子の次元の取得

端子信号の次元を取得するには、[ステップを進める] ボタンを使用してシミュレーションを一時停止します。ブロックを選択し、PortHandles パラメーターを使用します。その後、GetCompiledPortDimensions パラメーターを使用します。たとえば、このモデルでステップを進めて Constant ブロックを選択すると次のようになります。

ph = get_param(gcb,'PortHandles');
dim = get_param(ph.Outport,'CompiledPortDimensions')
dim =

     2     2     3

非バス端子の場合、結果は最初の要素が次元数 (この例では 2) で次の 2 つの要素 (次元数に対応) が次元の値である配列になります。

バス信号の場合は、結果に追加の要素がいくつか含まれます。バスを含むモデルでステップを進め、サブバスを含む Bus Creator ブロックを選択するとします。

ph = get_param(gcb,'PortHandles');
dim = get_param(ph.Outport,'CompiledPortDimensions')
dim = -2 4 1 2 1 1 3 4 5 6 5 2 3 4 5 6 

最初の要素は -2 で、これは信号がバスであることを示します。2 番目の要素はリーフ ノードの数です。その後の要素のパターンは非バス信号の場合と同じです。この例では、3 番目の要素がバス内の最初の信号の次元数 (この例では 1) を表し、次の数値がその次元の値 (2) となります。

関連するトピック