基本的な行列演算
この例では、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
MATLAB はこの他の種類のグラフも軸ラベル付きで表示することができます。
bar(b) xlabel('Sample #') ylabel('Pounds')
MATLAB は記号によるプロットも行うことができます。これは、データ点のマークにアスタリスク (*) を使っている例です。MATLAB では、この他にもさまざまな記号、ライン タイプでプロットすることができます。
plot(b,'*')
axis([0 10 0 10])
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
の特性多項式は、以下の式で表されます。
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);
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 は、複素数も計算で簡単に扱うことができます。