Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Product、Matrix Multiply

スカラー、非スカラーの乗算と除算、あるいは行列の乗算と逆行列

  • Product block

ライブラリ:
Simulink / Commonly Used Blocks
Simulink / Math Operations
Simulink / Matrix Operations
HDL Coder / Commonly Used Blocks
HDL Coder / HDL Floating Point Operations
HDL Coder / Math Operations

説明

Product ブロックは 2 つの入力を乗算した結果を出力します。入力は、2 つのスカラー、スカラーと非スカラー、あるいは同じ次元をもつ 2 つの非スカラーの場合があります。この動作を指定する既定のパラメーター値は以下のようになります。

  • 乗算: 要素単位(.*)

  • 入力数: 2

次の表は、既定のブロック パラメーター値を使用した場合のProduct ブロックによる次元が異なる入力の乗算Product ブロックの出力を示しています。

入力と動作

スカラー X スカラー

2 つの入力の積を出力します。

スカラー X 非スカラー

入力の非スカラーと同じ次元をもつ非スカラーを出力します。出力の非スカラーの各要素は、入力のスカラーと入力の非スカラーの対応する要素の積です。

非スカラー X 非スカラー

入力と同じ次元をもつ非スカラーを出力します。出力の各要素は、入力の対応する要素の積です。

Divide ブロックと Product of Elements ブロックは Product ブロックのバリアントです。

  • Divide ブロックの詳細については、Divide を参照してください。

  • Product of Elements ブロックの詳細については、Product of Elements を参照してください。

Product ブロック (または適切に構成される場合 Divide ブロックまたは Product of Elements ブロック) では、以下を行うことができます。

  • スカラー、ベクトル、または行列入力の数を、数値的に乗算や除算します。

  • 行列入力の数に行列の乗算や除算を実行します。

Product ブロックは、[乗算] パラメーターの値に基づいてスカラーまたは行列の乗算を行います。このブロックは、[入力数] パラメーターに基づいて 1 つ以上の入力を受け入れます。[入力数] パラメーターは、各入力に実行される演算も指定します。

Product ブロックは、実行する演算が数学的に定義される結果をもつ場合、スカラー、ベクトルおよび行列の任意の組み合わせを入力できます。このブロックは、指定した演算を入力に対して実行し、結果を出力します。

Product ブロックには 2 つのモードがあります。要素単位モードは、2 つの非スカラー入力を要素ごとに処理します。行列モードは、2 つの非スカラー入力を行列として処理します。

要素単位モード

[乗算][要素単位(.*)] に設定する場合、Product ブロックは "要素単位モード" になります。この場合、ブロックは任意の非スカラー入力の個々の数値要素に演算を行います。MATLAB® の等価な演算子は .* です。要素単位モードでは、Product ブロックは、乗算、除算および算術的な逆演算などを実行できます。

[入力数] パラメーターの値は、どれだけの入力数があるか、それぞれが出力を生成するために乗算されるか除算されるかを決めます。要素単位モードの Product ブロックが 1 つの入力のみをもつ場合は、Product of Elements ブロックと機能的に等価です。ブロックが複数の入力をもつ場合、非スカラーの入力は同じ次元をもたなければなりません。ブロックは、これらと同じ次元をもつ非スカラーを出力します。ブロックは、出力を計算するためにスカラー入力を、非スカラー入力と同じ次元をもつ非スカラーにはじめに拡張します。

次の表は、[入力数] パラメーターの値を使用した場合のProduct ブロックによる次元が異なる入力の乗算Product ブロックの出力を示しています。

パラメーター値

入力数: 2

入力数: */

入力数: /**/

入力数: **

