コンピュータ物理学2 第1回 (2015.10.2)

コンピュータ物理学2
第1回
(2015.10.2)
第1回
第2回
第3回
第4回
第5回
第6回
第7回
第8回
10/ 2(金) ガイダンス
10/ 9(金) 数値表現と誤差
10/16(金) “
10/23(金) 数値微分・積分
10/30(木) “
11/13(金) “
11/20(金) 常微分方程式
11/27(金)
“
第9回
第10回
第11回
第12回
第13回
第14回
第15回
第16回
12/ 4(金) “
12/11(金) 偏微分方程式
12/18(金) “
12/25(金) “
1/ 8(金) モンテカルロ法
1/ 22(金) 量子力学
1/ 29(金) “
2/ 5(金) “
吉見 彰洋
所属: 極限量子研究コア
(兼担:理学部/理学部付属量子宇宙センター)
Email: yoshimi@okayama‐u.ac.jp
居場所: 総合研究棟6F‐11区画
専門: 原子を使った素粒子(基礎)物理実験
原子核実験
https://www.xqw.okayama‐u.ac.jp/
コンピュータ物理学2について
コンピュータ物理学1(C言語のプログラミング、基本的な
コマンド操作)は理解しているとして…….
コンピュータ・プログラミングを理解した上で,物理や数
学の問題を解くための数値解法や数式処理の基礎を
学ぶ。
学習目標
・ 数値解析の基本的なアルゴリズムを理解して,物理や数学の諸問題
を解くために自分で使いこなせるようになることを目標とする。
・ 具体的な演習問題,たとえば,単振動等の力学問題,量子力学にお
ける波動方程式,電磁気学におけるポアッソン方程式等を取り扱う。
・ これらを解いて視覚化することにより,数値解析の理解を深める。
授業計画
数の表現
丸め誤差
第1回
第2回
第3回
第4回
第5回
第6回
第7回
第8回
第9回
第10回
第11回
第12回
第13回
第14回
第15回
第16回
予備日
10/ 2(金)
10/ 9(金)
10/16(金)
10/23(金)
10/30(金)
11/13(金)
11/20(金)
11/27(金)
12/ 4(金)
12/11(金)
12/18(金)
12/25(金)
1/ 8(金)
1/22(金)
1/29(金)
2/ 5(金)
2/12(金); ガイダンス(イントロ)
前進差分と中心差分
数値的な導関数
台形公式とシンプソン則
数値の表現と誤差
レポート No.1
数値微分・数値積分
レポート No.2
常微分方程式
線形・非線形微分方程式
オイラー法とルンゲ・クッタ法
レポート No.3
偏微分方程式
電磁気学のポアッソン方程式,ラプラス方程式
モンテカルロ法
..
量子力学;Shrodinger方程式
レポート No.4
エネルギー固有値問題
レポート No.5
授業の進め方
・ 基本的には実習形式 (実験に近い)
・ 学生同士で相談してもいい
・ web で検索するのも良い
・ 自分でプログラミングしていき、理解する
評価方法
出席点(30%)+レポート点(70%) で総合的に。
レポートは全5回。
レポートは完成度も大事だが、〆切前に提出すること。
・ 結果だけでなく、過程、考察をきちんと書く。
・ 内容を知らない人が読むことを前提で書く。
・ 参考文献がある場合は記す
注意点
・ PCの環境を変更したり、ソフトウェアをインストールしたり
しないこと。
・ 授業に関係のない使用はしないこと
・ プリンタを使って印刷したい人は紙を持参し、印刷物は
持ち帰る。
・ 飲食・喫煙・ゲーム・無関係なネットサーフィンは禁止。
授業に関することはどんどん調べてよし。
・ 終了後は Windows を終了させてPC電源が切れるのを
確認する。
参考書
『計算物理学 基礎編・応用編』
R.H.ランダウ 著 (小柳義夫 監訳) (朝倉書店)
¥4,800.
1. 序
2. 科学計算ソフトウェアの基礎
3. 数値計算の誤差と不確実さ
4. 積分
5. データ解析
6. 決定論的世界のランダム現象
7. モンテカルロ法の応用
8. 微分
9. 微分方程式と振動
10. 量子力学の固有値問題
11. 非調和振動
12. 非線形振動のフーリエ解析
13. 非線形の不思議なダイナミクス
14. 微分方程式とカオス
15. 行列の数値計算とサブルーチン・ライブラリー
16. 束縛状態、運動量空間での表現
17. 量子力学的散乱:積分方程式の解法
※ ポアソン方程式は「応用編」に。
どんなことをできるようにするか
常微分方程式の計算
y
2
d y (t )
  y 3 (t )
2
dt
vy
α
・解析的には解けない
・数値的な解法
クーロン力散乱問題等
偏微分方程式の計算
 2U ( x , y )  2U ( x , y )
 ( x, y )



y 2
x 2
0
コンデンサの
静電ポテンシャル
分布
vx
r
Au
x
モンテカルロ法
乱数を利用した数値計算
→
円周率の計算、高次元球の体積
→
多重積分
I   dx1  dx2   dx10  x1  x2   x10 
1
1
1
0
0
0
量子力学
井戸型ポテンシャル中に束縛された粒子の状態・
エネルギーの計算(原子のエネルギー準位)
 1000
 V
V ( x)   0
0
 x  500
 x  500
 500
