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