入力数: */*

行列モード

[乗算] パラメーターの値が [行列 (*)] である場合、Product ブロックは "行列モード" になります。この場合、ブロックは非スカラー入力を行列として処理します。MATLAB の等価な演算子は * です。行列モードでは、Product ブロックで正方行列の逆行列を計算することも、結果が数学的に定義される次元をもつ、任意の数の行列の乗算や除算を行うこともできます。

[入力数] パラメーターの値は、どれだけの入力数があるか、それぞれの入力行列が出力を生成するために乗算されるか除算されるかを決めます。[入力数] の構文は、要素単位モードの場合と同じです。これらのモードでは、乗算と除算のタイプが異なります。

ブロックの入力とモード間の相互作用

Product ブロックの入力とその [乗算] モード間の相互作用は以下のとおりです。

  • 1*、または /

    このブロックは 1 つの入力端子をもっています。要素単位モードでは、ブロックは Product of Elements ブロックで記述されたとおりに入力を処理します。行列モードでは、パラメーター値が 1 または * の場合、ブロックは入力値を出力します。値が / である場合、入力は正方行列 (縮退した場合としてスカラーを含む) でなければなりません。ブロックは逆行列を出力します。詳細については、要素単位モードおよび行列モードを参照してください。

  • 整数値 > 1

    ブロックがもつ入力数は整数値で指定されます。[乗算] パラメーターで指定される要素単位モードまたは行列モードによって、入力は互いに乗算されます。詳細については、要素単位モードおよび行列モードを参照してください。

  • 2 つ以上の */ から成る単純文字列

    ブロックは文字ベクトルの長さで与えられる入力数をもちます。* に相当する各入力は、乗算され、出力されます。/ に対応する各入力は除算され、出力されます。演算は、[乗算] パラメーターで指定されるように、要素単位モードまたは行列モードで行われます。詳細については、要素単位モードおよび行列モードを参照してください。

シミュレーションとコード生成の予想される相違点

複素数の浮動小数点入力に対する要素単位の演算について、近傍オーバーフローの場合は、シミュレーションとコード生成の結果は異なる可能性があります。[コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成][インターフェイス] ペインで [複素数] が選択されていて [非有限数] が選択されていない場合でも、コード ジェネレーターは中程度のオーバーフローに対する特別なケース コードを出力しません。この方法は、極端な値を含まない一般的なケースの組み込み演算の効率を向上させます。入力に極端な値が含まれる可能性がある場合、これらのケースを明示的に管理しなければなりません。

NaN および inf の値が数学的に無意味の場合は、生成コードはシミュレーションとしてこれらの値と同じパターンは生成しない可能性があります。たとえば、シミュレーション出力に NaN が含まれる場合、生成コードからの出力にも NaN が含まれますが、同じ場所に含まれる必要はありません。

端子

入力

すべて展開する

乗算または除算する 1 番目の入力。スカラー、ベクトル、行列または N 次元配列として指定します。

データ型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

乗算または除算する N 番目の入力。スカラー、ベクトル、行列または N 次元配列として指定します。

データ型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

他の入力に乗算する入力信号。

依存関係

1 つ以上の [X] 端子を有効にするには、[入力の数] パラメーターに対して 1 つ以上の * 文字を指定し、[乗算] パラメーターを [要素単位(.*)] に設定します。

データ型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

除算または逆演算の入力信号。

依存関係

1 つ以上の [÷] 端子を有効にするには、[入力の数] パラメーターに対して 1 つ以上の / 文字を指定し、[乗算] パラメーターを [要素単位(.*)] に設定します。

データ型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

他の入力に乗算する入力信号。

依存関係

1 つ以上の [*] 端子を有効にするには、[入力の数] パラメーターに対して 1 つ以上の * 文字を指定し、[乗算] パラメーターを [行列 (*)] に設定します。

データ型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

除算または逆演算の入力信号。

依存関係

1 つ以上の [Inv] 端子を有効にするには、[入力の数] パラメーターに対して 1 つ以上の / 文字を指定し、[乗算] パラメーターを [行列 (*)] に設定します。

データ型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

出力

すべて展開する

入力を乗算、除算、または逆数を求めることで計算される出力。

データ型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

パラメーター

すべて展開する

メイン

ブロックの 2 つのプロパティを制御します。

  • ブロックの入力端子の数

  • 各入力が出力されるときに乗算されるかまたは除算されるか

