はじめに

MATLABは数値解析やシミュレーション、可視化など多岐にわたって利用されていますが、その根幹となるのが「行列」の扱いです。本記事では、行列についての基本的な知識や、実際に行列の入力を行う方法、さらには行列の和・転置・対角要素の取得まで、初心者が押さえておきたい内容を網羅的に紹介します。また、MATLABで有名な魔法陣 (magic square) を生成する関数「magic」を取り上げ、行列の作成方法の一例として解説します。

キーワード:行列, matrix, 魔法陣, magic square, MATLAB, 行列演算, sum, transpose, diagonal, 関数, magic, 行列の作成

1. 行列について

行列は、数値を縦方向(行)と横方向(列)に並べた表形式のデータ構造です。MATLABの名前の由来が「MATrix LABoratory」である通り、行列はMATLABを利用する上で非常に重要な概念です。

行列は線形代数の基礎であり、画像処理や機械学習、信号処理など、幅広い分野で活用されています。MATLABでは、行列やベクトルを簡単に定義・操作できるため、高速な数値計算を実現できます。

図1.行列(2×3)の例

2. 行列の入力方法

MATLABで行列を入力する最も基本的な方法は、** (ブラケット)**を用いた直接入力です。行同士はセミコロン (;) で区切り、要素はスペースかカンマで区切ります。

% 2×3の行列Aを定義
A = [1 2 3; 4 5 6];
disp(A)

% 3×3の行列Bを定義(カンマも使用可)
B = [1, 2, 3; 4, 5, 6; 7, 8, 9];
disp(B)

上記では、A は2行3列、B は3行3列の行列になります。

図2.行列の作成例

3. 行列の基本演算:和、転置、対角

3.1 和(加算)

行列同士を足し合わせるには、同じ次元(同じ行数・列数)である必要があります。以下は例です。

A = [1 2 3; 4 5 6];
disp(A)

B = [10 10 10; 20 20 20];
disp(B)

C = A + B;
disp(C)

図3.行列の加算の例

3.2 転置 (transpose)

行列の転置は、行と列を入れ替える操作です。MATLABでは A’(アポストロフィ)を使います。

A = [1 2 3; 4 5 6];
disp(A)

A_trans = A';
disp(A_trans)

図4.転置の例

3.3 対角 (diagonal)

行列の対角要素を取得するには、diag 関数を使います。対角成分だけを取り出したベクトルを返します。

B = [1 2 3; 4 5 6; 7 8 9];
disp(B)

d = diag(B);
disp(d)

図5.対角成分の抽出

また、ベクトルを与えて対角行列を作ることも可能です。

v = [1 2 3];
disp(v)

D = diag(v);
disp(D)

図6.体格行列の作成

表1.行列演算一覧表

種類演算子 / 関数説明使用例
加算+行列同士を要素ごとに加算C = A + B
減算行列同士を要素ごとに減算C = A – B
要素ごとの乗算.*行列の要素ごとに乗算C = A .* B
要素ごとの除算./行列の要素ごとに除算C = A ./ B
行列積*行列の積(内積)C = A * B
行列の左除算\行列の左除算(線形方程式 A * X = B の解を求める)X = A \ B
行列の右除算/行列の右除算(線形方程式 X * A = B の解を求める)X = B / A
転置行列の転置(共役転置)B = A’
転置 (非共役).’非共役転置B = A.’
累乗^行列の累乗C = A^3
要素ごとの累乗.^要素ごとの累乗C = A.^2
逆行列inv行列の逆行列B = inv(A)
行列式det行列の行列式d = det(A)
固有値eig行列の固有値と固有ベクトル[V, D] = eig(A)
対角行列diag対角行列を作成または抽出D = diag([1, 2, 3])
サイズ取得size行列のサイズを取得[m, n] = size(A)
列ベクトル化(:)行列を列ベクトルに変換v = A(:)
ゼロ行列作成zeros全要素が0の行列を作成Z = zeros(3, 4)
単位行列作成eye単位行列を作成E = eye(4)
ランダム行列rand, randnランダム要素を持つ行列を作成R = rand(3, 3)
sum行列の要素の合計値s = sum(A, 1)(列方向の合計)
prod行列の要素の積p = prod(A, 2)(行方向の積)
最大値max行列の要素の最大値[M, I] = max(A)
最小値min行列の要素の最小値[m, I] = min(A)
平均値mean行列の要素の平均値m = mean(A, 1)(列方向の平均)
標準偏差std行列の要素の標準偏差s = std(A, 0, 2)(行方向の標準偏差)
正規直交化orth行列の列空間を正規直交化Q = orth(A)
行列の階数rank行列の階数r = rank(A)
特異値分解svd行列の特異値分解[U, S, V] = svd(A)
LU分解lu行列のLU分解[L, U, P] = lu(A)
QR分解qr行列のQR分解[Q, R] = qr(A)

4. 行列の作成

上でご紹介した直接入力以外にも、MATLABには行列を手軽に作成する便利な関数が豊富に用意されています。

  • zeros(m,n): すべての要素が0の m×n 行列を作る
  • ones(m,n): すべての要素が1の m×n 行列を作る
  • eye(n): 単位行列(対角が1でその他が0の n×n 行列)を作る
  • rand(m,n): 0~1の乱数を要素に持つ m×n 行列を作る
  • magic(n): 魔法陣を作成 (後述)

例えば、以下のように実行します。

Z = zeros(2,3);
disp('関数 zero の使用例:')
disp(Z)

O = ones(2,3);
disp('関数 ones の使用例:')
disp(O)

I = eye(3);
disp('関数 eye の使用例:')
disp(I)

R = rand(2,2);
disp('関数 rand の使用例:')
disp(R)

M = magic(3);
disp('関数 magic の使用例:')
disp(M)

図7.様々な行列の作成例

5. 魔法陣 (Magic Square) と関数 magic

「魔法陣 (magic square)」とは、すべての行・列・対角線の和が同じになるように数値を配置した正方行列のことです。MATLABにはこの魔法陣を自動生成する関数 magic(n) が用意されています。

生成された行列を確認すると、行・列・対角の要素の合計が同じになっていることがわかります。

% 3×3の魔法陣を生成
M3 = magic(3);
disp('3×3の魔法陣')
disp(M3)

% 5×5の魔法陣を生成
M5 = magic(5);
disp('5×5の魔法陣')
disp(M5)

図8.魔法陣の作成例

figure;
imagesc(M5);
colorbar;  % カラーバーを表示
title('5x5 Magic Square Visualization');

図9.魔法陣をカラーマップとして表示

まとめ

本記事では、行列の基本概念行列の入力方法、そして行列の和・転置・対角などの基本演算に加え、行列の作成に便利な関数と魔法陣 (magic square) について解説しました。

特に、

  • 行列を自在に扱えると、数値演算やシミュレーションの効率が大きく向上する
  • zeros, ones, eye, rand, magic といったMATLABの組み込み関数を使うことで手軽に行列を生成できる
  • 魔法陣は「行列」の理解を深める上でも面白いサンプルであり、和が一定になる特性は数学的にも興味深い

といった点がポイントです。

さらなる学習リソース

  • MathWorks公式ドキュメント(日本語)
    MathWorks公式サイト
  • MATLAB Answers (Q&Aフォーラム)
    ユーザー同士の議論や応用例が見つかります。
  • YouTube MathWorks公式チャンネル
    動画でのチュートリアルやデモが多数。

キーワード再掲:MATLAB, 行列, 魔法陣, 行列演算, sum, transpose, diagonal, magic, 行列の作成