2010-12-09 53 views
0

假设我有一个空间要求是nlogn的函数,我想为给定的可用空间计算出该函数的最大输入大小。即我想找到n其中nlogn = c。为什么nlogn很难翻转?

我跟着an approach计算N,看起来像这样在R:

step = function(R, z) { log(log(R)-z)} 
guess = function(R) log(log(R)) 

inverse_nlogn = function(R, accuracy=1e-10) { 
zi_1 = 0 
z = guess(R) 
while(abs(z - zi_1)>accuracy) { 
    zi_1 = z 
    z = step(R, z) 
} 
exp(exp(z)) 
} 

但我不能明白为什么必须迭代求解。对于我们感兴趣的范围(n> 1),函数是非奇异的。

回答

3

没有什么特别之处ň日志ñ - 几乎所有的基本功能不具有基本的逆,所以必须通过其他方式来解决:二分法,牛顿法,拉格朗日反演定理,级数反演,兰伯特-W功能...

+0

看起来我需要本文:HTTP:// www.jstor.org/pss/1989165 – casbon 2010-12-09 17:09:20

+0

您没有权限访问它吗? – nlucaroni 2010-12-09 18:33:40

2

由于加雷暗示的朗伯W函数(eg here)让你几乎没有,确实N = C/W(C)

凌晨谷歌发现this,这可能会有帮助。

1

跟进(被完全明确):

library(emdbook) 

n <- 2.5 

c <- 2.5*log(2.5) 
exp(lambertW(c)) ## 2.5 

library(gsl) 
exp(lambert_W0(c)) ## 2.5 

有可能在速度,精度,两种实现等方面略有差异。我没有广泛测试/基准测试。 (现在,我试图

library(sos) 
findFn("lambert W") 

我发现,它的实现所有的地方:游戏包,以及一个全包这就是所谓的LambertW ...