指定に関する詳細は次の通りです。

  • 1*、または /

    このブロックは 1 つの入力端子をもっています。要素単位モードでは、ブロックは Product of Elements ブロックで記述されたとおりに入力を処理します。行列モードでは、パラメーター値が 1 または * の場合、ブロックは入力値を出力します。値が / である場合、入力は正方行列 (縮退した場合としてスカラーを含む) でなければなりません。ブロックは逆行列を出力します。詳細については、要素単位モードおよび行列モードを参照してください。

  • 整数値 > 1

    ブロックがもつ入力数は整数値で指定されます。[乗算] パラメーターで指定される要素単位モードまたは行列モードによって、入力は互いに乗算されます。詳細については、要素単位モードおよび行列モードを参照してください。

  • 2 つ以上の */ から成る単純文字列

    ブロックは文字ベクトルの長さで与えられる入力数をもちます。* に相当する各入力は、乗算され、出力されます。/ に対応する各入力は除算され、出力されます。演算は、[乗算] パラメーターで指定されるように、要素単位モードまたは行列モードで行われます。詳細については、要素単位モードおよび行列モードを参照してください。

プログラムでの使用

ブロック パラメーター: Inputs
型: 文字ベクトル
値: '2' | '**' | '*/' | '*/*' | ...
既定の設定: '2'

ブロックが [要素単位(.*)] または [行列 (*)] の乗算を実行するかどうかを指定します。

プログラムでの使用

ブロック パラメーター: Multiplication
型: 文字ベクトル
値: 'Element-wise(.*)' | 'Matrix(*)'
既定の設定: 'Element-wise(.*)'

乗算範囲の次元を [すべての次元] または [指定した次元] で指定します。[指定した次元] を選択する場合、[次元]1 または 2 と指定できます。

依存関係

このパラメーターを有効にするには、[入力の数]* に、[乗算][要素単位(.*)] に設定します。

プログラムでの使用

ブロック パラメーター: CollapseMode
型: 文字ベクトル
値: 'All dimensions' | 'Specified dimension'
既定の設定: 'All dimensions'

乗算範囲の次元を入力信号の次元数以下の整数として指定します。

依存関係

このパラメーターを有効にするには、次のように設定します。

  • [入力の数]* に設定

  • [乗算][要素単位(.*)] に設定

  • [乗算範囲][指定した次元] に設定

プログラムでの使用

ブロック パラメーター: CollapseDim
型: 文字ベクトル
値: '1' | '2' | ...
既定の設定: '1'

サンプルの時間間隔を指定します。サンプル時間を継承するには、このパラメーターを -1 に設定します。詳細については、サンプル時間の指定を参照してください。

依存関係

このパラメーターは、-1 以外の値に設定した場合にのみ表示されます。詳細は、サンプル時間が推奨されないブロックを参照してください。

プログラムでの使用

ブロック パラメーター: SampleTime
型: string スカラーまたは文字ベクトル
既定の設定: "-1"

信号属性

すべての入力信号が同じデータ型をもたなければならないかどうかを指定します。このパラメーターを有効にすると、入力信号のデータ型が異なる場合はシミュレーション中にエラーが発生します。

プログラムでの使用

ブロック パラメーター: InputSameDT
型: 文字ベクトル
値: 'off' | 'on'
既定の設定: 'off'

Simulink® がチェックする出力範囲の下限値。

Simulink は、最小値を使って以下を行います。

メモ

[出力の最小値] により、実際の出力信号が飽和する (またはクリップされる) ことはありません。代わりに、Saturation ブロックを使用してください。

プログラムでの使用

ブロック パラメーター: OutMin
: 文字ベクトル
: '[ ]'| スカラー
既定の設定: '[ ]'

Simulink がチェックする出力範囲の上限値。

Simulink は、最大値を使って以下を行います。

メモ

[出力の最大値] により、実際の出力信号が飽和する (またはクリップされる) ことはありません。代わりに、Saturation ブロックを使用してください。

プログラムでの使用

