我必须计算这个公式的迭代版本:
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
使用此功能我从来没有得到一个确切的值,因为累积的误差太高。我得到一个接近的值(但即使高3或4倍,所以不可接受)如果我使用i = 15和max = 18.I需要这个公式的稳定版本。
答案 0 :(得分: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.
积分(100)将给出最终答案,而无需存储部分结果。