宮武勇登:Julia で理解を深める線形代数

2026-03-31

概要

本書の副題は、基礎概念から応用トピックまで

章末に演習問題がある。解答は下記のサポートページで公開される予定のようだ。参考文献もある。

感想

Python と数学を結びつける書籍は多く出版されているが、Julia と結びつけることについては最初わからなかった。しかし、Julia はけっこう高速なので、少しすると納得した。

サポートページが下記にある。
https://github.com/yutomiyatake/linear_algebra_julia

Cairo パッケージ

p.69 のプログラムを Jupyter lab で実行したら、次のエラーが出た。

  The Cairo and Fontconfig packages are necessary for saving as image/png.
  Add them with the package manager if necessary, then run `import Cairo,
  Fontconfig` before invoking `show(::IO, ::MIME"image/png", ::Context)`.

ということで Cairo パッケージを導入した。

import Pkg; Pkg.add("Cairo")

これを行なって、using Cairo を付け加えたのちに同じ p.69 のプログラムを実行したところ、無事グラフが描画できた。

演習問題

演習問題をやってみた。p.73 にある 2.6 である。

2.6 ブロック行列 `M = [[A,B],[C,D]]` を考えます.ただし,`A` と `D` は正方行列であるとし,さらに,

であるとします.このとき,行列 `M` は正則であり,次のように表せることを証明しなさい:

`M^(-1) = [[A^(-1)+A^(-1)BS^(-1)CA^(-1), -A^(-1)BS^(-1)], [-S^(-1)CA^(-1), S^(-1)]]`

以下は解答例である。行列 `A`, `D` の次数をそれぞれ `n, m` とし、`n` 次の単位行列を `I_n`、`m`次の単位行列を `I_m` とおく。

`MM^(-1) = [[A,B],[C,D]] [[A^(-1)+A^(-1)BS^(-1)CA^(-1), -A^(-1)BS^(-1)],[-S^(-1)CA^(-1), S^(-1)]] = [[A(A^(-1)+A^(-1)BS^(-1)CA^(-1)) - BS^(-1)CA^(-1), -BS^(-1)+BS^(-1)],[C(A^(-1)+A^(-1)BS^(-1)CA^(-1)) -DS^(-1)CA^(-1),-CA^(-1)BS^(-1) + DS^(-1)]] `

右上ブロックは `O` になることがすぐわかる。

右下ブロックは、`(-CA^(-1)B + D)S^(-1)` となり、カッコの中は `S` だから、結局 `I_m` となる。

左上ブロックは、`A(A^(-1)+A^(-1)BS^(-1)CA^(-1)) - BS^(-1)CA^(-1) = I_n + BS^(-1)CA^(-1) - BS^(-1)CA^(-1)= I_n` となる。

左下ブロックは、`CA^(-1)+CA^(-1)BS^(-1)CA^(-1) -DS^(-1)CA^(-1) = CA^(-1) - (D - CA^(-1)B)S^(-1)CA^(-1)`

このカッコ内は `S` だから左下ブロック全体で `O` となる。

よって、`M^M^(-1)` は単位行列となるので、題意は証明された。

`M` の形が与えられていたのでこれでよかったが、`M` の形が与えられないと困るだろう。この場合は、 ブロック行列の逆行列(www.drtamaki.tech)に書かれている導出法が参考になる。

演習問題をやってみた。p.74 にある 2.10 である。

2.10 Julia で, 2 × 2 型や 3 × 3 型の行列を複数用意し,定理 2.4.4 や性質 (2.1) が成り立つことを実例を通して確認しなさい. また,(2.2) が成り立たない `A, B, C` の組を一つ挙げなさい.

ちなみに、(2.2) 式は p.64 の中ほどにあり、

【例】`"Tr"(ABC) = "Tr"(ACB)` ← これは成り立たない!

とある。

後半をやってみる。`A = [[1,0],[0,0]], B = [[0,1],[0,0]], C = [[a,b],[c,d]]` としてみる。

`"Tr"(ABC) = "Tr"([[1,0],[0,0]][[c,d],[0,0]]) = "Tr"([[c,d],[0,0]]) = c`

`"Tr"(ACB) = "Tr"([[1,0],[0,0]][[0,a],[0,c]]) = "Tr"([[0,a],[0,0]]) = 0`

ということなので、`A = [[1,0],[0,0]], B = [[0,1],[0,0]]` のようにとれば、0 でない `c` に対して、`C = [[a,b],[c,d]]` に対して、`"Tr"(ABC) != "Tr"(ACB)` である。

数式表現

ASCIIMathMathJax4を使っている。

書誌情報

書名Julia で理解を深める線形代数
著者宮武勇登
発行日2026 年 3 月 25 日 第1版 第1刷
発行元オーム社
定価3700 円(税別)
サイズ
ISBN978-4-274-23453-8
NDC
その他2026-03-30 紀伊國屋書店 川越店にて買って読む