目前我正在試圖繪製它描述了宇宙學線性擾動增長不同的世界模型的函數創建多個地塊。我希望能夠將所有曲線放在同一組軸上,但是我很難設置它。的功能變化的變量對同一軸上
我的目標是繪製該功能d,相對於Z,但有不同的密度參數($ \ $歐米茄)多條曲線。
我已成功兩種解決方案但兩者都沒有完美的工作,首先是效率非常低(添加新的功能,每個組參數):
z = np.arange(0.0,10,0.1)
#density parameters
MOm = 1.0
MOv = 0.0
COm = 0.3
COv = 0.7
H0 = 70
def Mf(z):
A = (5/2)*MOm*(H0**2)
H = H0 * np.sqrt(MOm*((1+z)**3) + MOv)
return A * ((1+z)/(H**3))
def MF(z):
res = np.zeros_like(z)
for i,val in enumerate(z):
y,err = integrate.quad(Mf,val,np.inf)
res[i] = y
return res
def MD(z):
return (H0 * np.sqrt(MOm*((1+z)**3) + MOv)) * MF(z)
def Cf(z):
A = (5/2)*COm*(H0**2)
H = H0 * np.sqrt(COm*((1+z)**3) + COv)
return A * ((1+z)/(H**3))
def CF(z):
res = np.zeros_like(z)
for i,val in enumerate(z):
y,err = integrate.quad(Cf,val,np.inf)
res[i] = y
return res
def CD(z):
return (H0 * np.sqrt(COm*((1+z)**3) + COv)) * CF(z)
plt.plot(z,MD(z),label="Matter Dominated")
plt.plot(z,CD(z),label="Current Epoch")
所以我試圖使它具有更簡單的循環,但一直未能解決如何標籤添加到每個小區內環路:
Om = (1.0,0.3)
Ov = (0.0,0.7)
for param1,param2 in zip(Om,Ov):
def f(z):
A = (5/2)*param1*(H0**2)
H = H0 * np.sqrt(param1*((1+z)**3) + param2)
return A * ((1+z)/(H**3))
def F(z):
res = np.zeros_like(z)
for i,val in enumerate(z):
y,err = integrate.quad(f,val,np.inf)
res[i] = y
return res
def D(z):
return (H0 * np.sqrt(param1*((1+z)**3) + param2)) * F(z)
plt.plot(z,D(z))
可能有人請幫忙解釋一下這樣做的一個有效的方法?或者如何使用for循環在標籤上添加標籤。任何幫助將不勝感激。
你要什麼標籤? – Chuck
您的代碼無法運行 - 請提供您正在使用的模塊導入。 – Chuck