python function gamma_Python中使用Gamma函数的累积分布函数

我正在处理Schechter Luminosity功能,如下所示:

phi(L)dL = norm. Factor * (L/Lstar)^(a) * exp (L/Lstar) d(L/Lstar)

说,L / Lstar是l .

其累积分布函数的解析解由伽马函数给出:N =范数因子* Gamma(a 1,1) .

这是不完整的伽马函数,因为积分的极限是L到无穷大 .

现在,我试图在Python中绘制cdf . 我用了:

import scipy.special as ss

si= [ss.gammainc(a+1, l[i]) for i in a] #cdf

(其中l [I]是我用随机数制作的数组)

结果图总计为1,看起来像cdf . 但现在我想把它随机化 . 所以,而不是cdf = 1,我设置cdf =随机数(由Python统一生成 . )现在,如果我想绘制一个计数与L的直方图,随机采样,我需要反转伽玛函数 .

我的问题是: How do I invert the Gamma function in Python?

这就是我现在拥有的:

u= [random.uniform(0,1) for i in a]

l= [ss.gammaincinv(a+1, u[i]) for i in a]

plt.plot(l, u, '.')

plt.show()

plt.hist(l, bins=50,rwidth= 1.5,histtype='step', lw= 0.7, normed= True, range=(-0.5, 1))

plt.show()

编译器没有抱怨,但直方图是错误的形状 . 我认为cdf的随机采样直方图应该恢复PDF的形状 .

我究竟做错了什么?显然,scipy的不完整伽玛函数的版本是“正则化的”,这意味着它被完整的伽玛函数分割 . 因此,如果我将gammainc(1,u [I])* gamma(a 1)相乘,它仍然不起作用 .

轴是按比例缩放的 .

有什么建议?

结论:我需要通过随机抽样制作Schechter光度函数cdf的直方图 .

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值