索引 / 001 JA
Numerical Recipes: The Art of Scientific Computing(ニューメリカル・レシピ:科学計算の技法) cover

物理学

物理学

Numerical Recipes: The Art of Scientific Computing(ニューメリカル・レシピ:科学計算の技法)

William H. Press; Saul A. Teukolsky; William T. Vetterling; Brian P. Flannery

英語原題: Numerical Recipes: The Art of Scientific Computing

ウィリアム・プレス、ソール・テューコルスキー、ウィリアム・ベッターリング、ブライアン・フラナリーによる、科学者のための数値計算法の参考書。各トピックで、数学とその落とし穴をくだけた語り口で説明し、C++による完全に動作するルーチンを示しながら、物理学、工学、データ解析で最もよく必要になるアルゴリズムを扱う。

前提知識: できればC++でのプログラミング経験と、微積分、線形代数、ある程度の確率の知識があること。計算物理入門の授業を修了していると役立つ。

難易度レベル
上級
学術レベル
大学院
numerical methodsscientific computingアルゴリズムc++data analysis参考書

01 / 読書ガイド

読書ガイド

引用

Press, W. H., Teukolsky, S. A., Vetterling, W. T., & Flannery, B. P. (2007). Numerical Recipes: The Art of Scientific Computing (3rd ed.). Cambridge University Press.

章の要約

第3版は全22章で、索引は1195ページから始まり、全体でC++のコードが使われています。第1章で約束事を整え、第2章から第13章は科学計算の古典的な中核を扱い、第14章から第16章はデータ、モデリング、推論に移り、第17章から第20章は微分方程式と積分方程式を扱い、第21章と第22章は計算幾何と非数値的なアルゴリズムを加えます。各章は番号0の節でその主題を紹介し、続いて番号の付いた個々の手法に進みます。

第1章:予備知識

序論、誤差・精度・安定性、C系の構文、オブジェクト・クラス・継承、ベクトルと行列のオブジェクト、その他の約束事を扱います。序文は、本書が採用するオブジェクト指向のスタイルについて第1.3節から第1.5節を参照するよう案内しています。

第2章:連立一次方程式の解法

ガウス=ジョルダン消去法とガウスの消去法、LU分解、三重対角・帯行列の系、解の反復改良、特異値分解、疎な系、ヴァンデルモンド行列とテプリッツ行列、コレスキー分解とQR分解を扱い、最後に行列の逆転がN³の過程かどうかを問います。

第3–5章:補間と外挿;関数の積分;関数の評価

整列した表の探索、多項式・スプライン・有理関数による補間、格子上と散在データの補間、ラプラス補間(第3章)。古典的な求積公式、ロンバーグ積分、広義積分、変数変換、ガウス求積、適応的求積、多次元積分(第4章)。多項式、連分数、級数とその収束、漸化式、数値微分、チェビシェフ近似、パデ近似と有理チェビシェフ近似(第5章)。

第6章:特殊関数

ガンマ関数・ベータ関数・誤差関数、指数積分、ベッセル関数とエアリー関数、球面調和関数、フレネル積分、ドーソン積分、フェルミ=ディラック積分、楕円積分、超幾何関数、統計関数を扱います。

第7章:乱数

一様乱数、他の分布の乱数、多変量正規乱数、線形フィードバックシフトレジスタ、ハッシュ表とハッシュメモリ、単純なモンテカルロ積分、準乱数列、適応的・再帰的モンテカルロ法を扱います。

第8–10章:ソートと選択;求根と非線形連立方程式;関数の最小化と最大化

ソート、順位付け、選択のアルゴリズム(第8章)。区間の括り込み、二分法、割線法とブレント法、ニュートン=ラフソン法、多項式の根、非線形連立方程式(第9章)。1次元・多次元の最小化(黄金分割、ブレント法、ダウンヒル・シンプレックス法、パウエル法、共役勾配法、準ニュートン法)、シンプレックス法と内点法による線形計画法、焼きなまし法、動的計画法(第10章)。

第11章:固有系

ヤコビ変換、ギブンスとハウスホルダー法による三重対角化、対称行列・エルミート行列・実非対称行列の固有値、QR法と逆反復を扱います。

第12–13章:高速フーリエ変換;フーリエ法とスペクトルの応用

標本化データのフーリエ変換、FFTとその実数データ向けの変種、正弦・余弦変換と高次元(第12章)。畳み込み、相関、ウィーナーフィルタ、パワースペクトル推定、デジタルフィルタ、線形予測、最大エントロピースペクトル、不等間隔データ、フーリエ積分、ウェーブレット変換、標本化定理(第13章)。

第14–16章:データの統計的記述;データのモデリング;分類と推論

モーメント、分布が異なるかの検定、分割表、相関、情報理論的性質、サビツキー=ゴーレイ平滑化(第14章)。最尤推定としての最小二乗法、直線と一般線形のあてはめ、非線形モデル、信頼限界、ロバスト推定、マルコフ連鎖モンテカルロ、ガウス過程回帰(第15章)。ガウス混合モデルとk平均法、ビタビ復号、隠れマルコフモデル、階層的クラスタリング、サポートベクターマシン(第16章)。

第17–20章:常微分方程式の積分;二点境界値問題;積分方程式と逆問題の理論;偏微分方程式

