Python:如何为同一个函数创建多个不同变量的绘图?

2024-05-14 22:32:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在同一个图形上绘制不同世界模型的“增长因子”,但我正在努力寻找一种方法来实现,而不必为每个变量定义不同的函数。在

这是我目前的代码,它确实产生了我想要的情节,但这是一个非常冗长的方法。在

注意:我已经为我想使用的变量(Om和Ov)加上M或V作为前缀,以及Lambda控制的版本。在

import numpy as np
import matplotlib.pyplot as plt

#redshift 
z = np.linspace(0,20,1001)

#Cosmo Density Parameters
#Matter Dominated Universe
MOm = 0.9995
MOv = 0.0005

def MDfunc(z,MOm,MOv):
    A = 5/2
    B = MOm/(1+z)
    C = MOm**(4/7) - MOv
    D = (1-MOm/2)*(1+MOv/70)
    E = A * ( B / ( C+D ) )
    return E

MD = MDfunc(z,MOm,MOv)


#Current Epoch
Om = 0.3
Ov = 0.7

def Dfunc(z,Om,Ov):
    A = 5/2
    B = Om/(1+z)
    C = Om**(4/7) - Ov
    D = (1-Om/2)*(1+Ov/70)
    E = A * ( B / ( C+D ) )
    return E

D = Dfunc(z,Om,Ov)


#Lambda Dominated
VOm = 0.0005
VOv = 0.9995

def VDfunc(z,VOm,VOv):
    A = 5/2
    B = VOm/(1+z)
    C = VOm**(4/7) - VOv
    D = (1-VOm/2)*(1+VOv/70)
    E = A * ( B / ( C+D ) )
    return E

VD = VDfunc(z,VOm,VOv)


#Growth Factor - D+
plt.figure(num=1)
plt.plot(z,D,'r',lw=2,label='Current Epoch')
plt.plot(z,MD,'g',lw=2,label='Matter Dominated')
plt.plot(z,VD,'b',lw=2,label='Lambda Dominated')
plt.legend(loc=0)

理想情况下,我希望能够将不同的宇宙参数作为一个数组或元组,但是遇到了错误。像这样的东西是理想的:

^{pr2}$

但我不知道如何实施。在

任何帮助都将不胜感激,谢谢。在


Tags: 方法lambdareturnplotdefpltlabelov
1条回答
网友
1楼 · 发布于 2024-05-14 22:32:10

你是从python开始的吗?在

据我所知,你想这样做:

Om = (1.0, 0.3, 0.0)
Ov = (0.0, 0.7, 1.0)

def Dfunc(z,Om,Ov):
    A = 5/2
    B = Om/(1+z)
    C = Om**(4/7) - Ov
    D = (1-Om/2)*(1+Ov/70)
    E = A * ( B / ( C+D ) )
    return E

d = []
z = 12  # use magic value here
for om, ov in zip(Om, Ov):
    result = Dfunc(z, om, ov)
    print("Calculating Dfunc for: z={}, om={}, oz={}; output is: {}".format(
        z, om, ov, result
    ))
    d.append(result)

print(d)

这将输出:

^{pr2}$

我说得对吗?在

相关问题 更多 >

    热门问题