我必须计算这个公式的迭代版本:
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我想知道,为什么这个算法是不稳定的,如果有一个解决方案来计算结果从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倍,所以不可接受)。我需要这个公式的稳定版本。
最佳答案
这个递归函数应该在不需要存储部分结果的情况下完成工作,直到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。
积分(100)将给出最终答案,而无需存储部分结果。