自定义zeta函数永不终止

Self-defined zeta function never terminates

我正在尝试构建一个程序来比较黎曼 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)

主要问题是你对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。