はじめに

MATLABは数値解析やシミュレーションを中心に、行列演算を得意とする統合開発環境です。線形代数学の各種操作や定理を計算機上で簡単に再現でき、学術研究や産業応用の現場で幅広く活用されています。本記事では、以下のポイントを中心に、MATLABで実践する線形代数の基本を解説します。

  1. MATLAB 環境の行列
  2. べき乗と指数
  3. 線形方程式
  4. 固有値 (Eigenvalues)
  5. 特異値 (Singular Values)

これらを押さえておくと、線形代数の代表的な手法を効率的にプログラミングへ活用できるようになります。

キーワード再掲:MATLAB, 線形代数, 行列, べき乗, 指数, 線形方程式, 固有値, 特異値, 固有値分解, 特異値分解

1. MATLAB 環境の行列

MATLABにおける行列の作成・操作は、プログラム言語の中心的機能のひとつです。行列はブラケット [] を用いて直接記述します。

A = [1 2 3; 4 5 6; 7 8 9];

上記は、3×3 の行列 A を定義しています。行はセミコロン ; で区切り、列はスペースまたはカンマ , で区切っています。

行列の基本操作

  • サイズの取得: size(A)
  • 転置: A’
  • 逆行列: inv(A) (ただし大規模行列や特異行列には注意が必要)
A = [1 2 3; 4 5 6; 7 8 9];
disp('A = ')
disp(A)

disp('行列Aのサイズ:')
disp(size(A))

