私は最終的に各積分はz=np.linspace(1e+9,0)
パイソン - 機能は、同じ次元アレイ
import numpy as np
import matplotlib.pyplab as plt
import scipy as sp
import scipy.integrate as integrate
z = np.linspace(1e+9, 0, 1000)
mass = 1000
Omega_m0 = 0.3
Omega_L0 = 0.7
h = 0.7
def FreeStreamLength(z, mass, Omega_m0, Omega_L0, h):
kb = 8.617e-5 ## kev K^-1
c = 3e+5 ## km/s
T0 = 2.7 ## K
T_uni = mass/kb
a = 1./(z+1.)
z_nr = T_uni/T0 - 1. ## redshift at non relativistic
a_nr = 1/(z_nr + 1.) ## scale factor at non relativistic
Omega_r0 = (4.2e-5)/h/h
a_eq = Omega_r0/Omega_m0
z_eq = 1/a_eq - 1
a1 = a[a <= a_nr] ## scale factor before particles become non-relativistic
a2 = a[a_nr <= a.all() <= a_eq]
a3 = a[a_eq <= a]
integrand = lambda x: 1./x/x/np.sqrt(Omega_m0/x/x/x + Omega_L0)
epoch_nr = [ c/H0 *integrate.quad(integrand, 0, i)[0] for i in a1]
epoch_nreq = [c/H0/a_nr * integrate.quad(integrand, a2, a_eq)[0] ]
epoch_eq = [c/H0/a_eq * integrate.quad(integrand, i, 1)[0] for i in a3]
return epoch_nr + epoch_nreq + epoch_eq
z
をa
通過べき配列の特定の部分を評価する場合に3つの複合積分をプロットしようとして生成しませんしたがって、これらの値は相互に関連している必要があります。
return
ラインでは、すべてのリストを組み合わせて、この新しい配列を作成しました。
FSL = FreeStreamLength(z, mass, Omega_m0, Omega_L0, h)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(z, FSL, color="blue", label=r"$z=0$")
plt.show()
私は私の新しいリストは、私が前に持っていたリストと一致していませんどのように来るValueError: x and y must have same first dimension
に戻っていますか?
私は、関数内で被積分関数を定義する前に、渡された配列から要素をどのように反復しているのかについて考える必要があります。
'T_uni'と' T0'が定義されていないのでスクリプトを実行できません – gsmafra
@gsmafraそれを残念にして、私はそれを引き起こしている無関係な部分を編集しました。だからもう一度試してみてください。 – DarthLazar
私は推測と修正を行わずにコードを実行することはできません! – hpaulj