Algorithm 如何计算实数的逆阶乘?

Algorithm 如何计算实数的逆阶乘?,algorithm,math,factorial,Algorithm,Math,Factorial,有什么方法可以计算实数的逆因子吗 例如— 如果我有1.32934039的值,是否有办法返回1.5 我正在努力 http://www.wolframalpha.com/input/?i=Gamma^(-1)[1.32934039] 但这是失败的。对于整数,您可以执行以下操作: i = 2 n = someNum while (n != 1): n /= i i += 1 return (i==1 ? i : None) 实数的阶乘没有倒数。你说“每个函数都必须有一个逆函数”。这是

有什么方法可以计算实数的逆因子吗

例如—

如果我有
1.32934039
的值,是否有办法返回
1.5

我正在努力

http://www.wolframalpha.com/input/?i=Gamma^(-1)[1.32934039]


但这是失败的。

对于整数,您可以执行以下操作:

i = 2
n = someNum
while (n != 1):
    n /= i
    i += 1
return (i==1 ? i : None)

实数的阶乘没有倒数。你说“每个函数都必须有一个逆函数”。这是不正确的。考虑常量函数<代码> f(x)=0 < /代码>。什么是
f^-1(42)
?对于要反转的函数,它必须同时是一个注入和一个满射,使用wolframalpha.com,您可以要求

Solve[Gamma[x+1]==1.32934039,x]
如注释中所述,Gamma没有唯一的逆。即使在求解常规阶乘时也是如此,例如

Solve[Gamma[x+1]==6,x]
产生多个答案,其中一个是3

除了在WolframAlpha中使用Gamma[],还可以使用阶乘[]:

Solve[Factorial[x]==6,x]
Solve[Factorial[x]==1.32934039,x]

David Cantrell给出了Γ-1(n)的一个很好的近似值:

k=digamma函数的正零,约为1.461632 c=Sqrt(2*pi)/e-Γ(k),约0.036534 L(x)=ln((x+c)/Sqrt(2*pi)) W(x)= 近似伽马(x)=L(x)/W(L(x)/e)+1/2
仅供参考,这也不适用于自然数。也就是说,Γ函数一般没有逆。@Konrad Rudolph:没有逆吗?我不明白。应该有一些倒数。@拉泽尔:如果你认为你会看到伽玛函数不是R上的内射函数,也就是说,对于几个X值,有一些Y值。但是如果我们把自己限制在x>2(比如说),那么就没有问题了。@Robin Day:mathoverflow.com是研究级数学,而不是高中级。关于数学算法的问题,我认为没有比stackoverflow.com更好的了。@Mike:我不会把关于伽马函数的问题称为“高中水平”…“常规阶乘”只定义在自然数{0,1,2,…}上,而对于这个问题,这里唯一的问题是0!=1.(例如,x!=6在自然数中只有一个根,即3。)@Andreas,OP正在询问一种被称为gamma函数的常规阶乘的推广。这在Mathematica/WolphramAlpha中实现为Gamma[x+1]或阶乘[x]。试试看,我当然知道。我非常熟悉伽马函数。但是brainjam说,“Gamma没有唯一的逆。即使是在求解传统的阶乘时也是如此,例如,Solve[Gamma[x+1]==6,x]会产生几个答案,其中一个是3。”这可以解释为如果x!=6有几个关于自然数的解,这是错误的。唯一的解决办法是3。“也许只是措辞不好。”安德烈亚斯,谢谢你的澄清。很抱歉,暗示您不知道Gamma,您可能比我知道的更多。有人对
Solve[Gamma[x+1]==2^1024,x]
有什么结果吗?我什么也没有得到。它应该是
I=1
,除法和增量应该互换,您可以返回
I
。他没有说“每个函数”(但可能是他编辑的?)。但是
Γ(x)
关于
[2,∞)是(不同于
f(x)=0
)内射。至少在那个子域上应该有一个逆。A:谢谢,不过我理解逆的概念。我说的是在伽马函数的上下文中-因为它看起来是一个一个非递减函数,至少对于正实数是如此。谢谢,伙计。ans中的代码似乎有一些拼写错误。但我是基于它的并实现了一种有效的算法。 k = the positive zero of the digamma function, approximately 1.461632 c = Sqrt(2*pi)/e - Γ(k), approximately 0.036534 L(x) = ln((x+c)/Sqrt(2*pi)) W(x) = Lambert W function ApproxInvGamma(x) = L(x) / W(L(x) / e) + 1/2