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

2015.7.13
コンピュータ数学 MATLAB・Scilab の使い方
– 行列とベクトルの計算 –
本資料では,MATLAB,及び Scilab における行列・ベクトルの計算について説明します.MATLAB のコ
ンソールは >>,Scilab のコンソールは --> と表示されます.
基本的な演算命令
1
1.1
演算子
MATLAB,Scilab では表 1 にある演算子を用いて,四則演算とべき乗を計
算できます.
表 1 MATLAB・Scilab
の演算子.
>> 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,Scilab ではベクトルと行列を簡単に定義することができます.例えば 3 次元ベクトル x として
 
1
x= 2 
3
を定義するには,
>> x = [1; 2; 3]
x =
1
2
3
と入力します.x の成分 1, 2 の後にセミコロン ; が入っていますが,これは改行を表しています.セミコロ
ンをつけないで入力すると,
1
>> x = [1 2 3]
x =
1
2
3
となり,x は 3 次元行ベクトルとして定義されます.
行列も同じように定義できます.例えば,3 行 3 列の行列

1
A= 4
7
2
5
8

3
6 
9
を定義するには,
>> 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,Scilab では,行列やベクトルの特定の要素を参照することができます.例えば上記の行列 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 の行数が等しくないため,エラーメッセージ
が表示されています(Scilab では,エラーメッセージの内容が若干異なります).
>> 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 乗 (A2 ).
図9
行列 A の 3 乗 (A3 ).
◦ 行列の転置
行列を転置させたい場合は,変数の後に .’ をつけます.
>> 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,Scilab では %pi という変数で,あらかじめ登録されています.ですので,
円周率を自分で手入力する必要はありません.(もし円周率が登録されていない環境で円周率が必要になった
場合は,π = 4 arctan 1 という式を使って計算すると楽です.覚えておきましょう.)
数学で用いられる代表的な MATLAB,Scilab の組み込み関数を表 2 に示します.Mathematica と異なり,
MATLAB,Scilab の組み込み関数は 関数名は全て小文字で,カッコは (
) です.もしエラーが出た場
合は,カッコを確認してみましょう.
表 2 MATLAB・Scilab の組み込み関数.
関数
MATLAB・Scilab の組み込み関数
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,Scilab には,行列の行列式,階数,逆行列を計算したり,連立一次方程式を解く命令などが用
意されています.
• 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
• inv:行列の逆行列を求める命令
A = [ 1 -1 0; -1 2 -1; 0 -1 2 ];
ans =
=⇒
X = inv(A);
3
2
1
X
2
2
1
A*X
1
1
1
1
0
0
0
1
0
0
0
1
ans =
• \(バックスラッシュ):連立一次方程式を解く命令
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 が求められていることを示しています.7.3277e-16 が出力結
果として表示されていますが,これは 7.3277 × 10−16 を表しています.
【補足】Mac OS X 環境におけるバックスラッシュの入力について
Mac OS X 環境でバックスラッシュを入力するには,「option キー」を押しながら「Y
=キー」を押します.
5