なぜこの記事を書いたか?
Twitterのタイムラインに数値計算云々という話が流れており,Twitterでお気持ち表明しても意味ないので文章に残そうと思った.
自己紹介
学年:博士課程1年の大学院生
専攻:物理学(素粒子・ハドロンの基礎理論)
遍歴
あくまで個人遍歴の紹介であることを念頭に置いて読んでください.こうすればよいとかこうするべきとかそういう意図の記事ではないです.
-
学部1年
1年の後期,理論系の先生(A先生と呼びます)の部屋に突撃し「数値計算したいです.何かないですか?」と頼みに行きました.このとき2+1次元の偏微分方程式を解く数値計算コードを譲ってもらい「自分でいじってみな」と言われました.これをきっかけにC言語+数値計算の勉強を始めました.この時点では,数値計算の経験はゼロです. -
学部2年
学部の講義と並行してA先生からもらったコードをいじって計算してました.また,講義でルンゲクッタ法とかを学びはじめたので,いろんな方程式を片っ端から数値的に解いて遊んでいました(いろんな力による古典運動方程式,惑星の運動方程式,拡散方程式,移流拡散方程式,レーンエムデン方程式,etc.). -
学部3年
A先生からもらったコードを自分で改良していろいろ試していました.並行して数値積分(Simpson法),非線形最適化手法(Levenberg-Marqardt法)をC言語で実装して遊んでいました. -
学部4年
卒業研究はA先生の研究室に進みました.コロナが始まったので研究室の活動もなく,家で「Numerical Recipes in C」を片っ端から実装して遊んでいました.このときに数値的な高速フーリエ変換とかも勉強しました. -
修士1年
外部の院に進み,心機一転,新しい言語(Julia言語)を勉強し始めました.研究テーマ的にモンテカルロ法を扱う必要があったのでこちらも勉強しました.このときMCMCの勉強を始めました.現在はそれを使って数値シミュレーションをしてます. -
修士2年
特に新しい計算手法に手を出していませんが,読みやすいコードの書き方などを書籍を読んで勉強しました.大学院の講義でPythonを使った機械学習をかじりました. -
博士1年(現在)
現在は修士のときに書いたシミュレーションコードで得られた計算結果の解析をしています.
数値計算を始めるにあたり重要だと思うこと
振り返ってみて,数値計算を学んでいくにあたり重要と思うのは以下の点です.
- 一番最初のハードルをいかして下げるか
- 小さい目標を自分で設定してクリアしていけるか
- 困ったときに相談できる存在がいるか
1.をなすハードルは「数値計算を実際に行うパソコン環境の構築」と「数値計算を行う言語に対する知識」という2つの要因に分けられます.前者は自分の周りで数値計算をやっている人を頼ることで解決できる可能性が高いです.後者は初歩の初歩のような入門書を買って「読む」のではなく「実際にコードを書く」ことで解決できるように思います.
2.ですが,初めから「超大型スパコンでガンガン格子QCDシミュレーション回すぞ!!!」なんて意気込んでいたら挫折するに決まってます(これができるような天才はブラウザバックしてもらって,,,).古典力学の運動方程式,量子力学の1次元シュレーディンガー方程式,2次元の拡散方程式,など簡単な問題を解いて達成感を得ることが重要です.数値計算の習得はこの積み重ねだと思います.小さい問題を設定し,それを積み重ねるのが良いと自分は思います.
3.はどのような物事を修得する場合でも重要です.数値計算においてももちろん重要です.研究室の先輩などに気軽に聞ける人がいればよいですが,Twitterに適当に質問しても誰かが返してくれると思います.ただ,この質問をするときに,自分は~~がしたくて,~~のように考えて,~~という実装をしたが,~~という結果になっていて困っている,というレベルで具体的に質問する方が,的確な回答をもらえる可能性が高いです.
まとめ
見ての通り自分はかなり長い時間を数値計算に費やしてきました.数値計算はパッと始めちゃうのがよいと思います.困ったときは誰かを頼ればいいし,誰かが助けてくれます.
何か質問や困りごとがあったとき,連絡いただければ力になれるかもしれません.人は頼りましょう.