- 戸川 隼人, 1976: 数値解析とシミュレーション (共立全書 211 ΣΤΑΜΠ)。共立出版, 141+iii pp.
1990年代、同僚がこの本を学生に勧めていた。その人は、フィールド地球科学をやっていたが、この本を読んで計算機も使おうと思ったのだそうだ。
わたしはこの本をまだ読んでいなかったが、著者名は知っていた。わたしが店頭で内容を見て選んだ本がこの著者の著書だったことが何度もあった。その多くは、数値計算方法(本書でいう「数値解析の第1の意味」)の実用的教科書だった。「数値計算技法」「微分方程式の数値計算」「マトリクスの数値計算」などの書名を覚えている。とくべき問題に対して、複数の手法を提示し、精度や計算量(計算時間)・必要記憶容量などで手法の長所短所を比較していた。ソースプログラムそのものではないがそれにおきかえやすい形でアルゴリズムを示していた。また、「計算機のための誤差解析の基礎」など、近似のよさを数学的に評価する、本書でいう「数値解析の第2の意味」の本もあった。1990年代当時の新しい著書には、数値計算方法の教科書もあったが、Fortran, Cをはじめとするいろいろなプログラム言語によるプログラミング入門書をいくつも出していた。
1990年代に、この本は店になかったが(注文すれば買えたかどうかは知らない)、図書館で借りて読んだ。たしかにおもしろい本だった。ただし、技法の教科書としては、多くの項目をつめこみすぎで、各項目の記述が短く、理解するのにはほかの本も読まないといけないかもしれない。発想の本としても具体例がおもしろいのは初めのほうだけかもしれない。しかし、力学と電気など物理学的には違うが数学的には同じ問題があるという指摘は有意義だろう。
プログラム例の提示のしかたがうまいと思った。変な入力への対応などの配慮が乏しいのでそのまま実用になるかは疑問だが、最小限に近い行数で、動くプログラムを示していることが多い。著者はかつて個人ウェブサイトで著書の関連情報を提供しており、本書のページ http://nyan11.ciao.jp/B/NA/KZ211/ にはソースプログラムもあったと思う。しかしそのウェブサイトはもうなく、web.archive.org にはそのサイトのページがいくつかあるものの本書のページは見あたらない。
ただし、本書のプログラム例は、Fortranなのだが、言語仕様が 1960年代当時 FORTRAN IV,のちにFortran 66と呼ばれたものだ。わたしは、1990年代の教材としてこれではスタイルが古すぎると思ったので、Fortran 77 に DO … END DOを加えた構文で書きなおしてみた。[このウェブページ]にアクセス制限つきで置いてある。
2000年代になって、物質・エネルギー循環系でもありフィードバックシステムでもあるシステムの例としての、いわゆる「ふろおけモデル」[教材ページ]を説明しようとして、この本の最初の具体例がそれと同じものだったのを思い出した。3.1節のもので、「水時計」とされている。たまった水の質量と水位の関係と、水位と流出速度の関係を、いずれも任意の関数形として問題を定式化したあと、単純に比例する場合に限定してプログラムを提示している。この提示のしかたはうまいと思った。
ここまでわたし個人の本書との出会いを書いてしまったが、ここから本書に即して書いてみる。
あとがきで説明されているが、本書は共立出版から出ていた雑誌「bit」の1974年3月号から1975年2月号まで連載された「数値計算のフィロソフィー」という記事をもとにしている。ただし単行本にまとめなおすときに、プログラム例(日立製作所主催の講習会用に作成したもの)を加えたかわりに、「肩のこらないおもしろい話や「フィロソフィー」は影が薄くなった」そうだ。
本書の趣旨はまえがきにも説明されているが、2.1節「数値解析とは何か」のほうが明確だと思う。「数値解析」ということばは、だいたい次の3つの意味で使われてきた。
- 1. 計算機を使った数値計算で(応用)数学的問題の答えを得る方法
- 2. 数値計算に関する数学的理論、数値計算を題材とした解析学
- 3. (解析的方法に対して)数値的方法、シミュレーション(数値実験)
従来の数値解析の本は第1主題が多いのだが、本書では、第3主題を中心に、第1、第2を加味した。
著者は「計算機は「数学のあとしまつをする機械」ではない。実験の道具として使え!」という主張をもっている。ここでいう「実験」と「シミュレーション」とは同じ意味で使われているようだ。本書では、工学・理学の現場で現われる問題をとりあげ、プログラムを作り、計算機にかけてみる、というスタイルをとった。(読者からみると、第3章はそうなっているが、第4章以後は(おそらく連載記事はそうだったのだろうがプログラム例をふやした結果)「第1主題」の本に近づいてしまったと思う。)
第1章「計算機入門」。1.1節「計算機」では、小石、算木、ソロバン、パスカルの計算器、バベジの自動計算機、リレー(継電器)計算機、そして、電子計算機という歴史をたどる。電子計算機が広く使われるようになったのはアメリカで1955年ごろ、日本で1960年ごろだった。Fortranでプログラムを書いて計算センターにもっていくというスタイルが普及したのはアメリカで1960年ごろ、日本で1965年ごろだ (これを「ごく最近」と言っている。そのころに書かれた講習会教材の文章なのだろう)。1.2節「FORTRAN」ではプログラム言語Fortranが紹介される(文法の要約は巻末の付録3)。1.3節は「アルゴリズム」。
第2章「数値解析とシミュレーション」。2.1節についてはすでに述べた。2.2「シミュレーションとは何か」で具体的に取り上げられているのは地球物理の流体(大気・海洋・陸水)の話題だ。
まず、大西 行雄さん(京都大学 地球物理学教室。もとは数学を学んだ人だそうだ)による、琵琶湖の水温が急激に変わった現象を、湖面が風を受けたことによる「静振」で説明するシミュレーションの話。琵琶湖の断面を格子状に細分し、格子点における水圧、密度、流速などを未知数とする方程式をたて、振動解を仮定して解く。Computation and Analysis [Analysitとあるが誤植だろう] vol. 5 no. 1 (1973)に論文が出ているそうだ。
それから「黒潮のシミュレーション」の話があるが、途中から、「プリンストンのブライアンと真鍋の研究」(海洋大循環のシミュレーション)の話になっている。
そして気象のシミュレーションの話になる。Richardson (1922年)の本について「実用にならなかったが、当時の気象学者に夢と希望を与えた。」と言う。また脚注に
そればかりでなく、当時リチャードソンが考察した計算技法の数々は、今日でも広く使われている。特に、リチャードソンの補外と呼ばれる方法は、微分方程式の数値解の精度改善にきわめて有効である。
とある。それから次のように語っている。
1945年、計算機が誕生すると、気象学者たちは早速、大気の運動方程式の計算を試みた。… 解が非常に不安定で、異常に振動したり発散したりしてしまう。物理学者たちはここで、「単純な考えで構成した近似解法が100%成功するとは限らない」という教訓を得た。一方、数学者たちは、ここに新しい問題の宝庫を見出した。J. フォン・ノイマンをはじめとする数学者たちによって、計算が脱線する原因が解明され、安定性の理論が作られ、安定性が強くしかも効率のよい解法が続々と考案された。こうして、1955年ごろには、大気の運動がまともに計算できるようになったけれど、なんとそれまでに10年間を要しているのである。
大西さんの仕事以外の気象・海洋のシミュレーションについての参考文献は示されておらず、著者がどんな情報源によったかはわからない。
ここまではお話で、ここからが実習教材になる。
第3章「伝導、拡散のシミュレーション」。
3.1節はすでにふれた「水時計」。数値解法の考えかたを、まず次のように述べている。(細かいことだが、「Δt秒」という表現があり、次元のついた物理量と数値との区別があいまいだと思った。)
- 微小時間 Δt の間の変化に注目する
- その間の「自分自身への影響」は無視する [このように処理しても、Δtを十分に小さくとるならば十分に精度のよい結果が期待できる]
- まず「最初の状態」をもとにして、「そのΔt秒後の状態」を計算し、それをもとに「さらにそのΔt秒後の状態」を計算し、以下同様に計算を進める
次に、アルゴリズムの説明がある。【プログラム言語ではないのだが「GO TO i」という表現があり、これは(くりかえし回数の決まったDO文以外のループ構文がなかった) Fortran 66の話者らしい表現だと思った。】
演習3.2(図3.8)は、図3.2を見ると、水槽が2段直列になっていて、上の水槽の下の出口から出た水が下の水槽にはいる構造になっている。これは、水文学での流出過程(雨から川の水になるまで)の「タンクモデル」の基本構造そのものだ。ただ残念ながら、本文に図への参照以外の説明がないので、演習を実際にやってみようと思った読者以外には印象に残らないだろう。
3.2節以後、複数の水槽をつなぐ管があって相互に水が移動するような問題を想定しながら話が進むのだが、現実の水の問題との関連は薄くなっていく。
ひとつは、同じ「水槽」がたくさんならんでいる状況から、連続体の問題(の離散近似)の話になる。熱伝導、電気伝導、溶質の拡散などが同じ形になる。3.3節で1次元の問題、3.5節で2次元の問題を扱っている。
もうひとつは、「水槽」どうしの任意の対の相互作用があったりなかったりする状況で、相互作用はマトリクス[注]で表現される。「水槽」の問題としては現実的でないが、コンデンサと抵抗からなる電気回路の問題としては現実的なものらしい。
- [注] 本書では「行列」でなく「マトリクス」という用語を使っている。(「行列」は「待ち行列」を思わせるから避けたのだろうか?) ただし「行列式」は出てくることがある。
3.6節「不安定現象とその対策」は、伝導・拡散型の問題について、Δtをじゅうぶん小さくとらないと、単に精度が悪いだけでなく、数値的不安定を起こす(振動の振幅が無限に増大してゆく)という話。Δtをどのようにとれば安定かという理論的解析の紹介と、台形公式を使う方法の紹介。(ここで連立方程式をとくことから、消去法と反復法、反復法のうち「ガウス・ザイデル法」と「SOR法」ということばが出てくるが、その実質的説明は第4章にある。)
第4章「平衡状態の計算法」。時間変化のあるシステムのシミュレーションでも、定常状態が知りたいことがある。この章は現象のシミュレーションの例は最初だけで、しかもあまり現実みがない。ほとんど計算技術の話。連立1次方程式をとく。それを利用して、偏微分方程式(ポアソン方程式)の境界値問題を差分法でとく。
【わたしが勉強した1970年代後半から1980年代前半は、連立方程式のときかたは、教科書にはどちらかというと反復(逐次近似)法が重視されていたが、大型計算機を使う人のあいだでは直接法である消去法が勧められていた。メモリー容量が従来よりも大きくなったことによる時代の変わりめだったのだろう。同時期にもパソコンでやろうとすると反復法が必要なこともあった。】
第5章「振動の問題」。振動の例は、(重力のもとでの)管の中の流体、バネ、コイルとコンデンサのある電気回路など。
まず、単振動になる問題。時間に関する2階微分(位置に対して加速度)を含む微分方程式になる。
次に、多自由度の問題。例としては複数の質点がバネで連結されているもの。マトリクス表現する。
それから、連続体にもっていく。振動が空間的に伝わる波動の問題。まず時間発展をすなおにシミュレーションする。プログラム例では、文字を打つプリンタでできる範囲でがんばったグラフ表現もしている。
サイン・コサイン(あるいは複素数の指数関数)型の解を想定すると、固有値問題になる。固有値を得る計算は専門家が書いた「ライブラリー・サブルーチン」(これは本書が出たころの計算機センターで通じた表現)に頼ればよいが、説明しやすい方法として、反復法のひとつのヤコビ法を紹介している。
(固有値問題の話題の途中にはさまれて、それとの関連が明示されていないが) 高次代数方程式の解きかたの話もあり、ベアストウ法が紹介されている。
第6章。章の題名は「有限要素法」だが、6.1節「近似式の作りかた」は有限要素法に関心のない人にも有意義だ。正確に計算できない関数の近似値を得るにはどうするか。テイラー展開を適当な次数で打ち切って使う方法もあるが、展開の中心付近と離れたところで精度がちがうという難点がある。精度がほぼ一定の近似式をつくることを考えたほうがよい。近似式を、基底関数の重みつき合計で表現し、重みの値を決定する、という問題にする。決定の基準には次のものがある。
- いくつかの点で合わせる (選点法)
- 残差の2乗和を最小にする (最小2乗法)
- 重みつき残差が最小になるようにする
区分多項式も出てくるが、「スプライン関数」ということばは出てこない。同じ著者の別の本では出てきたという記憶があるのだが、使うならば本来のsplineとは意味がずれていることも言うべきで、長くなるので避けたのかもしれない。
6.2節から、偏微分方程式の近似解法の話になる。(わたしは有限要素法を使わないので、ここはしっかり読んでいないのだが) やはり、選点法、最小2乗法があり、重みつき残差の積分が0になるようにする方法が「ガレルキン法」、「エネルギー原理」がなりたつ問題で「全ポテンシャルエネルギー」を最小にする方法が「レイレイ・リッツ法」と呼ばれている。ただし、実際の問題で、レイレイ・リッツ法で式をたてると、ガレルキン法と同様になるそうだ。
折り返しのあとに詳しい目次をつける。
Continue reading