[ Amazon, SIAM ] ISBN 978-0-89871-646-7, $59
四十年近く読書人を気取っていると,自分なりに構築した「著者名即買いリスト」なるものがガッチリ組み上がっている。ワシの頭脳のキャッシュメモリには常にこのインデックスが蓄積されており,これに引っかかった著者の新刊が出るのを知るとパブロフの犬より早く反射神経で買ってしまうのである。で,本書もご多分に漏れず,SIAM Newsに告知が出たのを見るが早いか,早速SIAM会員価格で注文をかけて入手した訳である。
SylvesterとCayleyってのは,今の数値計算屋なら知らぬモノのない古典的な名前だが,この二人は19世紀後半のイギリス線型代数派のメンバーとして,生涯を通じたコンビで活躍した数学者である(森毅「異説数学者列伝」ちくま学芸文庫, P.154-160)。線型代数をかじった人間なら,行列Aの固有値を求める時には自然と|xI-A|=0を解くであろうが,これがHamilton-Cayleyの定理って奴である(斎藤正彦「線型代数学」東大出版会, P.198)。森によればこの二人が出会ったのは数学研究会とかではなく,法律家になるための学校だったというのだから,世の中どんな出会いがあるかわからんモンだ。
で,本書のタイトルである「行列関数」ってのは,このCayleyとSylvesterに端を発する,というより,CayleyはA^(1/2),Sylversterなんてそのものズバリを最初に提唱したらしいのである。へぇ~・・・という所から本書は始まっている。
一体そんなものが何の役に立つのか・・・といぶかる人はどのぐらいいるのかしら? exp(A)なんてのは線型常微分方程式の解の表現には必要だし,それを延長していけばsin(A)とかlog(A)とかも同様に考えられて,それなりに応用がありそうな気はしてくる。で,個々に関数を増やしてぐらいなら,いっそのことスカラー関数f(t)をそのまま拡張して行列関数f(A)を定義できないか,と考えるのは,ごく常識的な思考である。マン大のミスタースポック博士ことN.J.Highamはこの方向で3つのf(A)の定義方法を延べ,f(t)が解析的であればこれらが互いに同値であることを第一章(PDF)でキッチリ証明している。ふーん,まぁJordan標準形のは分かるとして,Hermite補間とCauchyの積分表示が繋がるとは知らなかったなぁ。って無知にも程があるってか?
ワシが一番興味があるのが応用分野(第2章)と,exp(A)の話題(第10章)なんだが,この辺りを含めて本書を眺めてみると(読んだ,ではないからね為念),片っ端から情報を集めまくって書きまくった以前の著作に比べると,普通の数学書のように話題が積み上げられて展開されている印象がある。スポック博士によれば,最初の章以外は独立して読めると言っているが,最初からじっくり読んだ方が為になりそうな感じがする。話題として選んでいるのはO(n^4)を越えないアルゴリズムに落ち着くものに絞っているそうだが,この辺りは数値計算屋らしい,と同時に,具体的で構築的なイギリス数学の伝統(by 藤原正彦)にも忠実ということなんだろうなぁ。
個人的には,もうちっと現状のコンピューティング環境についても言及して欲しかったな,という不満がある。今ではコンシューマ向けCPUでもマルチコア化やSIMD命令の充実がなされているので,メインメモリに入り切る程度に大規模な行列・ベクトル計算がかなり高速に実行できるようになってきている。数値計算性能を測る時には行列積計算を行うのが普通だが,きちんとチューニングされたATLAS(のDGEMM関数)を使えば,少し型落ちしたCPU単体でも数GFLOPSの性能が安定して叩き出せる(例えばこのPDFの16枚目のスライドを参照)。逆に言えば,共有メモリ内並列環境で十分な規模の計算なら,ちょっとぐらい計算量が増えても行列単位でまとめて計算した方が効率が良くなる可能性もあるのだ。近頃ではそこに気が付いた方々がいろいろやり出しているようである。
このように,今のPC環境は行列計算に向いているのであるからして,本書で提案している行列関数の計算の実験にはもってこいである。本書の計算はMatlab(の倍精度計算)で行っているが,これだってこのような環境が整っていてこそ気軽に実験できるのである。
つーことで,exp(A)どまりならともかく,f(A)まで広げて何の役に立つんだとかブーたれるより,折角の行列計算向きPC環境を使い倒して遊んだ方が,人生楽しくなるんじゃないかと,自分勝手に思う今日この頃であります。