コンピュータ数学 MATLABの使い方(行列とベクトルの計算)

2013.07.25
コンピュータ数学 MATLAB の使い方(行列とベクトルの計算)
基本的な演算命令
1
演算子
1.1
MATLAB では表 1 にある演算子を用いて,四則演算とべき乗を計算でき
ます.
表 1 MATLAB の演算子.
>> a = 1.4;
演算
演算子
>> b = 3.5;
加算
+
>> a + b
減算
-
ans =
乗算
*
除算
/
べき乗
^
4.9000
>> a - b
ans = -2.1000
>> a * b
ans =
4.9000
>> a / b
ans =
0.4000
>> a^2
ans =
1.2
1.9600
ベクトル・行列の定義と演算
ベクトルと行列の定義
1.2.1
MATLAB ではベクトルと行列を簡単に定義することができます.例えば 3 次元ベクトル x として
 
1
x= 2 
3
を MATLAB で定義するには,
>> x = [1; 2; 3]
x =
1
2
3
と入力します.x の成分 1, 2 の後にセミコロン ; が入っていますが,これは改行を表しています.セミコロ
ンをつけないで入力すると,
>> x = [1 2 3]
x =
1
2
3
1
となり,x は 3 次元行ベクトルとして定義されます.
行列も同じように定義できます.例えば,3 行 3 列の行列

1
A= 4
7
2
5
8

