見出し画像

「C&Fortran 演習で学ぶ数値計算」書評

共立出版様より、「C&Fortran 演習で学ぶ数値計算」という本をご恵贈いただきました。著者は名古屋大学の片桐孝洋先生と、大島聡史先生です。お二人ともHPC (High Performance Computing)がご専門で、私が東京大学情報基盤センターに務めていた時に同じ職場でした。

数値計算がカバーする範囲は極めて広く、基礎的な理論から実践的な実装のテクニックまで様々なトピックがあり得ます。本書では、方程式の求解、曲線推定、数値積分、連立方程式の解法や固有値問題といった線形代数の話題、微分方程式の解法など、一般的な数値計算の話題がカバーされています。特に奇をてらった箇所はありませんが随所に実装、特に計算速度やメモリ効率にこだわった記述があるのが特徴です。最大の特徴は、題名の通りサンプルコードがC言語とFortran言語で併記されていることでしょう。また、この手の教科書にありがちなFortran77のコードやC89/C90の記述ではなく、Fortran90、C99が使われています。また、「演習で学ぶ」とうたわれているように、演習が充実しています。数値計算の教科書では、演習問題は1ページに複数の問題が羅列されているだけのことが多いですが、本書では問題ごとにソースコードが掲示され、コードの解説、CとFortranの違いに関する注意などがていねいに記載されており、独学する場合でもあまり苦労しないでしょう。

第0章、第1章は準備で、ソースコードの解説やプログラミング言語の説明、計算機における数値表現、特に誤差の問題など、数値計算の基礎となるじれいが説明されています。演習で実際にマシンイプシロンを求めさせ、それより小さい値の加減算が値に影響しないことを確認させるのは教育的だと思いました。

第2章は代数方程式の求解で、2分法とニュートン法が紹介されています。第3章は曲線推定で、ルジャンドル補完、スプライン補完、最小二乗法が説明されています。図が多めなのが印象的です。特に、失敗例や問題のある例が図示されているのは初学者の助けとなるでしょう。

第4章は数値積分です。台形積分、シンプソン積分、ロンバーグ積分法が紹介されています。台形積分とシンプソン積分はよく使いますが、ロンバーグ積分は知らなかった(覚えていなかった?)ので勉強になりました。演習では三つの手法の比較せよ、という問題が出題されています。

第5章は連立方程式の直接解法です。ガウスージョルダン法とガウスの消去法のアルゴリズムと計算量が比較されており、実装上重要なピボット選択についてもていねいに記載があります。いくつか亜種があるLU分解については、本書では一番基本的なガウスの消去法から導出されるもののみが紹介され、別の亜種については名前と概要のみ記載されています。

第6章は連立一次方程式の反復解法と固有値問題です。連立一次方程式の反復解法としてヤコビ法、ガウスーザイデル法、その緩和加速版であるSOR法が紹介されています。固有値問題については、べき乗法とQR分解を持ちいた方法が紹介されています。

第7章は微分方程式の解法です。差分の説明から入り、オイラー法、ホイン法、ルンゲークッタ法と、段階的に解法が導入されます。偏微分方程式については、陽解法と陰解法が解説されています。

全体的に、「わかりやすさ」と「手を動かすこと」が重視されています。私がこの手の講義ノートを書くときに悩むのは「何を書くか」ではなく「何を書かないか」です。本書は図も、行列も大きく印刷され、(おそらく意図的に)余白も多めにとってあり、初学者が教科書を開いたときに「うっ」とならないように工夫されていると感じました。一方、随所に挿入された「より深く学ぶために」は、筆者の専門からくる「生の声」が漏れています。

本書を読むにあたって、自分が数値計算を学んだ教科書を引っ張り出しました。学部の頃は「数値計算(戸川隼人著、情報処理入門コース 岩波書店)」を読んでいました。扱っている内容は本書とかなり重なっており、そういう意味でも本書は標準的な内容を扱っているのかな、と思いました。また、大学院生の頃は「数値解析の基礎 (篠原 能材著 理工学基礎シリーズ 日新出版)」を辞書的に読んでいました。本書でロンバーグ積分が出てきて「あれ?こんなのあったっけ?」と思って「数値解析の基礎」を読んだらちゃんと書いてありました。一度は全部読んだはずなのですが、忘れたのでしょうか。

最後に、204ページにある言葉を引用します(強調引用者)。

また、多くの数値計算ライブラリがPython環境でも提供されている。そのため、数値計算のアルゴリズムの詳細や計算効率などの実行速度への影響を理解しなくても、簡便に数値計算を行うことができる。理学や工学の教育上この風潮はよろしくないが、便利な数値計算環境の普及は大いに歓迎すべきである

ここはまったく同感です。

いいなと思ったら応援しよう!