在J.布賴恩康利在圖6中的論文「黎曼假說」中,素數定理中的誤差項的傅里葉變換的圖表。見陰謀左側下面的圖片:在Mathematica中如何繪製傅里葉變換的黎曼ζ零譜?
在叫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零點虛部的尖峯處繪製譜圖?
我試過命令FourierDST
和Fourier
沒有成功。問題似乎是代碼中的變量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,
正弦變換略有因爲你的內心'For'循環停留在'YY = 0'你得到一個無限循環。您可能需要在'For'循環的第三個參數中增加'yy'而不是'stepval'。 – kglr
謝謝你的糾正!問題仍然存在。這次程序運行時沒有凍結我的臺式計算機,但它以輸出結束:沒有更多的可用內存。 Mathematica內核已關閉。 嘗試退出其他應用程序,然後重試。 –
@Mats:只要你知道,它[壞形式](http://meta.stackexchange.com/q/64068/156389)有[同樣的問題](http://math.stackexchange.com/q/100597/954)發佈在兩個網站上。你應該已經標記過主持人的注意力,並要求被遷移,或者在重新發布之前自己刪除該問題。 – Simon