在Matlab中使用Pochhammer符号

时间:2013-08-08 19:41:50

标签: matlab math symbolic-math mupad

我试过在Matlab中使用一个评估Pochhammer symbol(上升阶乘)的脚本,但是即使表达式pochhammer(x,n)是负数,也无法评估xx为负数时有效(Wolfram Alpha和Mathematica为Pochhammer(-3,2)提供答案)。

任何人都可以帮助我在Matlab中使用pochhammer进行否定参数吗?

2 个答案:

答案 0 :(得分:8)

我认为你指的是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。这些都返回符号数字作为结果,仅适用于标量输入。如果您需要双精度输出并具有矢量输入(仅适用于第二个,n),请使用

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

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

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


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

x-n

如果poch = @(x,n)gamma(x+n)./gamma(x); n是整数,则应使用x来确保输出完全是整数。唯一的缺陷是,对于round和/或x足够大的值,这种天真的实现将溢出到n(或Inf)。在这些情况下,您需要执行其他操作,例如使用符号版本(在转换为double时可能会返回NaN,也可能不会返回Inf)。对于n(和标量n>=0)的整数值,可以使用以下内容

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

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

答案 1 :(得分:1)

Matlab(非MuPAD)的数字命令pochhammer是在matlab版本R2014b中引入的。