2012-01-19 45 views
12

在J.布賴恩康利在圖6中的論文「黎曼假說」中,素數定理中的誤差項的傅里葉變換的圖表。見陰謀左側下面的圖片:在Mathematica中如何繪製傅里葉變換的黎曼ζ零譜?

Plots from Conrey's paper on the Riemann hypothesis

在叫Primes out of Thin Air一篇博客文章由克里斯·金寫的存在是繪製頻譜MATLAB程序。查看帖子開頭右側的情節。翻譯成數學是可能的:

數學:

scale = 10^6; 
start = 1; 
fin = 50; 
its = 490; 
xres = 600; 
y = N[Accumulate[Table[MangoldtLambda[i], {i, 1, scale}]], 10]; 
x = scale; 
a = 1; 
myspan = 800; 
xres = 4000; 
xx = N[Range[a, myspan, (myspan - a)/(xres - 1)]]; 
stpval = 10^4; 
F = Range[1, xres]*0; 

For[t = 1, t <= xres, t++, 
For[yy=0, yy<=Log[x], yy+=1/stpval, 
F[[t]] = 
F[[t]] + 
Sin[t*myspan/xres*yy]*(y[[Floor[Exp[yy]]]] - Exp[yy])/Exp[yy/2]; 
] 
] 
F = F/Log[x]; 
ListLinePlot[F] 

然而,這是我的理解傅立葉正弦變換的矩陣公式,因此它是非常昂貴的計算。我不建議運行它,因爲它已經讓我的電腦崩潰了一次。

Mathematica中有沒有一種方法利用快速傅里葉變換,在x值等於黎曼zeta零點虛部的尖峯處繪製譜圖?

我試過命令FourierDSTFourier沒有成功。問題似乎是代碼中的變量yy包含在Sin[t*myspan/xres*yy](y[[Floor[Exp[yy]]]] - Exp[yy])/Exp[yy/2]中。

編輯:2012年1月20日,我改了行:

For[yy = 0, yy <= Log[x], 1/stpval++,

爲以下:

For[yy = 0, yy/stpval <= Log[x], yy++,

編輯:2012年1月22日,從海克的評論,改:

For[yy = 0, yy/stpval <= Log[x], yy++,

到:

For[yy=0, yy<=Log[x], yy+=1/stpval,

+1

正弦變換略有因爲你的內心'For'循環停留在'YY = 0'你得到一個無限循環。您可能需要在'For'循環的第三個參數中增加'yy'而不是'stepval'。 – kglr

+0

謝謝你的糾正!問題仍然存在。這次程序運行時沒有凍結我的臺式計算機,但它以輸出結束:沒有更多的可用內存。 Mathematica內核已關閉。 嘗試退出其他應用程序,然後重試。 –

+1

@Mats:只要你知道,它[壞形式](http://meta.stackexchange.com/q/64068/156389)有[同樣的問題](http://math.stackexchange.com/q/100597/954)發佈在兩個網站上。你應該已經標記過主持人的注意力,並要求被遷移,或者在重新發布之前自己刪除該問題。 – Simon

回答

11
這個

什麼?我已經重寫使用標識Exp[a Log[x]]==x^a

Clear[f] 
scale = 1000000; 
f = ConstantArray[0, scale]; 
f[[1]] = [email protected][1]; 
Monitor[Do[f[[i]] = [email protected][i] + f[[i - 1]], {i, 2, scale}], i] 

xres = .002; 
xlist = Exp[Range[0, Log[scale], xres]]; 
tmax = 60; 
tres = .015; 
Monitor[errList = Table[(xlist^(-1/2 + I t).(f[[Floor[xlist]]] - xlist)), 
    {t, Range[0, 60, tres]}];, t] 

ListLinePlot[Im[errList]/Length[xlist], DataRange -> {0, 60}, 
    PlotRange -> {-.09, .02}, Frame -> True, Axes -> False] 

產生

Mathematica graphics

+0

太棒了!這填補了我的教育空白。只是一個細節,變量'span'的值應該是20000或更多,'xlist'前面加上'span = 20000'行。非常感謝。 –

+0

@Mats'span'和'scale'是一樣的。我在我的筆記本中使用了'span',但忘了在這裏複製粘貼代碼時用'scale'替換所有出現的'span'。我會糾正它,使其一致。 – Heike

+1

我自己無法做到這一點。 –