0

我必须计算这个公式的迭代版本:

f(i)=integral ( x^i/(4x+1) ) from 0 to 1

使用这些公式:

f(0)=ln(5)/4;
f(i)=1/(i+1) - 4*f(i+1);

我尝试了以下方法:我计算从 0 到 1 的积分 ( x^100/(4x+1) ),并存储结果。然后我从这个结果开始计算 f(i),使用迭代版本。
但我得到错误的结果,因为错误太大。
该错误仅适用于 i<=25。
我想知道,为什么这个算法不稳定,以及是否有解决方案来计算从 i=100 或更高开始的结果。

这是代码:

function y=Integral(i,max)

if i==0
    y=1/4*log(5);
elseif i==max
    y=0.0;
else
    y=1/(i+1)-4*Integral(i+1,max);
end


end

使用这个函数,我永远不会得到一个精确的值,因为累积的误差太高。如果我使用 i=15 和 max=18,我会得到一个接近的值(但甚至高 3 或 4 倍,所以不可接受)。我需要稳定的这个公式的版本。

4

1 回答 1

2

这个递归函数应该可以完成这项工作,而无需在到达 100 的过程中存储部分结果:

function y = Integral(i)

if i==0
    y=log(5)/4;
else
    y = (-Integral(i-1) + 1/i)/4;
end
end

要使递归起作用,您需要从 i=100 开始,然后使用 i-1 调用该函数,直到它达到 i=0。

Integral(100) 将给出最终答案,而无需存储部分结果。

于 2012-10-23T16:31:04.597 回答