Main Content

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

基本的な行列演算

この例では、MATLAB® 言語で行列を操作するための基本的な手法と関数を示します。

最初に 9 つの要素をもつ単純なベクトル a を作成しましょう。

a = [1 2 3 4 6 4 3 4 5]
a = 1×9

     1     2     3     4     6     4     3     4     5

ベクトル a の各要素に 2 を加え、結果を新しいベクトルに格納します。

MATLAB では、ベクトルや行列演算の特別な操作は必要ありません。

b = a + 2
b = 1×9

     3     4     5     6     8     6     5     6     7

MATLAB でグラフを作成する場合、1 つのコマンドで簡単に行えます。ベクトル加算の結果をグリッド ライン付きでプロットしてみましょう。

plot(b)
grid on

Figure contains an axes object. The axes object contains an object of type line.

MATLAB はこの他の種類のグラフも軸ラベル付きで表示することができます。

bar(b)
xlabel('Sample #')
ylabel('Pounds')

Figure contains an axes object. The axes object with xlabel Sample #, ylabel Pounds contains an object of type bar.

MATLAB は記号によるプロットも行うことができます。これは、データ点のマークにアスタリスク (*) を使っている例です。MATLAB では、この他にもさまざまな記号、ライン タイプでプロットすることができます。

plot(b,'*')
axis([0 10 0 10])

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

MATLAB は、行列演算の分野が特に優れています。

行列の行の区切りにセミコロン (;) を使って、ベクトルと同じように簡単に行列を作成します。

A = [1 2 0; 2 5 -1; 4 10 -1]
A = 3×3

     1     2     0
     2     5    -1
     4    10    -1

行列 A の転置も簡単に求めることができます。

B = A'
B = 3×3

     1     2     4
     2     5    10
     0    -1    -1

2 つの行列の乗算を行います。

MATLAB は、行列を数値の集合として扱うように制限しません。MATLAB は行列を扱っていることを認識した上で、それに応じて計算を調整します。

C = A * B
C = 3×3

     5    12    24
    12    30    59
    24    59   117

今度は行列の乗算ではなく、.* 演算子を使って 2 つの行列や、ベクトルの要素ごとの乗算を行います。

C = A .* B
C = 3×3

     1     4     0
     4    25   -10
     0   -10     1

行列 A を使用して方程式 A*x = b を解きましょう。\ (バックスラッシュ) 演算子を使って行います。

b = [1;3;5]
b = 3×1

     1
     3
     5

x = A\b
x = 3×1

     1
     0
    -1

これで、A*x が b に等しいことが示されます。

r = A*x - b
r = 3×1

     0
     0
     0

MATLAB には、多くの一般的な行列演算を行うための関数が提供されています。

固有値を得る関数もあります ...

eig(A)
ans = 3×1

    3.7321
    0.2679
    1.0000

... 同様に、特異値も得られます。

svd(A)
ans = 3×1

   12.3171
    0.5149
    0.1577

関数 "poly" は、特性多項式の係数を含むベクトルを生成します。

行列 A の特性多項式は、以下の式で表されます。

det(λI-A)

p = round(poly(A))
p = 1×4

     1    -5     5    -1

関数 roots を使用すると、多項式の根を簡単に求めることができます。

これらはまさに、元の行列の固有値です。

roots(p)
ans = 3×1

    3.7321
    1.0000
    0.2679

MATLAB は単なる行列演算を超えて、いろいろな応用があります。

2 つのベクトルの畳み込みを行うには ...

q = conv(p,p)
q = 1×7

     1   -10    35   -52    35   -10     1

... または、もう一度畳み込みを行い、結果をプロットします。

r = conv(p,q)
r = 1×10

     1   -15    90  -278   480  -480   278   -90    15    -1

plot(r);

Figure contains an axes object. The axes object contains an object of type line.

who または whos コマンドを使うと、いつでもメモリ内に格納されている変数のリストが得られます。

whos
  Name      Size            Bytes  Class     Attributes

  A         3x3                72  double              
  B         3x3                72  double              
  C         3x3                72  double              
  a         1x9                72  double              
  ans       3x1                24  double              
  b         3x1                24  double              
  p         1x4                32  double              
  q         1x7                56  double              
  r         1x10               80  double              
  x         3x1                24  double              

特定の変数の値を取得する場合は、変数名を入力します。

A
A = 3×3

     1     2     0
     2     5    -1
     4    10    -1

ステートメントをコンマまたはセミコロンで区切ると、1 行に複数のステートメントを記述することができます。

演算の結果を格納する変数を割り当てなかった場合、結果は ans という一時変数に格納されます。

sqrt(-1)
ans = 0.0000 + 1.0000i

このように、MATLAB は、複素数も計算で簡単に扱うことができます。

関連するトピック