01 / 読書ガイド
読書ガイド
引用
Moler, C. B. (2008). Numerical Computing with MATLAB (revised reprint; electronic edition updated September 2013). Society for Industrial and Applied Mathematics. Free official edition: https://www.mathworks.com/moler/index_ncm.html
章の要約
第1章:MATLAB 入門
最初の章では、初歩的だが興味深い問題を探る小さなプログラムを通じて MATLAB を教える。黄金比、フィボナッチ数、ランダムなアフィン写像で描くフラクタルのシダ、魔方陣、簡単な暗号方式、3n + 1 数列である。章の最後には IEEE 浮動小数点演算――計算機イプシロン、丸め誤差、アンダーフロー、オーバーフロー――に関するまとまった節があり、序文は MATLAB の経験にかかわらずすべての読者がこれを学ぶべきだとしている。
第2章:連立一次方程式
MATLAB のバックスラッシュ演算子がガウスの消去法によって Ax = b をどう解くかを説明する章である。3×3 の例を通して計算を進め、置換行列と三角行列、LU 分解を導入し、部分ピボット選択がなぜ必要かを示し、ノルムと条件数を用いて丸め誤差の影響を解析する。後半の節では疎行列と帯行列を扱い、Google の PageRank を使ってマルコフ連鎖と大規模な疎な連立方程式を説明する。アルゴリズムの教科書版(lutx、bslashtx)と図示によるデモが本文に付属している。
第3章:補間
補間多項式と、点が多いときにそれが激しく振動することから出発して、区分的な方法に移る。区分線形補間、区分3次エルミート補間、形状を保つ「pchip」補間、3次スプラインである。後二者が同じデータでどう振る舞うかを比較し、教科書版の実装と対話的な補間デモを提供する。
第4章:零点と根
二分法、ニュートン法(わざと失敗するようにした「ひねくれた」例つき)、割線法、逆2次補間を順に導入し、それらを MATLAB の fzero の基盤である頑健なアルゴリズム「zeroin」に組み合わせる。関数が与えられた値をとる点を求める方法も扱い、最後に黄金分割探索と放物線補間による1次元の最小化(fmintx)で締めくくる。
第5章:最小二乗法
曲線のあてはめを動機として線形最小二乗法を導入し、アメリカの国勢調査データ(2010年分を含むよう更新)で例示する。ベクトルのノルム、ハウスホルダー変換、そして最小二乗問題を安定に解く方法としての QR 分解を導入し、さらに擬似逆行列、階数落ち、分離可能な非線形最小二乗法を論じる。
第6章:求積法
定積分の数値計算を、被積分関数の近似が難しいところに関数評価を集中させる適応型求積法を通じて示す。基本的な公式(中点則、台形則、シンプソン則)を導き、教科書版の適応型ルーチンで組み合わせる。続いて被積分関数の指定の仕方、性能、離散データの積分を論じる。
第7章:常微分方程式
初期値問題と連立系を設定した後、1段法を調べ、ボガツキ=シャンパインの BS23 アルゴリズムを教科書版のソルバー(ode23tx)として展開し、ローレンツ・アトラクターを含む例を扱う。硬さ(スティフネス)と硬い問題用のソルバーが必要な理由、イベントの検出、多段法、MATLAB の常微分方程式ソルバー群、誤差制御、性能を説明する。
第8章:フーリエ解析
プッシュホン電話のダイヤル方式を入り口に有限フーリエ変換を導入する。それを対話的に探り、太陽黒点のデータやその他の周期的な時系列を解析し、高速有限フーリエ変換のアルゴリズムを教科書版の実装とともに導き、FFT を他のフーリエ変換やフーリエ級数と関連づける。
第9章:乱数
計算機が生成する乱数がなぜ擬似乱数なのかを説明し、レーマーの線形合同法とその後の一様乱数生成法を紹介し、マルサリアのジッグラト法で正規分布に従う数を生成する。短い最後の節では、MATLAB の一様乱数生成に使われているメルセンヌ・ツイスタを説明する。
第10章:固有値と特異値
小さな例と対話的なデモ(eigshow)で固有値分解と特異値分解を導入する。特性多項式が計算手段として不適切な理由、対称行列とエルミート行列、計算された固有値と特異値の感度と精度、ジョルダン標準形とシューア標準形、QR アルゴリズムを論じる。応用として主成分分析と「円生成器」の例がある。
第11章:偏微分方程式
ラプラシアンを含む三つのモデル問題――ポアソン方程式、熱方程式、波動方程式――に限定して、差分法、その行列表現、数値安定性の条件を展開する。最後に L 字型膜の固有値を扱う。その第1固有関数は MathWorks のロゴのもとになっている。
主要概念
第1章:MATLAB 入門
- 浮動小数点演算:IEEE 規格に従う、有限個の2進数による計算。
- 計算機イプシロン:1 とその次に大きい浮動小数点数との差で、丸め誤差の大きさの目安となる。
第2章:連立一次方程式
- 部分ピボット選択つき LU 分解:行を入れ替えた行列を下三角行列と上三角行列の積で表すことで、バックスラッシュ演算子の基礎である。
- 条件数:データの相対誤差が解の中でどれだけ拡大されうるかを示す尺度。
- PageRank:ウェブのリンク構造で定まるマルコフ連鎖の定常分布。
第3章:補間
- 補間多項式:n 個のデータ点を通る次数 n 未満のただ一つの多項式で、激しく振動することがある。
- 形状保存3次補間(pchip):行き過ぎを避けるように傾きを選んだ区分3次エルミート補間。
- 3次スプライン:2階導関数が連続な区分3次関数で、pchip より滑らかだが行き過ぎが起こりうる。
第4章:零点と根
- ニュートン法:接線を用いる反復法で、単根の近くでは2次収束するが、大域的に収束するとは限らない。
- zeroin:二分法の確実さと、割線法および逆2次補間の速さを組み合わせた混合法。
第5章:最小二乗法
- 最小二乗あてはめ:残差の二乗和を最小にするようにモデルのパラメータを選ぶこと。
- ハウスホルダー変換による QR 分解:最小二乗問題を安定に解く直交分解。
- 擬似逆行列:最小ノルムの最小二乗解を与える一般化逆行列で、行列が階数落ちしているときに重要になる。
第6章:求積法
- 適応型求積法:局所的な誤差推定が許容値を満たすまで区間を再帰的に分割する方法。
- シンプソン則:2次式を正確に積分する基本公式で、誤差推定とともに適応型の方式で使われる。
第7章:常微分方程式
- 誤差推定つき1段法:BS23 のように、二つの次数を比較して刻み幅を選ぶルンゲ=クッタ型の方法。
- 硬さ(スティフネス):時間スケールが大きく異なる問題の性質で、陽的な方法にごく小さな刻み幅を強いる。
第8章:フーリエ解析
- 有限フーリエ変換:標本のベクトルを複素指数関数の組合せとして表す変換。
- FFT:長さが小さな素数の積に分解できるとき、有限フーリエ変換を高速に計算するアルゴリズム。
第9章:乱数
- 擬似乱数生成器:出力が乱数性の統計的検定に合格する決定的なアルゴリズム。
- ジッグラト法:長方形を積み重ねたものを用いて正規分布に従う数を高速に生成する方法。
第10章:固有値と特異値
- 特異値分解:任意の行列を直交因子と非負の特異値に分解すること。
- 固有値の感度:行列の摂動が固有値に与える影響で、非対称行列で最も大きくなる。
- QR アルゴリズム:QR 分解の繰り返しに基づく、固有値を計算する反復法。
第11章:偏微分方程式
- 差分法:格子上で導関数を近似し、偏微分方程式を行列の問題に変える方法。
- 数値安定性の条件:陽的な方式で、格子間隔に対する時間刻みに課される制限。
批判的分析
長所
- ソフトウェアが本文の一部になっている。 70を超える M ファイルからなる NCM コレクションには、対話的な図示デモと、MATLAB 自身の関数の「tx」教科書版(lutx、pchiptx、fzerotx、quadtx、ode23tx、ffttx など)が含まれる。説明と並べて短く読みやすい実装を読むことで、組み込みルーチンが何をしているか、どう修正すればよいかが正確にわかる。
- 情報に基づいた利用に焦点。 序文は、数学ソフトウェアを正しく使い、その限界を理解し、必要に応じて改変できるようになることを目標に掲げている。各章は精度と効率の観点で方法を比較する。たとえば pchip とスプライン、硬い問題と硬くない問題に対する MATLAB の常微分方程式ソルバーの比較である。
- 魅力的で現実的な例。 プッシュホンのダイヤル、太陽黒点の周期、国勢調査データ、PageRank、ローレンツ・アトラクター、L 字型膜が、アルゴリズムをなじみのある応用と結びつける。
- コードに基づく多くの演習。 序文によれば演習は200題を超え、その多くは NCM のプログラムの修正や拡張を求めるもので、定期的に計算機を使う授業に適している。
短所
- 理論と証明は軽い。 収束の結果や誤差の上界は非形式的に説明され、証明はほとんどないので、理論的な数値解析の教科書の代わりにはならない。
- MATLAB に結びついている。 コード、デモ、演習は MATLAB を用いており(一部の演習は Symbolic Toolbox や PDE Toolbox にも言及する)、Python や他の言語を使う学生は翻訳が必要である。また、インターフェースの細部の一部は2013年版のソフトウェアを反映している。
- ところどころ古い。 最新の更新は2013年なので、MATLAB の関数や性能に関する議論、いくつかの応用(たとえば PageRank の計算方法)はその時点のものである。
- 範囲は選択的。 序文は1学期を超える分量があることを認めているが、大規模な連立一次方程式の反復解法、1次元を超える数値最適化、有限要素法といった話題はほとんど、あるいはまったく扱われない。
本書で扱う応用
応用はすべての章にわたる。黄金比、フィボナッチ数、フラクタルのシダ、魔方陣、簡単な暗号(第1章)、PageRank とマルコフ連鎖(第2章)、アメリカの国勢調査データのあてはめ(第5章)、ローレンツ・アトラクターなどの常微分方程式の例(第7章)、プッシュホンのダイヤル、太陽黒点の周期性、周期的な時系列(第8章)、シミュレーションのための乱数生成(第9章)、主成分分析と円生成アルゴリズム(第10章)、そして熱の流れ、波動、MathWorks のロゴのもとになった振動する L 字型膜(第11章)である。
コースにおける位置づけ
Moler の本は Kong、Siauw、Bayen の Python Programming and Numerical Methods と並ぶ位置にある。どちらもソフトウェアを先に立てた入門書であるが、Python の本は数値計算法の前に分量の半分をプログラミングの教育に充てるのに対し、Moler はある程度のプログラミング経験を前提としてすぐにアルゴリズムに進み、ライブラリのルーチンがどう動くかをより深く扱う。言語で選ぶとよい。MATLAB を使う授業なら Moler、Python なら Kong らである。
Burden、Faires、Burden の Numerical Analysis と Süli と Mayers の An Introduction to Numerical Analysis は学部向けの教科書で、一般に誤差解析と証明を伴うより数学的な扱いとされる。Moler のアルゴリズムがなぜうまくいくのかを理解したい学生には、自然な併読書あるいは次の段階となる。Trefethen と Bau の Numerical Linear Algebra と Stoer と Bulirsch の Introduction to Numerical Analysis は大学院レベルの教科書である。LU、QR、固有値アルゴリズムを扱う Moler の第2・5・10章は、Trefethen と Bau への有益な準備となる。
本書の使い方
本書は数値計算法と技術計算の入門授業のために書かれている。序文は前提条件として、微積分、常微分方程式と行列へのある程度のなじみ、そしてある程度のプログラミング経験を挙げている。MATLAB の経験は必要ない。
始める前に本書のウェブサイトから NCM ファイルをインストールし、デモが登場するたびに実行するとよい。1.7節の浮動小数点演算は全員が読むべきである。著者は、最初のいくつかの章(連立一次方程式、補間、零点、最小二乗法、求積法、常微分方程式)を扱い、その後で関心に応じて最後の四つの章(フーリエ解析、乱数、固有値、偏微分方程式)から選ぶことを勧めている。「tx」プログラムを修正する演習に取り組み、その出力を MATLAB の組み込み関数と比較し、誤差の上界や収束の証明が必要なときにはコースのリストにあるより理論的なテキストを参照するとよい。
版と出典
本ガイドは、MathWorks のウェブサイトにある Numerical Computing with MATLAB の無料電子版(2013年9月の更新による章ごとのPDFで、SIAM 印刷版の2008年改訂増刷の内容を含む、https://www.mathworks.com/moler/index_ncm.html)に基づいている。序文(目的、前提条件、NCM ソフトウェア、授業についての助言、改訂履歴)、全11章の導入部とすべての節見出し、そしてより詳しく読んだ節――浮動小数点演算(1.7節)、PageRank(2.11節)、硬さ(7.9節)、ジッグラト法とツイスタ(第9章)、L 字型膜(11.5節)――と、演習の例を参照している。
