我试过在Matlab中使用一个评估Pochhammer symbol(上升阶乘)的脚本,但是即使表达式pochhammer(x,n)
是负数,也无法评估x
在x
为负数时有效(Wolfram Alpha和Mathematica为Pochhammer(-3,2)
提供答案)。
任何人都可以帮助我在Matlab中使用pochhammer
进行否定参数吗?
答案 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
函数的比率,并且可以有效地实现,因为(x
和n
必须是相同的维度或标量 - 另外,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中引入的。