塚田真・金子博・小林羑治・髙橋眞映・野口将人:Python で学ぶ線形代数学

2026-02-13

概要

「はじめに」から引用する。

本書は、「線形代数の応用」を学びたい人のための線形代数学基礎的な教科書です。 具体的な応用を理解するためには、抽象的な基礎理論を正しく理解しなければならないという趣旨で書かれています。(中略)

一方、特異値分解と一般化逆行列は線形代数学の2大テーマである連立方程式論と固有値問題の両方の帰結であり、 固有値に関しては取り扱いの比較的容易なエルミート行列についてまでの知識で理解できます。 しかも、非正方行列までも含む任意の行列に対して適用可能であり、今日、ジョルダン標準形の応用以上によく用いられています。特異値分解と一般化逆行列は、 線形代数学を学ぶ上での動機付けの面からもぜひ知っておくべき話題であると筆者たちは考えています。

本文中には問がある。解答はないが、本書のサポートページ(www.math-game-labo.com)から解答がダウンロードできる。

本書に続き、第2版が出ている。

感想

行列の種類

私は行列の名前が覚えられない。p.121 から抜粋する。

`(m, n)` 型行列
\( \boldsymbol{A} \) = `[[a_(11), a_(12), cdots, a_(1n)],[a_(21), a_(22), cdots, a_(2n)],[vdots,vdots,,vdots],[a_(m1), a_(m2), cdots, a_(mn)]]`
に対して、`(n, m)` 型行列
\( \boldsymbol{A}^\top \) `overset("def")(=) [[a_(11), a_(21), cdots, a_(m1)],[a_(12), a_(22), cdots, a_(m2)],[vdots,vdots,,vdots],[a_(1n),a_(2n), cdots, a_(mn)]]` , \( \boldsymbol{A}^* \) `overset("def")(=) [[bar(a_(11)), bar(a_(21)), cdots, bar(a_(m1))],[bar(a_(12)), bar(a_(22)), cdots, bar(a_(m2))],[vdots,vdots,,vdots],[bar(a_(1n)), bar(a_(2n)), cdots, bar(a_(mn))]]`

と定義します。それぞれ \( \boldsymbol{A} \) の転置行列および随伴行列(または、共役転置行列)といいます。

またまだ出てくる。p.194 から抜粋する。

\( \boldsymbol{A} \) を正方行列とし、その随伴行列\( \boldsymbol{A}^* \) を考えます。 \( \boldsymbol{A}^* = \boldsymbol{A} \) を満たすとき、\( \boldsymbol{A} \) をエルミート行列といいます。 \( \boldsymbol{A}^*\boldsymbol{A} = \boldsymbol{A}\boldsymbol{A}^* = \boldsymbol{I} \) を満たすとき、すなわち \( \boldsymbol{A}^* = \boldsymbol{A}^{-1} \) を満たすとき、\( \boldsymbol{A} \) をユニタリ行列といいます。

特異値分解

「はじめに」では、特異値分解と一般化逆行列の重要性を力説していたので、特異値分解を見てみた。

p.286 の定理 10.1 は特異値分解の形式を与えている。

定理 10.1 (特異値分解)\( \boldsymbol{A} \) `in M_(bbbK) (m, n)` に対し、\( \boldsymbol{A^*A} \) の 0 でない固有値を重複度を込めて
`sigma_1^2 ge sigma_2^2 ge cdots ge sigma_k^2 gt 0` (各 `sigma_i` は正の実数)
とする。このとき、`bbbK^m` 上のユニタリ行列 \( \boldsymbol{U}_1 \)、`bbbK^n` 上のユニタリ行列 \( \boldsymbol{U}_2 \)、および `(m, n)` 型の行列 \( \boldsymbol{\Sigma} \)が存在して、 \[ \boldsymbol{A} = \boldsymbol{U}_1 \boldsymbol{\Sigma } \boldsymbol{U}_2 , \boldsymbol{\Sigma} = \left[ \begin{array}{ccc|cc} \sigma_1 & \ldots & 0 & \ldots & 0 \\ \vdots & \ddots & \vdots & & \vdots \\ 0 & \ldots & \sigma_k & \ldots & 0 \\ \hline \vdots & \ldots & \vdots & & \vdots \\ 0 & \ldots & 0 & \ldots & 0 \end{array} \right] \] と書ける。`sigma_1, sigma_2, cdots, sigma_k` を \( \boldsymbol{A} \)の特異値という。

では具体的に \( \boldsymbol{U}_1 や \boldsymbol{U}_2 \) はどのように求めるのか。この疑問は、次の証明で書かれている。

証明 \( { \boldsymbol{w}_{k+1}, \boldsymbol{w}_{k+2}, \dots, \boldsymbol{w}_m } \) を kernel (\( \boldsymbol{A}^* \)) の基底とする。 \( { \boldsymbol{w}_1, \boldsymbol{w}_2, \dots, \boldsymbol{w}_k } \) と合わせて `bbbK^m` の基底として、ユニタリ行列
\( \boldsymbol{U}_1 = [ \boldsymbol{w}_1 \ \boldsymbol{w}_2 \ \dots \ \boldsymbol{w}_k \ \boldsymbol{w}_{k+1} \ \boldsymbol{w}_{k+2} \ \dots \ \boldsymbol{w}_m ] \)
ができる。 一方、\( { \boldsymbol{v}_1, \boldsymbol{w}_2, \dots, \boldsymbol{v}_k } \) に kernel( \( \boldsymbol{A}\) ) の基底 \( { \boldsymbol{v}_{k+1}, \boldsymbol{v}_{k+2}, \dots, \boldsymbol{v}_m } \) を合わせて `bbbK^n` の基底として、ユニタリ行列 \( \boldsymbol{U}_2 \)を
\( \boldsymbol{U}_2^* = [ \boldsymbol{w}_1 \ \boldsymbol{w}_2 \ \dots \ \boldsymbol{w}_k \ \boldsymbol{w}_{k+1} \ \ \dots \ \boldsymbol{w}_n ] \)
とする。∎

これで終わりか。このようなユニタリ行列 \( \boldsymbol{U}_1 , \boldsymbol{U}_2 \) を構成すれば特異値分解の式が成り立つことについては、この前のページまで読まなければならない。これは大変だ。

誤植

上記サポートページから辿れる正誤表以外の誤植である。

p.188 上から9行目、左右対象とあるが、正しくは《左右対称》である。

p.279 の注1は次の通りだ。

線形空間 `V` の部分集合 `W` と `v in V` に対して `v + W = { v + w | w in W}` と定義し、 これを `W` のと呼んでいます。2次元平面や3次元空間では、原点を通る直線や平面の平行移動にあたります。部分空間を平行移動した集合のことをアフィン空間といいます。

《これを `W` の…と呼んでいます。》の、・・・の部分が抜けているように思われる。何を補えばいいのかわからない。「アフィン部分空間」だろうか。

p.319 の参考文献[25]の著者名の一人が柳井春夫になっているが、正しくは《柳井晴夫》である。p.320 の文献[33]の編著者の一人は正しい。

参考文献

p.316 以降の「あとがきに代えて」では、参考文献が多数挙げられている。その中で私が読んだものをリンクする。

数式表現

ASCIIMathMathJax4を使っている。

書誌情報

書名Python で学ぶ線形代数学
著者塚田真・金子博・小林羑治・髙橋眞映・野口将人
発行日2020 年 4 月 20 日 第 1 版 第 1 版
発行元オーム社
定価3200 円(税別)
サイズ
ISBN978-4-274-22533-8
NDC
その他川口市立図書館にて借りて読む