谐波序列的单点预测

时间:2016-03-11 23:18:05

标签: matlab precision numeric

我试图理解我如何通过理论找到谐波序列求和的单精度。我有一个粗略的想法,例如,求和是ln(k)k是迭代步骤我想?机器epsilion是2 ^ -23。但我得到N> 2 ^ -18,但我在matlab之后得到的步骤是2097153.帮助任何人?非常感谢

1 个答案:

答案 0 :(得分:0)

我们来看看这个简单的代码:

s=single(0);
ix=1;
while(true)
    s_new=s+1/ix;
    if s_new==s
        break
    end
    s=s_new;
    ix=ix+1;
end

它停在ix=2097152,问题是为什么?

您可以添加到s_new而不更改值的最大值为eps(s_new)/2,因此我们正在寻找1/ix==eps(s_new)/2的点。如果您使用已知的近似值s_new替换log(ix+1),则最终得到1/ix==eps(single(log(ix+1)))/2,这对于使用代码评估的ix来说是正确的:

>> f=@(x)(vpa(eps(single(log(x+1))))/2)-(1/vpa(x));
>> f(ix)

ans =

0.0

>> f(ix+1)

ans =

0.00000000000022737356702306650969194903757618

>> f(ix-1)

ans =

-0.00000000000022737378386350100684213964564307