ルンゲ=クッタ法、適応刻み幅、ブリルシュ=ストア法、硬い方程式系、多段階法、化学反応ネットワークの確率的シミュレーション(第17章)。射撃法と緩和法、実例として扁長球面調和関数(第18章)。フレドホルム方程式とヴォルテラ方程式、特異核、正則化、バックス=ギルバート法、最大エントロピー画像復元(第19章)。流束保存型と拡散型の初期値問題、フーリエ法、巡回縮約法、緩和法、マルチグリッド法、スペクトル法(第20章)。

第21–22章:計算幾何;数値的でない度合いの高いアルゴリズム

点と箱、KD木、三角形、多角形、ドロネー三角形分割、四分木(第21章)。簡単なグラフの描画、機械パラメータ、グレイコード、チェックサム、ハフマン符号と算術符号、任意精度の算術(第22章)。

主要概念

第1–5章:基礎

  • 誤差・精度・安定性:同等に見えるアルゴリズムが計算機上で異なる振る舞いをする理由。
  • 行列分解:LU、コレスキー、QR、特異値分解は線形代数計算の土台。
  • 求積と補間:古典公式、ガウス求積、スプラインの中から選ぶ。

第6–11章:中核となる数値手法

  • 乱数とモンテカルロ積分:標本を生成して積分に使う。
  • 求根と最小化:括り込み、ニュートン型の反復、多次元探索。
  • 固有系:三重対角化とQR法。

第12–16章:信号、データ、推論

  • FFTとスペクトル推定:標本化、畳み込み、フィルタ、パワースペクトル。
  • 最小二乗法と最尤法:信頼限界つきのモデルあてはめ。
  • マルコフ連鎖モンテカルロ:事後分布からの標本抽出。

第17–22章:方程式とアルゴリズム

  • 適応刻み幅と硬さ:常微分方程式を積分する際の中心的な問題。
  • 緩和法とマルチグリッド法:境界値問題を解く。
  • ドロネー三角形分割とKD木:幾何学的なデータ構造。

批判的分析

長所

  • 説明と動くコードの両立。 序文によれば、第2版は文章による説明、簡潔な導出、批判的な判断、助言によって次第に評価されるようになりました。著者がコードを残したのは、助言が誠実で実装可能で実用的かどうかを読者が判断できるようにするためです。そのため各主題で議論とルーチンが組み合わされています。
  • 一冊で広い範囲。 目次は線形代数と特殊関数から、スペクトル解析、統計、微分方程式、計算幾何までに及び、一冊が多様な作業の最初の参照先になります。
  • 大幅に改訂された版。 序文は数百ページの新しい内容を挙げており、分類と推論、計算幾何の章、拡充された乱数と分布の節、内点法による線形計画法、動的計画法、マルコフ連鎖モンテカルロ、ガウス過程回帰が含まれます。
  • 主張のある実用的な語り口。 第2版の序文は目標を、くだけた、編集的な立場のある、役に立つ本と述べています。第3版の序文は、アルゴリズムのコードは見つかることを知っていて、その仕組みと出来の良さを知りたい読者のための本だと付け加えています。

短所

  • 順を追って学ぶ課程ではなく参考書。 目次は単一の道筋ではなく手法の系統ごとに組まれているため、数値解析を段階的に学ぶより、主題を引くのに向いています。
  • 独自のC++スタイルに依存。 コードは著者のオブジェクト指向の約束事を使っており、第1章で説明されています。Pythonなど他の言語を使う読者は、それを翻訳するか避ける必要があります。
  • ライセンス。 本書の冒頭にはコードに関するライセンスと法的情報の節があります。自分のプロジェクトでルーチンを再利用する前に読んでください。
  • 幅が深さを制限する。 多くの手法は数ページで扱われるため、偏微分方程式や最適化のような専門的な主題には専門書のほうが先へ進みます。

コースにおける位置づけ

この計算物理のリストの中で、Numerical Recipes は幅広い手法のリファレンスです。Newman の Computational Physics と Landau、Páez、Bordeianu の Computational Physics: Problem Solving with Python は、物理の問題を通じてPythonで数値手法を教える教科書で、最初の授業にはこちらのほうが向いています。Kinder と Nelson の A Student's Guide to Python for Physical Modeling は言語面の基礎を与えます。Taylor の An Introduction to Error Analysis は実験測定の不確かさの扱いを論じ、数値誤差とは別の主題です。Thijssen の Computational Physics は、物性物理の研究手法を扱う大学院レベルの解説です。

Numerical Recipes は授業の教科書と併用してください。教科書に出てくる手法をより詳しく説明してほしいとき、あるいは比較用の頑健な実装がほしいときに、対応する章が頼りになります。

本書の使い方

本書は、プログラムが書け(コードはC++)、微積分、線形代数、いくらかの確率を身につけていて、数値手法を選び、理解し、実装する必要がある学生や研究者に向いています。

実践的な進め方は次のとおりです。

  • 最初に: 誤差と安定性およびコーディングの約束事を扱う第1章、線形代数の第2章。
  • 必要に応じて参照: 補間・積分・関数の評価は第3〜5章、求根と最適化は第9章と第10章、固有値は第11章、常微分方程式は第17章。
  • データを扱う作業: 乱数、統計、モデリング、推論は第7、14、15、16章。信号は第12章と第13章。
  • 専門的な章: 境界値問題、逆問題、偏微分方程式、幾何、符号化のアルゴリズムが必要になったら第18〜22章。
  • 進め方: 手法を選ぶ前にその章の第0節の序論を読み、推奨されるルーチンを、テスト問題で自分の実装と比べます。