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