基于MATLAB的算法
一、自适应梯形求积法
二、龙贝格求积法
自适应梯形求积法
1、梯形公式和辛普森公式
对于数值积分,我们最容易想到的就是梯形公式了,也就是取该段函数的起点终点的平均值作为整段函数的估计值。
2、复化梯形公式
有时候,为了提高精度,而不愿意改变算法,我们可以采用复化的形式,也就是把函数分成多段,每一段用梯形公式进行计算得到该段的估计值,再进行累加。
3、自适应复合梯形公式推导
但是,我们往往碰到的函数可能一段上很均匀,但是在另一段上波动很大,例如我们这里测试用的函数,这时候我们的自适应梯形公式就可以派上用场了,它的实现手段就是在波动较大的地方多进行分段,而波动较小的地方则较少的分段足以达到精度要求。而如何检验波动大小就成了问题的痛点所在,下面我们重点放在如何分析现有估计的误差,并作出合理的判断是否继续细分。
我们求的积分为:
1.0/(1.0+25.0xx) (-1 1)
以下是相关代码:
自适应梯形求积法
format long
f1 = @(x)1.0/(1.0+25.0*x*x); % 测试函数(the test function)
% 积分上下限和精度要求,注意这里是整体的精度要求
a=-1;
b=1;
e=1e-6;
p=[a,b];
p0=p;
ep=[e];
m=0; %分点数
q=0;
I=0; %最后的结果
while(1)
n1=length(ep);
n=length(p0);
if n==1
break;
end
h=p0(2)-p0(1);
whole=h/2*(f1(p0(1))+