替代gammainv()Excel函数?

时间:2013-11-15 13:00:22

标签: excel excel-vba vba

我相信我遇到了Excel 2007的gammainv函数的问题。对于输入参数的某些组合,它返回#NUM!错误。

gammainv函数返回伽马累积分布的倒数。

Syntax --> gammainv(probability,alpha,beta)

例如:

=gammainv(0.83,0.0977,25.849) '<-- gives this problem.

使用相同的alpha和beta,问题也出现在概率= 0.84和概率= 0.85但不会出现在0和1之间的所有其他0.01增量值。这是一个例子,问题也出现在其他概率组合中, alpha和beta。使用matlab的gaminv函数时,此示例可以正常工作。

我认为问题与此问题有关:http://support.microsoft.com/kb/215214

我的问题是否有解决此问题的方法。我对以下内容感兴趣:

  • Excel 2007中对此功能的一些修复
  • 执行相同操作的VBA函数,但没有问题。
  • 任何其他导致缩小问题的方法。
  • 任何可以帮助我评估实例的解决方法,如图所示。

1 个答案:

答案 0 :(得分:0)

简单地将函数包含在对IFERROR的调用中,如下所示:

=IFERROR(GAMMAINV(P,alpha,beta),GAMMAINV(P,alpha,beta))

问题是Excel的GAMMAINV AND GAMMA.INV函数使用迭代算法,终止是解决方案在一定数量的迭代中不收敛。 GAMMAINV必须在100 iterations内收敛,而GAMMA.INV必须在64 iterations内收敛。

对于小参数,算法收敛得更慢,因此具有更高的早期终止可能性,即具有#Num!值。幸运的是,通过在GAMMAINV的调用中将呼叫包裹到GAMMA.INV(或IFERROR),您可以指数级地降低不收敛的可能性。