ブロック パラメーター: OutMax
: 文字ベクトル
: '[ ]'| スカラー
既定の設定: '[ ]'

出力のデータ型を選択します。型は継承されるか、直接指定されるか、Simulink.NumericType などのデータ型オブジェクトとして表現されます。詳細については、信号のデータ型の制御を参照してください。

継承オプションを選択すると、ブロックは次のように動作します。

  • 継承: 内部ルールによる継承 — Simulink は、組み込みターゲット ハードウェアのプロパティを考慮しつつ、数値の精度、パフォーマンス、および生成コードのサイズのバランスが取れるように、データ型を選択します。組み込みターゲット ハードウェアの設定を変更すると、内部ルールにより選択されるデータ型が変更される可能性があります。たとえば、ブロックが int8 型の入力に int16 のゲインを乗算し、ターゲット ハードウェア タイプとして [ASIC/FPGA] が指定されている場合、出力データ型は sfix24 です。ターゲット ハードウェアとして [Unspecified (assume 32-bit Generic)] (汎用 32 ビット マイクロプロセッサ) が指定された場合、出力データ型は int32 です。ターゲット マイクロプロセッサによって指定される語長では出力範囲に対応できない場合、Simulink は診断ビューアーにエラーを表示します。

  • 継承: MSB を保持– Simulink は、演算の全範囲を維持するデータ型を選択した後、組み込みターゲット ハードウェアに適したサイズに出力精度を低下させます。

    ヒント

    生成コードの効率を向上させるには、[整数オーバーフローで飽和] パラメーターをオフにします。

    このルールでは、オーバーフローは決して発生しません。

  • 継承: スケーリングの一致 – Simulink は、スケーリングが入力型のスケーリングと一致するデータ型を選択します。型の全範囲が組み込みターゲット ハードウェアに適合しない場合は、その範囲を小さくして組み込みターゲット ハードウェアに適切な型が生成されます。このルールでは、オーバーフローが発生することがあります。このルールは、複素信号の間の乗算はサポートしません。

    [継承: MSB を保持] および [継承: スケーリングの一致] ルールは、複素信号および非ゼロ バイアス間の信号の間の乗算はサポートしません。ルールがサポートするのは、2 つの入力の乗算と除算 ('**''*/''/*')、2 つの入力の行列乗算およびベクトルの 2 つの要素の積の変換のみです。

    コードの効率と数値の精度が、ソフトウェアにより同時に最適化されるとは限りません。内部ルールが、数値精度またはパフォーマンスに対する要求を満たさない場合は、以下のいずれかを行ってください。

    • 出力データ型を明示的に指定する。

    • 単に 継承: 入力と同じ を選択します。

    • fixdt(1,32,16) のように既定のデータ型を明示的に指定し、固定小数点ツールを使用してモデルにデータ型を推奨する。詳細については、fxptdlg (Fixed-Point Designer) を参照してください。

    • 独自の継承ルールを指定するには、[継承: 逆伝播による継承] を使用し、Data Type Propagation ブロックを使用します。このブロックの使い方の例については、Signal Attributes ライブラリの Data Type Propagation Examples ブロックを参照してください。

  • 継承: 逆伝播による継承 — 駆動ブロックのデータ型を使用します。

  • 継承: 1 番目の入力と同じ — 1 番目の入力信号のデータ型を使用します。

依存関係

入力が単精度より小さい浮動小数点データ型の場合、[継承: 内部ルールによる継承] 出力データ型は単精度より小さい浮動小数点の出力型を継承するコンフィギュレーション パラメーターの設定によって変わります。データ型の符合化に必要なビット数が単精度データ型の符合化に必要な 32 ビットより少ない場合、データ型は単精度より小さくなります。たとえば、halfint16 は単精度より小さくなります。

プログラムでの使用

