配列と行列の演算
はじめに
MATLAB® には、2 種類の算術演算が用意されています。配列演算と行列演算です。これらの算術演算は、数値計算、たとえば 2 つの数の加算、指定べき数までの配列要素の累乗、または 2 つの行列の乗算に使用できます。
行列演算は線形代数の規則に従って行われます。一方、配列演算は要素単位で行われ、多次元配列に対応しています。配列演算と行列演算は、ピリオド文字 (.
) で区別します。ただし、加算と減算の場合の行列演算と配列演算は同じなので、.+
と .-
の文字のペアは不要です。
配列演算
配列演算は要素単位で行われ、ベクトル、行列および多次元配列の対応する要素を計算します。オペランドのサイズが同じ場合、1 番目のオペランドの各要素は、2 番目のオペランドの同じ位置にある要素と対応付けられます。オペランドのサイズに互換性がある場合は、他方のサイズに合わせて各入力が必要に応じて暗黙的に拡張されます。
単純な例として、同じサイズの 2 つのベクトルを加算するとします。
A = [1 1 1]
A = 1 1 1
B = [1 2 3]
B = 1 2 3
A+B
ans = 2 3 4
一方のオペランドがスカラーで他方がスカラーでない場合、MATLAB は他方のオペランドと同じサイズになるように、スカラーを暗黙的に拡張します。たとえば、スカラーと行列の要素単位の積を計算できます。
A = [1 2 3; 1 2 3]
A = 1 2 3 1 2 3
3.*A
ans = 3 6 9 3 6 9
暗黙的な拡張は、3 行 3 列の行列から 1 行 3 列のベクトルを減算する場合も機能します。この 2 つのサイズには互換性があるからです。減算を実行すると、ベクトルは 3 行 3 列の行列になるように暗黙的に拡張されます。
A = [1 1 1; 2 2 2; 3 3 3]
A = 1 1 1 2 2 2 3 3 3
m = [2 4 6]
m = 2 4 6
A - m
ans = -1 -3 -5 0 -2 -4 1 -1 -3
行ベクトルと列ベクトルのサイズには互換性があります。1 行 3 列のベクトルを 2 行 1 列のベクトルに加算する場合、MATLAB が要素単位の加算を実行する前に、各ベクトルが 2 行 3 列の行列に暗黙的に拡張されます。
x = [1 2 3]
x = 1 2 3
y = [10; 15]
y = 10 15
x + y
ans = 11 12 13 16 17 18
2 つのオペランドのサイズに互換性がない場合は、エラーとなります。
A = [8 1 6; 3 5 7; 4 9 2]
A = 8 1 6 3 5 7 4 9 2
m = [2 4]
m = 2 4
A - m
Matrix dimensions must agree.
詳細については、基本的な演算で互換性のある配列サイズを参照してください。
次の表は、MATLAB における配列の算術演算子をまとめています。関数固有の情報については、右端の列のリンクをクリックして関数のリファレンス ページを参照してください。
演算子 | 目的 | 説明 | リファレンス ページ |
---|---|---|---|
| 加算 |
| plus |
| 単項プラス |
| uplus |
| 減算 |
| minus |
| 単項マイナス |
| uminus |
| 要素単位の乗算 |
| times |
| 要素単位のべき乗 |
| power |
./ | 右配列の除算 |
| rdivide |
| 左配列の除算 |
| ldivide |
| 配列転置 |
| transpose |
行列演算
行列演算は、線形代数の規則に従って行われ、多次元配列には対応していません。項目相互の入力に必要なサイズと形状は演算によって異なります。非スカラー入力の場合、一般的に、行列演算の解は配列演算のものとは異なります。
たとえば、行列の右除算演算子 /
を使用して 2 つの行列の商を求める場合、これらの行列の列数が同じでなければなりません。しかし、行列乗算演算子 *
を使用して 2 つの行列の積を求める場合は、これらの行列の "内部次元" が一致していなければなりません。つまり、1 番目の入力の列数が 2 番目の入力の行数と等しくなければならないということです。行列乗算演算子では、以下の公式に従って 2 つの行列の積が求められます。
このことを確認するため、2 つの行列の積を計算してみましょう。
A = [1 3;2 4]
A = 1 3 2 4
B = [3 0;1 5]
B = 3 0 1 5
A*B
ans = 6 15 10 20
上記の行列の積は以下の要素単位の積とは異なるものになります。
A.*B
ans = 3 0 2 20
次の表に、MATLAB における行列の算術演算をまとめています。関数固有の情報については、右端の列のリンクをクリックして関数のリファレンス ページを参照してください。
演算子 | 目的 | 説明 | リファレンス ページ |
---|---|---|---|
| 行列乗算 |
| mtimes |
| 行列の左除算 |
| mldivide |
| 行列の右除算 |
| mrdivide |
| 行列のべき乗 |
| mpower |
| 複素共役転置 |
| ctranspose |