自定义zeta函数永远不会终止

时间:2016-09-28 06:54:37

标签: matlab function riemann

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

1 个答案:

答案 0 :(得分: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.