2016-09-28 59 views
1

我想构建一个程序来比较黎曼Zeta函数的部分和与内置的Matlab函数zeta(s)的总和。我希望函数能够输出最少数量的术语以达到0.1%的准确度。我认为一个while循环将是最好的方法,但我的程序运行速度很慢;我还没有从中得到结果。自定义zeta函数永不终止

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

的主要问题是,你的zeta函数的定义是错误的,因为你初始化和的值设置为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

+0

谢谢你的值!这解决了问题! – Olivia