Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Matlab中使用Pochhammer符号_Matlab_Math_Symbolic Math_Mupad - Fatal编程技术网

在Matlab中使用Pochhammer符号

在Matlab中使用Pochhammer符号,matlab,math,symbolic-math,mupad,Matlab,Math,Symbolic Math,Mupad,我曾尝试在Matlab中使用一个脚本来计算(上升阶乘),但当x为负数时,即使表达式在x为负数时有效(Wolfram Alpha和Mathematica为pochhammer(-3,2)),它也无法计算pochhammer(x,n) 谁能帮我让pochhammer在Matlab中使用否定参数吗?我想你指的是。请注意,pochhammer(不大写)是的一部分,它是一个单独的环境,可与Matlab一起使用。您可以通过在Matlab命令窗口中键入MuPAD来访问MuPAD 但是,如果像普通的Matlab

我曾尝试在Matlab中使用一个脚本来计算(上升阶乘),但当
x
为负数时,即使表达式在
x
为负数时有效(Wolfram Alpha和Mathematica为
pochhammer(-3,2)
),它也无法计算
pochhammer(x,n)


谁能帮我让pochhammer在Matlab中使用否定参数吗?

我想你指的是。请注意,
pochhammer
(不大写)是的一部分,它是一个单独的环境,可与Matlab一起使用。您可以通过在Matlab命令窗口中键入
MuPAD
来访问MuPAD

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

evalin(symengine,'pochhammer(-3,2)')
还是更灵活

feval(symengine,'pochhammer',-3,2)
看。它们都返回符号数作为结果,并且只对标量输入有效。如果需要双精度输出且具有矢量输入(仅适用于第二个输入,
n
),请使用

这相当于使用MuPAD的函数,因此您还可以编写:

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

但是,如果您根本不使用符号数学,则可能没有理由使用此函数来代替完全双精度的解决方案。简单地定义为两个函数的比率,可以有效地实现为(
x
n
必须是相同的维度或标量–此外,
x
x-n
都不能是小于或等于零的整数,其中为单数):

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

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

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

Matlab的数值命令
pochhammer
在Matlab版本R2014b中引入了(而不是MuPAD)。

如果您需要帮助修复代码,您必须显示不工作的代码。如果你想让别人直接给你工作代码,那你就错了。伽马函数在x=0,-1,-2。。。因此,伽马函数的比率(虽然从数学角度来看是完全正确的)不建议作为波克哈默符号数值计算的简写,除非x>0。@StefanoM:很好的观点。我以为我已经解决了这个问题,但我没有。我已经更新了我的答案。
poch = @(x,n)gamma(x+n)./gamma(x);
poch = @(x,n)prod(bsxfun(@plus,x(:),0:n-1),2);