ブロック パラメーター: OutDataTypeStr
: 文字ベクトル
: 'Inherit: Inherit via internal rule | 'Inherit: Keep MSB'| 'Inherit: Match scaling'| 'Inherit: Same as first input' | 'Inherit: Inherit via back propagation' | 'double' | 'single' | 'half' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'uint64'|'int64'|'fixdt(1,16)' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)' | '<data type expression>'
既定の設定: 'Inherit: Inherit via internal rule'

固定小数点ツールが、ブロックに指定した [出力] データ型をオーバーライドしないようにするには、このパラメーターを選択します。詳細については、[出力データ型の設定をロックする] の使用 (Fixed-Point Designer)を参照してください。

プログラムでの使用

ブロック パラメーター: LockScale
型: 文字ベクトル
値: 'off' | 'on'
既定の設定: 'off'

固定小数点演算の丸めモードを選択します。以下を選択できます。

正方向

正の無限大方向に正負の値を丸めます。MATLAB 関数 ceil と等価です。

最も近い偶数方向

最も近い表現可能な値に数値を丸めます。同順位が発生した場合は、最も近い偶数の整数に丸めます。Fixed-Point Designer™ 関数 convergent と等価です。

負方向

負の無限大方向に正負の値を丸めます。MATLAB 関数 floor と等価です。

最も近い正の整数方向

最も近い表現可能な値に数値を丸めます。同順位が発生した場合は、正の無限大方向に丸めます。Fixed-Point Designer 関数 nearest と等価です。

最も近い整数方向

最も近い表現可能な値に数値を丸めます。同順位が発生した場合は、正の数値を正の無限大方向、負の数値を負の無限大方向に丸めます。Fixed-Point Designer 関数 round と等価です。

最も簡潔

負方向の丸めとゼロ方向の丸めのいずれかを選択し、できるだけ効率の高い丸めコードを生成します。

ゼロ方向

ゼロ方向に数値を丸めます。MATLAB 関数 fix と等価です。

詳細については、丸め (Fixed-Point Designer)を参照してください。

ブロック パラメーターは常に最近傍の表現可能な値に丸められます。ブロックパラメーターの丸めを直接制御するには、MATLAB の丸め関数を使用する式をマスク フィールドに入力します。

プログラムでの使用

ブロック パラメーター: RndMeth
型: 文字ベクトル
値: 'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero'
既定の設定: 'Floor'

オーバーフローで飽和するかラップするかを指定します。

動作根拠オーバーフローの影響

このチェック ボックスをオンにする (on)。

モデルでオーバーフローが発生する可能性があるので、生成コードに飽和保護を明示的に組み込むことをお勧めします。

オーバーフローは、データ型が表現できる最小値または最大値のいずれかに飽和します。

int8 (符号付き、8 ビット整数) データ型が表すことができる最大値は 127 です。この最大値を超えるブロックの演算結果により 8 ビット整数のオーバーフローが発生します。チェック ボックスがオンになっていると、ブロック出力は 127 で飽和します。同様に、ブロック出力は最小出力値である -128 で飽和します。

このチェック ボックスをオンにしない (off)。

生成コードの効率を最適化することをお勧めします。

ブロックが範囲外の信号を処理する方法を指定しすぎないようにすることをお勧めします。詳細については、信号範囲のエラーのトラブルシューティングを参照してください。

オーバーフローは、データ型によって表現される適切な値にラップされます。

int8 (符号付き、8 ビット整数) データ型が表すことができる最大値は 127 です。この最大値を超えるブロックの演算結果により 8 ビット整数のオーバーフローが発生します。チェック ボックスをオフにすると、オーバーフローを引き起こした値は int8 として解釈され、意図しない結果が引き起こされる可能性があります。たとえば、int8 として表されるブロック結果 130 (バイナリで 1000 0010) は -126 です。

このチェック ボックスをオンにすると、飽和は出力や結果だけでなく、このブロックの内部演算すべてに適用されます。通常、オーバーフローが可能ではない場合は、コード生成プロセスで検出されます。この場合、コード ジェネレーターでは飽和コードは生成されません。

プログラムでの使用

ブロック パラメーター: SaturateOnIntegerOverflow
型: 文字ベクトル
値: 'off' | 'on'
既定の設定: 'off'

