def schechter_cdf(m,A=1,beta=2,m0=100,mmin=10,mmax=None,npts=1e4):
"""
Return the CDF value of a given mass for a set mmin,mmax
mmax will default to 10 m0 if not specified
Analytic integral of the Schechter function:
http://www.wolframalpha.com/input/?i=integral%28x^-a+exp%28-x%2Fm%29+dx%29
"""
if mmax is None:
mmax = 10*m0
# integrate the CDF from the minimum to maximum
# undefined posint = -m0 * mmax**-beta * (mmax/m0)**beta * scipy.special.gammainc(1-beta, mmax/m0)
# undefined negint = -m0 * mmin**-beta * (mmin/m0)**beta * scipy.special.gammainc(1-beta, mmin/m0)
posint = -mmax**(1-beta) * scipy.special.expn(beta, mmax/m0)
negint = -mmin**(1-beta) * scipy.special.expn(beta, mmin/m0)
tot = posint-negint
# normalize by the integral
# undefined ret = (-m0 * m**-beta * (m/m0)**beta * scipy.special.gammainc(1-beta, m/m0)) / tot
ret = (-m**(1-beta) * scipy.special.expn(beta, m/m0) - negint)/ tot
return ret
评论列表
文章目录