next up previous
Next: 2 今日の講義 C++入門(1) Up: 計算天文学 II Previous: 計算天文学 II

Subsections


1 はじめに

この講義では、前学期の計算天文学 I の内容からもう少し発展した課題を扱 う。具体的には、一応以下のような内容をカバーするつもりである。

1.
偏微分方程式
ここでは、熱伝導等の拡散過程による時間発展を記述する放物型方程式、 定常解や固 有値問題を記述する楕円型方程式について、その数値的取り扱いの基礎を 学ぶ。

  1. 放物型方程式
  2. 陽解法と陰解法
  3. 精度と安定性
  4. モンテカルロ法
  5. 楕円型方程式と変分法

2.
常微分方程式とハミルトン系
常微分方程式を精度良く解くことは、天文シミュレーションにおいて非常 に重要な位置を占める。ここでは、主に高精度な解法について学ぶ。
  1. 高精度の解法概論
  2. 線形多段法
  3. 自動時間刻み調節
  4. シンプレクティック法と対称型解法

3.
最適化・解探索
一般に実験、観測では、結果をもっともよく表すモデルを見つけることが 必要になる。これは、数学的には最適化問題ということになる。
  1. 線形最適化
  2. 非線形最適化
  3. 確率的方法:シミュレーテッド・アニーリング

4.
非数値アルゴリズム
大規模なシミュレーションや観測データ処理では、数値計算の方法以外に 大量のデータをどのように扱い、必要なものをどうやって見つけるかといっ たことが問題になる。その基本はデータをある順番に並べかえたり、$n$番 目のものを見つけるといった処理となる。重力多体問題を例に、こ のような非数値アルゴリズムがどんな役にたつか考える。
  1. 基本的データ構造
  2. サーチ・ソート
  3. ツリー構造とその応用

週1の講義で本当にこれだけの内容を全部カバーするのはだい ぶ大変なので、まあ、ぼちぼちいきましょう。

1.1 なぜプログラミングの講義をするか?

なぜ天文学科の講義に「計算天文学」というものがあるかということにも少し 触れておこう。

普通に考えると、ここ何十年かの間に計算機が高度に発達し、理論や観測デー タの処理のために広範に使われるようになったために、計算天文学という名前 の講義でプログラミングを扱うようになったと思うであろう。でも、実はそう ではなくて、「計算天文学」という講義は天文学科では電子計算機が使われる ようになる前から存在していた(らしい)。

記録によると45年ほど前に「手回し計算機」というものを使った「計算天文 学」が行なわれていたそうである。

このように天文学では昔から数値計算が非常に重要であった。

特に、現代的な天文学研究の他のいろいろな学問分野にくらべた特殊性は、 「研究に出来合いのプログラムがほとんど使えない」ということにある。

これにはいろいろな理由があるが、例えば理論シミュレーションでは扱う現象 の空間スケール、密度、温度等の幅が非常に大きく、普通の日常的な対象を扱 う計算プログラムでは多くの場合にうまく扱えないこと、また、流体、重力、 radiation, 化学反応がカップルした複雑な現象を扱う必要があることなどが ある。

観測では、多くの場合に世界に1台しかない望遠鏡とか人工衛星からのデータ を扱うことになるために、どうしてもその装置のために特別な処理が必要にな る。また、天文学研究の重要な部分が「観測装置を作る」ことであり、そのた めには観測装置や観測自体のシミュレーションが非常に重要になってきている。

そういうわけで、天文学研究とプログラミングは非常に関係が深いものになっ ている。

1.2 使用言語

計算天文学 I では言語として Fortran を使ったことと思う。 Fortran は 1950年代に最初の版(Fortran I)が開発された極めて古い言語(実際上、最初 の計算機言語)であるが、Fortran 66, Fortran 77, Fortran 95 と3度に渡る 大きな仕様改訂(拡張)を経て、現在でも計算科学の広い分野で使われている。 特に、