3
6 
9
を MATLAB で定義するには,
>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1
2
3
4
5
6
7
8
9
と入力します.この行列は 1 行あたり 3 つの要素があるので,3 つの要素ごとにセミコロンをつけて改行し
ます.
行列とベクトルの要素の参照方法
1.2.2
MATLAB では,行列やベクトルの特定の要素を参照することができます.例えば上記の行列 A の 3 行 1
列目を参照したい場合は
>> A(3,1)
ans = 7
と入力すると,7 という要素が書き出されます.ベクトルの場合も同様に,
>> x(2)
ans = 2
で参照が可能です.x(2,1) としても同様の結果が得られます.
行列・ベクトルに関する演算
1.2.3
◦ 行列・ベクトルの加算と減算
行列とベクトルにおける加算と減算を行うには,2 つの行列・ベクトルの行数と列数は等しくなければいけ
ません.
>> A = [1 2 3;4 5 6;7 8 9];
>> A = [1 2 3;4 5 6;7 8 9];
>> x = [1; 4; 6];
>> B = [1 3 5;7 9 2;4 6 8];
>> B = [1 3 5;7 9 2;4 6 8];
>> y = [1; 3; 5];
>> A + B
>> A - B
>> x + y
ans =
ans =
ans =
2
5
8
0
-1
-2
2
11
14
8
-3
-4
4
7
11
14
17
3
2
1
11
図1
行列の加算.
図2
行列の減算.
2
図3
ベクトルの加算.
◦ 行列とベクトルに関する乗算
行列の乗算 A * B の計算では,行列 A の列数と行列 B の行数が等しくないといけません.A または B がベ
クトルの場合も同様です.下記の一番右の例では,A の列数と B の行数が等しくないため,エラーメッセージ
が表示されています.
>> A = [1 2 3;4 5 6;7 8 9]; >> A = [1 4 6; 2 7 9];
>> A = [1 2; 4 5; 7 8];
>> x = [3; 7; 5];
>> B = [1 3;5 6;7 8];
>> B = [1 3 5;7 9 2;4 6 8];
>> A * x
>> A * B
>> A * B
ans =
ans =
Error using
32
63
75
77
100
120
*
Inner matrix dimensions must agree.
122
図4
行列とベクトルの乗算.
図5
行列の乗算.
図6
行列の乗算が定義されない例.
◦ 行列のべき乗
行列でもスカラーと同じように,演算子^ を用いて行列のべき乗を計算することができます.但し,行列の
べき乗は行数と列数が等しい正方行列の場合に限ります.
>> A = [2 3 -1; 4 7 8;-5 9 6] >> A = [2 3 -1; 4 7 8;-5 9 6] >> A = [2 3 -1; 4 7 8;-5 9 6]
A =
>> A^2
>> A^3
ans =
ans =
2
3
-1
21
18
16
34
333
219
4
7
8
-4
133
100
24
1819
1668
-5
9
6
-4
102
113
-165
1719
1498
図7
行列 A.
図8
行列 A の 2 乗.
図9
行列 A の 3 乗.
◦ 行列の転置
行列を転置させたい場合は,変数の後に ’ をつけます.
>> A = [1 2 3; 4 5 6]
>> x = [1; 2; 3];
A =
>> y = [2; 5; 9];
1
2
3
4
5
6
>> x’ * y
ans =
>> A’
39
ans =
1
4
2
5
3
6
図 10 行列 A とその転置.
図 11 ベクトル x の転置とベクトル y の積(内積の計算).
3
数学で用いられる定数と関数
2
MATLAB では円周率 π は,pi という変数にあらかじめ登録されています.ですので,円周率を自分
で手入力する必要はありません.(もし円周率が登録されていない環境で円周率が必要になった場合は,
π = 4 arctan 1 という式を使って計算すると楽です.覚えておきましょう.)
数学で用いられる代表的な MATLAB の組み込み関数を表 2 に示します.Mathematica と異なり,
MATLAB の組み込み関数は 関数名は全て小文字で,カッコは (
) です.もしエラーが出た場合は,カッ
コを確認してみましょう.
表 2 MATLAB の組み込み関数.
関数
MATLAB の組み込み関数
sin x
sin(x)
cos x
cos(x)
tan x
tan(x)
log x
log(x)
log10 x
log10(x)
x
exp(x)
e
√
x
sqrt(x)
arcsin x
asin(x)
arccos x
acos(x)
arctan x
atan(x)
|x| (x の絶対値)
abs(x)
行列に関する命令
3
3.1
値の代入などを行う命令
行列に値を代入する命令として,以下の命令が用意されています.
• zeros:全ての要素の値が 0 の行列を設定する命令
m = 2; n = 3;
A =
A = zeros(m,n)
=⇒
0
0
0
0
0
0
• ones:全ての要素の値が 1 の行列を設定する命令
m = 3; n = 2;
A =
A = ones(m,n)
=⇒
1
1
1
1
1
1
• eye:対角要素が 1,その他の要素が 0 の行列を設定する命令(正方行列でなくてもよい)
m = 3; n = 2;
A =
A = eye(m,n)
=⇒
1
0
0
1
0
0
4
• rand:行列要素を乱数で設定する命令
m = 2; n = 3;
A =
A = rand(m,n)
=⇒
0.7968
0.1588
0.8478
0.1138
0.3558
0.5828
• diag:対角要素だけを取り出す命令
m = 2; n = 3;
ans =
A = rand(m,n);
=⇒
diag(A)
3.2
0.7968
0.3558
行列に関する演算を行う命令
MATLAB には,行列の行列式,階数を計算したり,連立一次方程式を解く命令などが用意されています.
• det:行列の行列式を求める命令(正方行列でなくてはいけません)
m = 3; n = 3;
ans =
A = rand(m,n);
=⇒
det(A)
-0.0994
• rank:行列の階数を求める命令
m = 50; n = 100;
ans =
A = rand(m,n);
=⇒
rank(A)
50
• \(バックスラッシュ):連立一次方程式を解く命令
m = 3; n = 3;
x =
A = rand(m,n);
=⇒
-10.1395
b = rand(m,1);
x = A\b
norm(b-A*x)
3.7206
-0.3592
ans =
7.3277e-16
連立一次方程式 Ax = b を解いて x を求め,∥b − Ax∥2 を計算しています.誤差の影響でこの値は完
全に 0 にはなりませんが,十分に良い x が求められていることを示しています.
この他にも,行列の分解を行う命令などが数多く用意されています.
【補足 1】Mac OS X 環境におけるバックスラッシュの入力について
Mac OS X 環境でバックスラッシュを入力するには,「option キー」を押しながら「Y
=キー」を押します.
【補足 2】Windows 環境でのバックスラッシュについて
Windows 環境では,バックスラッシュは円マーク「Y
=」で表示されます.円マークは「Y
=キー」を押すだけ
で入力できます.
5