在J. Brian Conrey的论文“Riemann假设”中,有一张素数定理中误差项的傅立叶变换图。请参见下图中左侧的图:

在Chris King撰写的一篇名为Primes out of Thin Air的博客文章中,有一个Matlab程序可以绘制频谱。请参阅文章开头右侧的图表。翻译成Mathematica是可能的:
Mathematica:
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中,有没有一种方法可以利用快速傅立叶变换,用等于Riemann zeta零点虚部的x值处的尖峰绘制频谱?
我已经尝试了FourierDST和Fourier命令,但没有成功。问题似乎是代码中的变量yy包含在Sin[t*myspan/xres*yy]和(y[[Floor[Exp[yy]]]] - Exp[yy])/Exp[yy/2]中。
编辑: 20.1.2012,我更改了行:
For[yy = 0, yy <= Log[x], 1/stpval++,
转换为以下内容:
For[yy = 0, yy/stpval <= Log[x], yy++,
编辑: 22.1.2012,来自Heike的评论,更改为:
For[yy = 0, yy/stpval <= Log[x], yy++,
进入:
For[yy=0, yy<=Log[x], yy+=1/stpval,
发布于 2012-01-24 01:15:28
那这个呢?我使用identity Exp[a Log[x]]==x^a略微重写了正弦变换
Clear[f]
scale = 1000000;
f = ConstantArray[0, scale];
f[[1]] = N@MangoldtLambda[1];
Monitor[Do[f[[i]] = N@MangoldtLambda[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]它会产生

https://stackoverflow.com/questions/8934125
复制相似问题