disp('行列Aの転置:')
disp(A')

disp('行列Aの逆行列:')
disp(pinv(A))

図1.行列の基本操作

2. べき乗と指数

2.1 べき乗 (Power)

MATLABでは、行列のべき乗は A^n で表します。線形代数的な行列積を n 回行うイメージです。

A = [1 2; 3 4];
A2 = A^2;    % A×A
A3 = A^3;    % A×A×A

一方、要素ごとのべき乗を行う場合は .^ を用います。

A = [1 2; 3 4];
disp('行列A:')
disp(A)

A2 = A^2;           % A×A
disp('行列Aの2乗')
disp(A2)

A3 = A^3;           % A×A×A
disp('行列Aの3条')
disp(A3)

A_ele = A.^2;       % 行列要素を個別に2乗
disp('行列Aの要素同士の2条')
disp(A_ele)

これらは厳密に異なる演算であるため、目的に応じて使い分けましょう。

図2.行列のべき乗

2.2 指数 (Exponential)

行列指数(行列指数関数)は、\exp(A) もしくは e^A と表され、MATLABでは \text{expm}(A) で計算できます。これは要素ごとの指数 \exp(A) とは異なります。

線形システムの微分方程式解などに頻出する行列指数は、線形代数や制御理論で重要な役割を担います。

A = [1 2; 3 4];

% 行列指数関数 (Matrix exponential)
E = expm(A);
disp('行列指数関数:')
disp(E)

% 要素ごとの指数 (Element-wise exponential)
E_ele = exp(A);
disp('要素ごとの指数')
disp(E_ele)

図3.行列の指数

3. 線形方程式

3.1 Ax = b の解法

最も基本的な線形方程式 A\mathbf{x} = \mathbf{b} を解くには、MATLABでは「逆行列を求めてから掛ける」よりも A\backslash \mathbf{b} を使うのが一般的です。数値的に安定し、パフォーマンスも高いからです。

これにより、ベクトル \mathbf{x} が解として求められます。

A = [3 1; 1 2];
disp('行列A:')
disp(A)
b = [9; 8];
disp('ベクトルb')
disp(b)
x = A\b;           % ベクトルxを導く
disp('ベクトルx')
disp(x)

図4.Ax = b の解法

3.2 その他の解法

  • 過剰決定システム (最小二乗): A\backslash \mathbf{b} は方程式数が変数数より多い場合は最小二乗解を返します。
  • 疎行列 (sparse matrix): 大規模問題では疎行列を利用するとメモリ効率を大幅に改善できる場合があります。
% 連立方程式の係数行列と定数ベクトルを定義
A = [3 1; 1 2];                 % 系数行列 (左辺の係数)
b = [9; 8];                     % 定数ベクトル (右辺の値)

% 方程式 A * [x; y] = b の解を計算
solution = A\b;                 % MATLABで左除算を使って解を求める

% グラフを描画
x = linspace(0, 5, 100);        % x軸の範囲を定義(0から5までの100点)
y1 = (9 - 3*x);                 % 1つ目の式 (3x + y = 9) を変形して y を表現
y2 = (8 - x)/2;                 % 2つ目の式 (x + 2y = 8) を変形して y を表現

figure;                         % 新しい図ウィンドウを作成
plot(x, y1, 'r', 'LineWidth', 1.5);     % 1つ目の式を赤色で描画
hold on;                        % 2つ目のグラフを同じ図に追加するために保持
plot(x, y2, 'b', 'LineWidth', 1.5);     % 2つ目の式を青色で描画
plot(solution(1), solution(2), 'ko', 'MarkerSize', 8, 'MarkerFaceColor', 'k'); % 解 (x, y) を黒い点で描画
hold off;                       % グラフの保持を終了

% グラフの装飾
legend('3x + y = 9', 'x + 2y = 8', '解 (x, y)', 'Location', 'best'); % 凡例を追加
title('連立方程式のグラフと解'); % グラフのタイトル
xlabel('x');                    % x軸のラベル
ylabel('y');                    % y軸のラベル
grid on;                        % グリッドを表示

% コマンドウィンドウに解を表示
disp('解 (x, y):');              % 解を表示するメッセージ
disp(solution);                 % 計算結果を表示

図5.連立方程式の解法

4. 固有値 (Eigenvalues)

4.1 固有値と固有ベクトル

行列 A の固有値を求めるには eig(A) を使います。例えば、以下の例を見てみましょう。

V と D を用いると、AV=VDの関係が成り立ちます。このように固有分解 (eigendecomposition) を使うと、行列の対角化や各種解析が容易になります。

A = [2 1; 1 2];

eVals = eig(A);
disp('A の固有値')
disp(eVals)

[V,D] = eig(A);
disp('固有ベクトルを列に並べた行列V')
disp(V)
disp('固有値を対角成分にもつ対角行列D')
disp(D)

図6.固有値と固有値ベクトル

4.2 応用例

  • 対角化: A = V D V^{-1} (対角行列 D を中心とした変換)
  • 行列指数: 行列指数 expm(A) も固有値分解を用いて計算可能

5. 特異値 (Singular Values)

5.1 特異値分解 (SVD)

特異値分解 (SVD) は、任意の行列 AAA を以下のように分解する強力な手法です。

A = U \Sigma V^\mathrm{H}

ここで、UV は直交行列(またはユニタリ行列)、\Sigma は非負の実数を対角成分とする行列(特異値)です。MATLABでは svd 関数を使います。

A = [1 2 3; 4 5 6; 7 8 9];
[U,S,V] = svd(A);

disp('行列A:')
disp(A)

disp('左特異ベクトルU:')
disp(U)

disp('対角行列 (特異値)S:')
disp(S)

disp('右特異ベクトルV:')
disp(V)

図7.特異値分解

5.2 応用例

  • ランク近似: 大きな行列を低ランク近似するときに特異値が有効
  • 主成分分析 (PCA): データ行列をSVDで分解し、主要成分を求めるなど、多方面で応用されます

表1.固有値分解 (Eigendecomposition) と特異値分解 (SVD) の特徴比較表

分解手法対象行列特徴MATLAB関数
固有値分解 (Eig)正方行列固有値 & 固有ベクトルeig
特異値分解 (SVD)任意のサイズの行列特異値 & 左右特異ベクトルsvd

まとめ

本記事では、線形代数の基礎かつMATLABで頻出する以下のトピックを紹介しました。

  1. MATLAB 環境の行列: 行列の作成、基本操作
  2. べき乗と指数: A^n と要素ごとの .^n 、行列指数 expm(A)
  3. 線形方程式: A\backslash\mathbf{b} で解く A\mathbf{x} = \mathbf{b}
  4. 固有値 (Eigenvalues): eig(A) と固有分解
  5. 特異値 (Singular Values): svd(A) と特異値分解

これらの機能を押さえておくと、数値計算やデータ解析、制御システム解析など多岐にわたる分野で効率的にMATLABを活用できます。

さらなる学習リソース

  • MathWorks公式ドキュメント(日本語)
    MATLABの線形代数関連ドキュメント
  • MATLAB Answers (Q&Aフォーラム)
    線形代数に関する具体的な疑問やトラブルシューティングを検索可能
  • YouTube MathWorks公式チャンネル
    公式動画で線形代数の使い方や応用事例が学べます

キーワード再掲:MATLAB, 線形代数, 行列, べき乗, 指数, 線形方程式, 固有値, 特異値, 固有値分解, 特異値分解