このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
行列および配列
MATLAB は "matrix laboratory" を短縮した名称です。他のプログラミング言語では、ほとんどの場合数値を一度に 1 つずつ処理しますが、MATLAB® は基本的に行列や配列全体を演算するように設計されています。
MATLAB 変数は、データ型にかかわらずすべて多次元 "配列" です。"行列" とは線形代数で多用される 2 次元配列です。
配列の作成
4 つの要素を含む単一行の配列を作成するには、要素をコンマ (,
) またはスペースのいずれかで区切ります。
a = [1 2 3 4]
a = 1×4
1 2 3 4
このタイプの配列が "行ベクトル" です。
複数の行をもつ行列を作成するには、行をセミコロンで区切ります。
a = [1 3 5; 2 4 6; 7 8 10]
a = 3×3
1 3 5
2 4 6
7 8 10
行列を作成するもうひとつの方法は、ones
、zeros
、rand
などの関数を使用することです。たとえば、ゼロで構成される 5 行 1 列の列ベクトルを作成します。
z = zeros(5,1)
z = 5×1
0
0
0
0
0
行列と配列の演算
MATLAB では、単一の算術演算子または関数を使用して行列中のすべての値を処理することができます。
a + 10
ans = 3×3
11 13 15
12 14 16
17 18 20
sin(a)
ans = 3×3
0.8415 0.1411 -0.9589
0.9093 -0.7568 -0.2794
0.6570 0.9894 -0.5440
行列を転置するには、一重引用符 ('
) を使用します。
a'
ans = 3×3
1 2 7
3 4 8
5 6 10
*
演算子を使用して、各行と各列の内積計算による標準の行列乗算を実行することができます。たとえば、行列にその逆行列を乗じると単位行列が返されることを確認するには、次のようにします。
p = a*inv(a)
p = 3×3
1.0000 0.0000 -0.0000
0 1.0000 -0.0000
0 0.0000 1.0000
p
が整数値行列ではないという点に注意してください。MATLAB では数値が浮動小数点値として保存され、実際の値とその浮動小数点表記のわずかな誤差が算術演算に影響します。format
コマンドを使用して、表示される桁数を増やすことができます。
format long
p = a*inv(a)
p = 3×3
0.999999999999996 0.000000000000007 -0.000000000000002
0 1.000000000000000 -0.000000000000003
0 0.000000000000014 0.999999999999995
短形式の表示に戻すには、次のようにします。
format short
format
は数値の表示のみに影響し、MATLAB での計算方法や保存方法には影響しません。
行列の乗算ではなく要素単位の乗算を実行するには、.*
演算子を使用します。
p = a.*a
p = 3×3
1 9 25
4 16 36
49 64 100
乗算、除算およびべき乗の行列演算子にはそれぞれ対応する配列演算子があり、これは要素単位の演算を行います。たとえば、a
の各要素を次のように 3 乗します。
a.^3
ans = 3×3
1 27 125
8 64 216
343 512 1000
連結
"連結" とは、配列を合わせてより大きな配列にする処理です。実際、最初の配列は個々の要素を連結して作っています。大かっこ ([]
) は連結演算子です。
A = [a,a]
A = 3×6
1 3 5 1 3 5
2 4 6 2 4 6
7 8 10 7 8 10
コンマを使用して配列を次の配列と相互に連結することを "水平" 連結と呼びます。各配列の行数は同じでなければなりません。同様に、配列の列数が同じであれば、セミコロンを使用して "垂直" に連結することができます。
A = [a; a]
A = 6×3
1 3 5
2 4 6
7 8 10
1 3 5
2 4 6
7 8 10
複素数
複素数には実数部と虚数部があり、虚数単位は -1
の平方根です。
sqrt(-1)
ans = 0.0000 + 1.0000i
複素数の虚数部を表すには、i
または j
のいずれかを使用します。
c = [3+4i, 4+3j; -i, 10j]
c = 2×2 complex
3.0000 + 4.0000i 4.0000 + 3.0000i
0.0000 - 1.0000i 0.0000 +10.0000i