gpt4 book ai didi

matlab - 在 Matlab 中使用 Pochhammer 符号

转载 作者:太空宇宙 更新时间:2023-11-03 20:13:00 24 4
gpt4 key购买 nike

我尝试使用一个脚本来评估 Pochhammer symbol (上升阶乘)在 Matlab 中,但它无法评估 pochhammer(x,n) 只要 x 是负数,即使表达式在 x< 时有效 是否定的(Wolfram Alpha 和 Mathematica 给出了 Pochhammer(-3,2) 的答案)。

任何人都可以帮助我让 pochhammer 在 Matlab 中处理否定参数吗?

最佳答案

我假设您指的是 this Pochhammer function .请注意,pochhammer(未大写)是 MuPAD 的一部分,这是一个单独的环境,可用于 Matlab 的 Symbolic Math Toolbox .您可以通过在 Matlab 命令窗口中键入 mupad 来访问 MuPAD。

但是,如果您像普通的 Matlab 用户一样,希望使用 Matlab 本身的 pochhammer 函数并使用它进行编程,则不能以正常方式从常规命令窗口或编辑器运行它,正如您发现的那样。相反,您必须使用

evalin(symengine,'pochhammer(-3,2)')

或更灵活的

feval(symengine,'pochhammer',-3,2)

参见 more here .它们都返回符号数作为结果,并且仅适用于标量输入。如果您需要 double 输出并具有矢量输入(仅适用于第二个输入,n),请使用

mfun('pochhammer',-3,-3:3)

这相当于使用 MuPAD 的 map函数,所以你也可以这样写:

feval(symengine,'map',sym(-3:3),'n->pochhammer(-3,n)')


但是,如果您根本不使用符号数学,则可能没有理由使用此函数而不是完全 double 的解决方案。 Pochhammer symbol简单地定义为两个 gamma 的比率功能,并且可以有效地实现为(xn 必须是相同的维度或标量 - 此外,xx-n 可以是小于或等于零的整数,其中 gamma function 是单数):

poch = @(x,n)gamma(x+n)./gamma(x);

如果 nx 是整数,您应该使用 round 来确保输出正好是整数。唯一的缺陷是,对于足够大的 x 和/或 n 值,这种天真的实现将溢出到 Inf(或 NaN)。在这些情况下,您需要做一些其他事情,例如使用符号版本(当转换回 double 时,它​​可能返回也可能不返回 Inf)。对于 n 的整数值(和标量 n>=0),可以使用如下内容

poch = @(x,n)prod(bsxfun(@plus,x(:),0:n-1),2);

请注意,即使对于整数,这也可能比 gamma 版本慢 20 倍。

关于matlab - 在 Matlab 中使用 Pochhammer 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18135186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com