2010-12-09 74 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 ...

相關問題