如何计算实数的阶乘倒数?

7

有没有一种方法可以计算实数的阶乘的倒数?

例如 - 1.5 ! = 1.32934039

如果我有值1.32934039,有没有办法获得回1.5

我正在尝试。

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

但那是失败了。


3
请注意,这在自然数中也不起作用。即Γ函数通常没有反函数。 - Konrad Rudolph
3
@Konrad Rudolph:没有反函数?我不理解。应该有一些反函数。 - Lazer
3
@Robin Day:mathoverflow.com是面向研究级数学的,而不是高中级别的数学。我认为对于关于数学算法的问题,没有比stackoverflow.com更好的地方了。 - Mike Seymour
1
@Mike:我不认为关于伽玛函数的问题是“高中水平”… - BlueRaja - Danny Pflughoeft
显示剩余6条评论
3个回答

5

通过wolframalpha.com,您可以查询以下信息:

Solve[Gamma[x+1]==1.32934039,x]

如评论中所述,伽玛函数没有唯一的逆元。即使在解决传统的阶乘问题时也是如此,例如:

Solve[Gamma[x+1]==6,x]

这个问题有多个答案,其中一个是3。

在WolframAlpha中,你可以使用Factorial[]代替Gamma[]:

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

2
“传统的阶乘”只在自然数{0,1,2,...}上有定义,并且这里唯一的问题是0!= 1!(例如,x!= 6在自然数中只有一个根,即3)。 - Andreas Rejbrand
1
@Andreas,OP正在询问常规阶乘的一般化形式,即伽玛函数。在Mathematica/WolphramAlpha中,它的实现方式是Gamma[x+1]或Factorial[x]。试试看吧。 - brainjam
当然我知道。我非常熟悉伽玛函数。但是brainjam说“伽玛函数没有唯一的反函数。即使你在解决传统阶乘的问题时,例如Solve[Gamma[x+1]==6,x],也会得到几个答案,其中一个是3。”这可以被解释为x!= 6在自然数上有几个解,这是错误的。唯一的解是3。也许只是措辞不当。 - Andreas Rejbrand
@Andreas,谢谢你的澄清。很抱歉暗示你不知道伽马,你可能比我更了解它。 - brainjam
@Lazer,不是的,它会默默失败。我认为它是通过数值求解的,而问题中的大数字可能导致它丢失(即无法收敛于解)。2^1024大约相当于170!,这是非常大的。 - brainjam
显示剩余2条评论

5

David Cantrell在此页面上给出了Γ-1(n)的良好近似值:

k = 二次ψ函数的正零点,约为1.461632
c = Sqrt(2*pi)/e - Γ(k),约为0.036534
L(x) = ln((x+c)/Sqrt(2*pi))
W(x) = Lambert W函数
ApproxInvGamma(x) = L(x) / W(L(x) / e) + 1/2

3

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

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

实数的阶乘没有反函数。你说"每个函数都必须有一个反函数",这是不正确的。考虑常数函数f(x)=0。什么是f^-1(42)?为了成为反函数,它必须同时是单射和满射。


应该是 i = 1,除法和自增应该交换,然后你可以直接返回 i - Matthew Flaschen
他没有说“每个函数”(但也许他编辑过了?)。但是在[2,∞)上的Γ(x)(不像f(x)=0)是单射的。至少在该子域上应该有一个反函数。 - Ken
A: 谢谢,我理解了相反的概念。我说的是在伽玛函数的情况下 - 因为它似乎是一个单调不降的一对一函数,至少对于正实数来说。 - Lazer
谢谢,伙计。答案中的代码似乎有一些错别字,但我已经在此基础上实现了一个有效的算法。 - midnite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接