【问题标题】:Self-defined zeta function never terminates自定义zeta函数永不终止
【发布时间】:2016-09-28 18:41:17
【问题描述】:

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

【问题讨论】:

    标签: matlab function riemann


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 2014-04-07
      相关资源
      最近更新 更多