宇宙年齢を求める
(知らない人には不親切な)理屈
宇宙論の教科書(Cosmological Physics, J. A. Peacock とか)に
って書いてあるのでであることを使えば,
とかって書き換えられますから.これをつまり,まで積分するとでる.
hubble parameter を使うと
はやりの宇宙論パラメータは
item | value |
---|---|
0.71 | |
0.73 | |
0.27 | |
0 |
なので宇宙の年齢は137億年と求まります.
実際に計算する
準備
まず scipy を使うので scipy をいれましょう.たぶん numpy もいるはずです.
せっかくなので scipy を使って積分してみたいと思います.まずは scipy.integrate.__doc__ を調べてみるといくつか積分法があります.どれを使うか考えるのも面倒なのでここでは quad (General purpose integration.) を使うことにします.でもやっぱり使い方が分からないので scipy.integrate.quad.__doc__ をプリントしてみます.どうやら quad(func,a,b) で
を計算できるようです.楽すぎ.試しに
#!/usr/bin/env python from scipy import integrate def f(x): return x**2 print integrate.quad(f,0,1)
とかってやると普通に (0.33333333333333337, 3.7007434154171887e-15) って出ます.二番目は精度でしょう.
本番
というわけでやり方が分かったのでやってみます.
#!/usr/bin/env python from scipy import integrate class cosmology(): def __init__(self,l=0.73,m=0.27,r=0,h=0.71): self.omegal=l self.omegam=m self.omegar=r self.h=h def dtda(self,a): return 9.78e9/self.h \ *(self.omegal+self.omegam/a**3+self.omegar/a**4 \ +(self.omegal+self.omegam+self.omegar-1)/a**2)**(-0.5)/a def age(self): return integrate.quad(self.dtda,0,1) if __name__=="__main__": myuniverse=cosmology() print myuniverse.age()
あとからいろいろ付け足せるように class にしました.