Main Content

配列と行列の演算

はじめに

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 における配列の算術演算子をまとめています。関数固有の情報については、右端の列のリンクをクリックして関数のリファレンス ページを参照してください。

演算子

目的

説明

リファレンス ページ

+

加算

A+BAB を足します。

plus

+

単項プラス

+AA を返します。

uplus

-

減算

A-BA から B を引きます。

minus

-

単項マイナス

-AA の要素の符号を反転します。

uminus

.*

要素単位の乗算

A.*BAB の要素単位の積を求めます。

times

.^

要素単位のべき乗

A.^B は要素が A(i,j)B(i,j) 乗である行列を求めます。

power
./

右配列の除算

A./B は要素が A(i,j)/B(i,j) の行列を求めます。

rdivide

.\

左配列の除算

A.\B は要素が B(i,j)/A(i,j) の行列を求めます。

ldivide

.'

配列転置

A.'A の配列転置です。複素数行列の場合、これは複素共役転置を含みません。

transpose

行列演算

行列演算は、線形代数の規則に従って行われ、多次元配列には対応していません。項目相互の入力に必要なサイズと形状は演算によって異なります。非スカラー入力の場合、一般的に、行列演算の解は配列演算のものとは異なります。

たとえば、行列の右除算演算子 / を使用して 2 つの行列の商を求める場合、これらの行列の列数が同じでなければなりません。しかし、行列乗算演算子 * を使用して 2 つの行列の積を求める場合は、これらの行列の "内部次元" が一致していなければなりません。つまり、1 番目の入力の列数が 2 番目の入力の行数と等しくなければならないということです。行列乗算演算子では、以下の公式に従って 2 つの行列の積が求められます。

C(i,j)=k=1nA(i,k)B(k,j).

このことを確認するため、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 における行列の算術演算をまとめています。関数固有の情報については、右端の列のリンクをクリックして関数のリファレンス ページを参照してください。

演算子

目的

説明

リファレンス ページ

*

行列乗算

C = A*B は、行列 AB の線形代数の積です。A の列数は B の行数と等しくなければなりません。

mtimes

\

行列の左除算

x = A\B は、式 Ax = B の解です。行列 AB の行数は同じでなければなりません。

mldivide

/

行列の右除算

x = B/A は、式 xA = B の解です。行列 AB の列数は同じでなければなりません。左除算演算子で表すと B/A = (A'\B')' となります。

mrdivide

^

行列のべき乗

B がスカラーの場合、A^BAB 乗です。B がそれ以外の値の場合は、固有値および固有ベクトルを含む計算となります。

mpower

'

複素共役転置

A'A 線形代数的転置です。複素数行列の場合、これは複素共役転置となります。

ctranspose

関連するトピック