は大体 Fortran 77 で書かれているので、指導教員とコミュニケートするため だけにでも Fortran の知識は必要である。

が、それでは、 Fortran だけ使っていればいいかというと、最近はそれでは すまなくなってきている。これにはまたいろいろな理由があるが、端的には、 天文の世界でも、新しく書かれるプログラムには多くの場合 C++ (場合によっ ては Java 等も)が使わ れるようになってきているからである。

C++ は、C言語をベースに1980年代にベル研で開発された比較的新しい言語で ある。C言語自体は、やはりベル研で1970年代に開発されたものであり、当初 は UNIX オペレーティングシステムの記述言語として普及した。さらに、1980 年代にはいってパーソナルコンピュータが普及すると、その OS (CP/M, MS-DOS, Windows)の上での主なプログラム開発言語として揺るぎない地位をし めるようになった。

そうなったのはどうしてかというのは、どうもよくわからないところもなくは ない。当時から C はあまり評判の良くない言語であり、それは C++ になって もあまり変わっていないからである。もっとも、どう評判が悪いかというのを 細かく見ていくと、結局、広くなんにでも使え、しかも計算機の能力を十分発 揮できるように作られているために、あまり見た目が良くないというのが大き い。見た目のわかりやすさというのは本当は重要だが、だからといってこの講 義であまり広く使われていない言語を使うというわけにもいかない。

C++ は、本当は C の上に「オブジェクト指向」というなんだか難しい理念を 実現するための言語だが、この講義ではそういうところにはあまり触れないで、 必要に応じて使っていくということにしたい。

1.3 講義資料のありか

http://grape.astron.s.u-tokyo.ac.jp/~makino/kougi/keisan_tenmongakuII/overall.html
にシラバス、配布資料があるので必要に応じて見ること。

1.4 参考書

ええと、C++ 自体の参考書はあまりに沢山あるのではっきりいってなにがいい のか僕にも良くわからない。 Web 上だと、とりあえず理物の院生の渡辺尚貴 さんの作っているページ

http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/
あたりから見ていくのがいいと思う。

本屋でいろいろみた限りでは 「初めての C++ 」塚越一雄、技術評論社 Software Technology Series 25 が説明が丁寧 で値段もあまり高価ではなくよいような気がする。 かなり分厚いが、スムーズに読めるように書かれているので私の講義では不足 しているところを補うのに使って欲しい。

本格的に C++ を使いこなすには、どうしても原典である B. Straustrup, The C++ programming language, 3rd edition, Addison-Wesley を見る必要がある(見てもよくわからなかったりするが)。

なお、 C++ の文法等自体についてはあんまりちゃんとは説明しないので、そ のつもりで。

問題に応じた参考書は別に指定していく。

1.5 評価

レポート である。一応、2回に1度程度課題を出すということにする。で、 原則として次の週には提出してもらう。いうまでもないが、全部提出しなけれ ば単位はつかない。

一応計算機の講義なので、手書きのレポートというのもちょっとそぐわないで あろう。したがって、Latex で書いて PS ファイルにしたものか、または HTML で出すということにする。 PS ファイル(あるいは pdf ファイル)になっ ていればどうしても Latex で作らないといけないということはないが、将来 のことを考えるとあまり Word とかそういうものではやらないほうがいいと思 う。

HTML で作りたい人は、自分のホームの下にどこかディレクトリをつくってそこ に置いておくこと。で、メイルで

makino@astron.s.u-tokyo.ac.jp

あてに、 Subject を、今日のものなら 「Report 10/18」として送ること。PS ファイルとかの場合でもこの方法でも構わない。(今日は課題はでない)

1.6 講義形式

基本的には、始めに少し説明して、あとは適当に計算機室で課題等をやっても らうということにする。説明は講義室を使う。


next up previous
Next: 2 今日の講義 C++入門(1) Up: 計算天文学 II Previous: 計算天文学 II
Jun Makino
平成18年10月2日