【问题标题】:How to get Gamma function in Mathematica using Matlab如何使用 Matlab 在 Mathematica 中获取 Gamma 函数
【发布时间】:2014-08-11 07:27:58
【问题描述】:

在 Mathematica 中,Gamma[a, z] 指的是上不完全 Gamma 函数,而在 Matlab 中,gammainc(z, a) 指的是正则化的下不完全 Gamma 函数。我想知道如何使用 Matlab 获得 Mathematica 结果?在这个link中,解释了使用Mathematica获得相同Matlab结果的方法,但我找不到通过Matlab获得相同结果的策略。

【问题讨论】:

  • 嗨!这是 Matehmatica SE,关于 MATLAB 的问题是题外话。

标签: matlab function symbolic-math


【解决方案1】:

您有多种选择。除了@MarkMcClure 提供的版本

y = (1-gammainc(z,a)).*gamma(a)

您还可以使用附加参数直接获取上正则化 gamma 函数:

y = gammainc(z,a,'upper').*gamma(a)

请注意,参数的顺序与 Mathematica 函数的顺序相反。

以上是严格的数字函数,但 Mathematica 的 Gamma 以符号方式计算。您可以在符号工具箱中使用 Matlab 的igamma。请注意,此函数未进行正则化,并且使用与 Mathematica 函数相同的参数顺序 - 它与您发现的直接等效函数一样接近(但对于数值计算显然较慢):

syms a z;
y = igamma(a,z)

在旧版本的 Matlab 中,此功能可能无法直接使用。但是,您仍然可以通过以下方式访问MuPAD version

y = feval(symengine,'igamma',a,z)

或类似的东西

y = evalin(symengine,['igamma(' char(a) ',' char(z) ')'])

【讨论】:

    【解决方案2】:

    根据维基百科,

    因此,在 Mathematica 中您可能有

    Gamma[1, 2] // N
    

    在 Matlab 中你可以有

    gamma(1)-gammainc(2,1)
    

    两者都返回 0.135335

    【讨论】:

    • 仅供参考,正如 OP 所述,并且正如文档所表明的那样,Matlab 的 gammainc 是正则化的。输出恰好相等,因为gamma(1) == 1
    • @horchler 感谢您指出这一点。作为一名经验丰富的 Stackexchange 用户,我相信您知道小错误(例如缺失因子)通常是通过编辑处理的,而不是全新的答案。并不是说这里有很多兴趣; 9 小时后你唯一的支持来自我。 :)
    • 如果您认为我在回答中纠正了您,我深表歉意。如果你看一下它,你会发现我描述了 Matlab 用户可用的其他选项。我已经更新了我的答案。就个人而言,我更喜欢让作者更正某些数学/编码错误,并且只提交对重要拼写错误、断开链接等内容的编辑。是的,即使是 StackOverflow/Matlab 上的好问题/答案也经常得到零票。可悲的是,似乎在这里得到最多投票的是那些简短的简单的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多