我尝试使用在 Matlab 中评估Pochhammer 符号(上升阶乘)的脚本,但它无法评估pochhammer(x,n)
任何时候x
是负数,即使表达式在负数时有效x
(Wolfram Alpha 和 Mathematica 给出答案Pochhammer(-3,2)
)。
任何人都可以帮我pochhammer
在 Matlab 中工作以解决负面论点吗?
我尝试使用在 Matlab 中评估Pochhammer 符号(上升阶乘)的脚本,但它无法评估pochhammer(x,n)
任何时候x
是负数,即使表达式在负数时有效x
(Wolfram Alpha 和 Mathematica 给出答案Pochhammer(-3,2)
)。
任何人都可以帮我pochhammer
在 Matlab 中工作以解决负面论点吗?
我假设您指的是这个 Pochhammer 函数。请注意,pochhammer
(未大写)是MuPAD的一部分,它是 Matlab 的Symbolic Math Toolbox提供的单独环境。mupad
您可以通过在 Matlab 命令窗口中键入来访问 MuPAD 。
但是,如果像普通的 Matlab 用户一样,您希望使用pochhammer
Matlab 本身的函数并使用它进行编程,则您无法从常规命令窗口或编辑器以正常方式运行它,正如您所发现的那样。相反,您必须使用
evalin(symengine,'pochhammer(-3,2)')
或更灵活
feval(symengine,'pochhammer',-3,2)
在这里查看更多。它们都返回符号数字作为结果,并且仅适用于标量输入。如果您需要双精度输出并具有矢量输入(仅适用于第二个,n
)使用
mfun('pochhammer',-3,-3:3)
这相当于使用 MuPAD 的map
功能,所以你也可以这样写:
feval(symengine,'map',sym(-3:3),'n->pochhammer(-3,n)')
但是,如果您根本不使用符号数学,则可能没有理由使用此函数来代替完全双精度的解决方案。Pochhammer符号被简单地定义为两个gamma
函数的比率,并且可以有效地实现为(x
并且n
必须是相同的维度或标量 - 此外,既不是x
也x-n
不能是小于或等于零的整数,其中伽马函数是奇异的) :
poch = @(x,n)gamma(x+n)./gamma(x);
如果n
和x
是整数,您应该使用它round
来确保输出完全是整数。唯一的陷阱是,对于足够大的值x
和/或n
这种天真的实现将溢出到Inf
(或NaN
)。在这些情况下,您需要执行其他操作,例如使用符号版本(Inf
在转换回双精度时可能会或可能不会返回)。对于n
(和标量n>=0
)的整数值,可以使用以下内容
poch = @(x,n)prod(bsxfun(@plus,x(:),0:n-1),2);
请注意,即使对于整数,这也可能比gamma
版本慢 20 倍。
Matlab的数字命令pochhammer
(不是 MuPAD)是在 matlab 版本 R2014b 中引入的。