我假设你指的是这个 Pochhammer 函数 http://www.mathworks.com/help/symbolic/mupad_ref/pochhammer.html。注意pochhammer
(不大写)是的一部分MuPAD http://www.mathworks.com/help/symbolic/index.html#mupad,这是一个与 Matlab 一起可用的独立环境符号数学工具箱 http://www.mathworks.com/help/symbolic/index.html。您可以通过键入来访问 MuPADmupad
在Matlab命令窗口中。
但是,如果像普通 Matlab 用户一样,您希望使用pochhammer
正如您所发现的,您无法从 Matlab 本身的函数并用它进行编程,您无法以正常方式从常规命令窗口或编辑器运行它。相反,您必须使用
evalin(symengine,'pochhammer(-3,2)')
或者更灵活的
feval(symengine,'pochhammer',-3,2)
See 更多这里 http://www.mathworks.com/help/symbolic/call-built-in-mupad-functions-from-the-matlab-command-window.html。它们都返回符号数字作为结果,并且仅适用于标量输入。如果您需要双精度输出并具有向量输入(仅适用于第二个,n
) use
mfun('pochhammer',-3,-3:3)
这相当于使用MuPAD的map http://www.mathworks.com/help/symbolic/mupad_ref/map.html函数,所以你也可以写:
feval(symengine,'map',sym(-3:3),'n->pochhammer(-3,n)')
但是,如果您根本不使用符号数学,则可能没有理由使用此函数而不是完全双精度解决方案。这波赫默符号 http://mathworld.wolfram.com/PochhammerSymbol.html简单地定义为两个的比率gamma http://www.mathworks.com/help/matlab/ref/gamma.html功能并可以有效地实现为(x
and n
必须具有相同的维度或标量 – 另外,两者都不是x
nor x-n
可以是小于或等于零的整数,其中伽玛函数 http://mathworld.wolfram.com/GammaFunction.html是单数):
poch = @(x,n)gamma(x+n)./gamma(x);
If n
and x
是你应该使用的整数round
以确保输出完全是整数。唯一的陷阱是对于足够大的值x
and/or n
这个幼稚的实现将溢出到Inf
(or NaN
)。在这些情况下,您需要执行其他操作,例如使用符号版本(可能会或可能不会返回Inf
当投射回双倍时)。对于整数值n
(和标量n>=0
),可以使用类似下面的内容
poch = @(x,n)prod(bsxfun(@plus,x(:),0:n-1),2);
请注意,即使对于整数,这也可能比gamma
版本。