1

我正在尝试构建一个程序来将 Riemann Zeta 函数的部分总和与内置的 Matlab 函数 zeta(s) 进行比较。我希望该函数输出最少的项数以达到 0.1% 的准确度。我认为 while 循环是最好的方法,但是我的程序运行速度很慢;我还没有从中得到结果。

function[n] = riemannzeta(s)
error = 1; n = 1; an = 1; S = an;
while error >= 0.1
    an = 1/n^s;
    S = S + an;
    n = n + 1;
    z = zeta(s); 
    error = ((S - z)/z)*100;
end
end

我称之为:

riemannzeta(3)
4

1 回答 1

1

主要问题是您对 zeta 函数的定义是错误的,因为您将 sum 的值初始化为 1,然后在第一步中添加 1。您要么需要在 0 处初始化,要么在1/2^s. 您还需要取误差的绝对值。

这是从两个开始的版本:

function n = riemannzeta(s)
error = 1; n = 1; an = 1; S = 1;
z = zeta(s); 
while error >= 0.001
    n = n + 1;
    an = 1/n^s;
    S = S + an;
    error = abs(S - z)/z;
end
end

如果我运行,riemannzeta(3)我会得到 20 的值。

于 2016-09-28T08:30:55.963 回答