指定するデータのカテゴリを選択します。

  • 継承 — データ型の規則の継承。Inherit を選択すると、右側から 2 番目のメニュー/テキスト ボックスが有効になり、そこで継承モードを選択できます。

  • 組み込み — 組み込みデータ型を指定します。Built in を選択すると、右側から 2 番目のメニュー/テキスト ボックスが有効になり、そこで組み込みデータ型を選択できます。

  • 固定小数点 — 固定小数点データ型。[固定小数点] を選択すると、固定小数点データ型を指定するために使用できる追加のパラメーターが有効になります。

  • — 評価結果がデータ型となる式。[] を選択すると、右側から 2 番目のメニュー/テキスト ボックスが有効になります。そこに式を入力することができます。

詳細については、データ型アシスタントを利用したデータ型の指定を参照してください。

依存関係

このパラメーターを有効にするには、[データ型アシスタントを表示] ボタンをクリックします。

この信号のデータ型オーバーライド モードを選択します。

  • [継承] を選択すると、Simulink はコンテキストからデータ型オーバーライド設定を継承します。コンテキストとはブロックのことで、信号を使用している Simulink の Simulink.Signal オブジェクトまたは Stateflow® チャートです。

  • [オフ] を選択すると、Simulink はコンテキストのデータ型オーバーライド設定を無視し、信号に対して指定された固定小数点データ型を使用します。

詳細については、Simulink ドキュメンテーションのデータ型アシスタントを利用したデータ型の指定を参照してください。

依存関係

このパラメーターを有効にするには、[モード][組み込み] または [固定小数点] に設定します。

ヒント

個々のデータ型に対してデータ型オーバーライドをオフにする機能により、データ型オーバーライドを適用する際に、モデル内のデータ型をさらに効果的に制御できます。たとえば、このオプションを使用すると、データ型オーバーライド設定にかかわらず、データ型が下流ブロックの要件を満たすことを確認できます。

固定小数点データが符号付きであるか符号なしであるかを指定します。符号付きデータでは正の値と負の値を表現できますが、符号なしデータでは正の値のみを表現できます。

  • [符号付き]。符号付き固定小数点データを指定します。

  • [符号なし]。符号なし固定小数点データを指定します。

詳細については、データ型アシスタントを利用したデータ型の指定を参照してください。

依存関係

このパラメーターを有効にするには、[モード] を [Fixed point] に設定します。

量子化された整数をもつ語のビット サイズを指定します。詳細については、固定小数点データ型の指定を参照してください。

依存関係

このパラメーターを有効にするには、[モード][固定小数点] に設定します。

固定小数点データ型の小数部の長さを正または負の整数として指定します。詳細については、固定小数点データ型の指定を参照してください。

依存関係

このパラメーターを有効にするには、[スケーリング][2 進小数点] に設定します。

オーバーフローを避け、量子化誤差を最小限に抑えるための固定小数点データのスケーリング方法を指定します。詳細については、固定小数点データ型の指定を参照してください。

依存関係

このパラメーターを有効にするには、[モード][固定小数点] に設定します。

固定小数点データ型の勾配を指定します。詳細については、固定小数点データ型の指定を参照してください。

依存関係

このパラメーターを有効にするには、[スケーリング][勾配とバイアス] に設定します。

固定小数点データ型のバイアスを任意の実数として指定します。詳細については、固定小数点データ型の指定を参照してください。

依存関係

このパラメーターを有効にするには、[スケーリング][勾配とバイアス] に設定します。

ブロックの特性

データ型

Boolean | double | fixed point | half | integer | single

直達

はい

多次元信号

はい

可変サイズの信号

はい

ゼロクロッシング検出

いいえ

拡張機能

C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。

PLC コード生成
Simulink® PLC Coder™ を使用して構造化テキスト コードを生成します。

固定小数点の変換
Fixed-Point Designer™ を使用して固定小数点システムの設計とシミュレーションを行います。

バージョン履歴

R2006a より前に導入