概要
「まえがき」より引用する。
本書では,いろいろな分野で利用される数値計算法のアルゴリズムについて,それらの基本的手法についての説明を行っている.(中略)本書が,これから数値計算法を勉強しようとする読者の一助になれば幸いである.
感想
各種数値計算法について、解説とともに C 言語によるプログラムのリストが掲載されている。これらのプログラムが現在でも稼働するか、検証した。環境は Windows 11 の WSL2-Ubuntu 22.04 で動作する、 gcc 11.4.0 を用いた。
連立1次方程式
3章は連立1次方程式である。 pp.171-173 にある [3章] (1) の解答となっているプログラムを見た。このままでも正常に動作するが、下記の点を直すべきだろう。
- main 関数の変数宣言に temp と j があるが、これらはどちらも使っていないので削除できる。
- exit 関数が使われるので #include <stdlib.h> をヘッダーに入れるのが望ましい。
結果は次のように表示される。
x[0] = 1.000000 x[1] = -2.000000 x[2] = 3.000000
固有値問題
4章は固有値問題である。4.4 節では QR 分解による固有値計算を扱っている。QR 分解は行列 `A` を 直交行列 `Q` と 上三角行列 `R` の積に分解する手法であるが、 本書では、`A` を正方行列に限定している。一般には、QR 分解で分解される行列 `A` は `m times n` 行列でよい( `m gt n`)のだが、行列の固有値を求める QR 法で使われるので正方行列に絞ったのだろう。
DFT と FFT
7章は時系列データの周波数解析である。周波数解析といえばまず高速フーリエ変換(FFT) があって、それから自己回帰モデルがあるのが通例だが、本書では自己回帰モデルは扱われていない。 章末の問題は、FFT のプログラミングではなく、離散的フーリエ変換(DFT)のプログラミングであった。巻末にある、問題への解答を見ると、円周率の PI を独自に定義していた。 実際には、円周率を独自に定義せず、math.h に定義済の M_PI を用いるのがいいと思う。
数理計画法
10 章は数理計画法である。p.129 にある章末問題は1問のみで次の通りだ。
最急降下法を用いてつぎの非線形関数の最小値とそのときの `x_1, x_2` の値を求めるプログラムを作成せよ。ただし,初期値を `(x_1, x_2) = (0.0, 0.0)` とする。 また,ステップ幅は `alpha = 0.1` で固定とする。
pp.186-187 にある [10章] (1) の解答となっているプログラムを実行した。このままでも正常に動作するが、下記の点を直すべきだろう。
- main 関数の変数宣言に j があるが、これは使っていないので削除できる。
- sqrt 関数が使われるので #include <math.h> をヘッダーに入れるのが望ましい。
結果は次のように表示される。ただし、最初の5回と最後の5回のみを掲げた。反復回数は 100 回である。
x1=0.400000, x2=0.000000 x1=0.640000, x2=0.160000 x1=0.848000, x2=0.288000 x1=1.024000, x2=0.396800 x1=1.173120, x2=0.488960 (中略) x1=1.990597, x2=0.994189 x1=1.992034, x2=0.995077 x1=1.993251, x2=0.995829 x1=1.994282, x2=0.996466 x1=1.995156, x2=0.997006
真値は `(x_1, x_2) = (2, 1)` であるから収束は非常に遅い。したがって、収束を速めるためには、本書 10.2 節で説明されている共役勾配法を使うなど、他の方法を適用すべきだろう。
モンテカルロ法
13章はモンテカルロ法である。[13章] (1) の解答となっているプログラムを実行した。このままでも正常に動作するが、下記の点を直すべきだろう。
- 円周率 PI を自前で定義しているが、自前で定義する代わりに math.h にある M_PI を使うのが精度が高いこともあり、好ましい。
- 試行の回数をカウントする変数 i が複数の場所で定義されているので反復がつかみにくい。while 文を使う代わりに for 文を使って、for(i = 1; i <= N; i++) とするのがいい。 さらにいえば、for(i = 0; i < N; i++) のほうがさらにいいと思う。
文献
本書の参考文献(p.167)には 14 冊の文献が列挙されている。このなかで私が読んだことがあるのは次の本である。
誤植
p.129 上から9行目、評価関数を逆符合にして
とあるが、《評価関数を逆符号にして》が正しい。
数式表示
数式表現はMathJax4 を用いている。
書誌情報
| 書名 | 数値計算法基礎 |
| 著者 | 田中敏幸 |
| 発行日 | 2006 年 4 月 6 日 初版第1刷 |
| 発行元 | コロナ社 |
| 定価 | 2400 円 (税別) |
| サイズ | |
| ISBN | 4-339-06078-X |
| NDC | |
| その他 | 草加市立図書館で借りて読む |