500
1000
2
基本的に標準ソフト・フリーなものを使う
→ 自分の PC に同じ環境を無料で作れる
使うもの
UNIX システム (Windows 7 上で)
Cygwin: Windows 上で UNIX コマンドを使う
・ C プログラムソースのコンパイル
・ ファイル、ディレクトリの操作等
テキストエディタ
メモ帳(Windowsに標準搭載)
NoEditer (Windows 用高機能エディタ)
・ プログラムソースの作成
グラフ作成;
gnuplot または Excel
レポート作成; Word (興味のある人は TeX を使っても)
C/C++ 言語は未だ健在
Tiobe index (2015/9)
IEEE spectrum
プログラミング言語
人気ランキング
2015/
1: Java
2: C
3: C++
4: Python
5: C#
6: R
7: PHP
8: JavaScript
9: Ruby
10: Matlab
Cygwin について
・ Windows システム上で走る UNIX 環境
・ Windows が立ち上がったままPC再起動せずに UNIX 環境を使える
・ フリーソフトである: http://cygwin.com/ (本の付録CD等も)
Windows スタートボタン → 「すべてのプログラム」から 「Cygwin」 を選択
→ 「cygwin terminal」
この terminal 上で UNIX コマンドにより、作業を進めていく
・UNIX上で今どこのディレクトリにいるのかを把握する
Cygwin を立ち上げた直後は
今いるディレクトリを知るには: pwd
/cygdrive/z/cygwin_home
Windows のエクスプローラでも確認する
ディレクトリ構造
⇔
フォルダ構造(Windows)
例えば:
cygwin_home /
works /
computer_physics /
01‐Intro / file1, file2, …..
02‐number‐error / file1, file2, …..
atomic physics / file1, file2, …..
nuclear physics / file1, file2, …..
private /
music / file1, file2, …..
photo / file1, file2, …..
UNIXコマンド;簡単なものだけ
ls
今いるディレクトリにあるファイルを表示させる
mkdir aaa
ディレクトリ aaa を作る
cd aaa
ディレクトリ aaa に移動する
cd ..
1つ上のディレクトリに移動する
mv a.cc b.cc
ファイル名 a.cc を b.cc に変更する
mv a.cc aaa/
ファイル a.cc をディレクトリ aaa に移動する
cp a.cc b.cc
ファイル名 a.cc を b.cc にコピーする
cat a.cc more a.cc
less a.cc
ターミナル上でファイル a.cc の中身を表示させる
xemacs
UNIXのエディタ emacs を立ち上げる
C言語でのプログラミング/コンパイル
・ エディタでプログラムを各書く
#include <stdio.h> int main() {
printf("hello, world¥n"); return 0;
}
・ 適当な名前で保存する
(ここでは hello.cc
保存場所を気にすること)
・ プログラムをコンパイルして
実行形式のファイルを作る
c++ hello.cc –o hello
・ プログラムを実行する
./hello.exe
Gnuplot
・フリーソフト
・手軽に関数表示、データプロット
・コマンドライン上で複数のデータファイルを次々プロット
・3次元も手軽に。
Gnuplot 基本コマンド
(1) ディレクトリ移動等
現ディレクトリ確認 gnuplot> pwd
ディレクトリ移動 gnuplot > cd “../” 等 (“”内に移動先を記入)
(2) グラフプロット
関数をプロット
gnuplot > f(x) = x**2 – 3
gnuplot > plot f(x) gnuplot > plot [‐20:20] f(x) linewidth 2
データファイルをプロット
gnuplot > plot “***.dat” (“”内にデータファイル名を記入)
gnuplot> plot ‘***.dat’ with line (データ点を線でつなぐ, with linesplot 等も。)
gnuplot> plot ‘***.dat’ pt 7 ps 2 (データ点の見栄え設定; plot‐type, plot‐size)
gnuplot> replot ‘another**.dat’ (現時点でのグラフに新たに追加してプロット。)
(3) 細かな設定
gnuplot> set grid (grid を描く。解除は unset grid)
gnuplot> set tics font “Helvetica, 12“ (軸表示のフォント設定)
gnuplot> set xlabel “yokojiku” (軸キャプション)
gnuplot> set log y (y軸を対数表示。解除は unset log y)
(4) グラフの貼り付け
グラフウィンドウの左端のボタン “copy the plot to clipboard” をクリック
⇒ word 上等で ペースト。
2014年度コンピュータ物理2 履修者単位取得状況
プログラミングの復習・gnuplot練習も兼ねて
・今後のプログラム作成の参照元になる
Gauss分布関数を計算しましょう
f ( x) 

 x  m  
exp  

2
2
2

2


1
2
・ 平均値 m と 標準偏差 σ をキーボード入力したら
出力ファイルに100個の点での計算値を出力させる
・ 出力データファイル ”gauss.dat” を作る
・ 計算範囲は平均値 m から ±4σ の範囲
考え方: 計算すべき x の最小値 xmin、最大値 xmax を決める
→ x の刻み幅 dx を決める (データ点が 100個になるように)
→ x=xmin から初めて dx ごとに f(x) を計算して
→ ファイルに x と f(x) を書き出す (for 文で繰り返す)
→ 出力ファイルをグラフ化し、ガウス分布の数値データ
が出来上がっていることを確認する。
余裕があれば、全数値の積分がほぼ 1 になっていること
も確認する。
m
例えば m=95, σ=25 の計算を
したとすると:
‐5.000000, 0.000005 ‐3.000000, 0.000007 ‐1.000000, 0.000010 1.000000, 0.000014 3.000000, 0.000018 5.000000, 0.000024 ・
・
・
189.000000, 0.000014 191.000000, 0.000010 193.000000, 0.000007