用不同数值方法计算积分
(1)取不同的步长h,分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h的函数,并与积分精确值比较两个公式的精度,是否存在一个最小的h,使得精度不能再被改善?
(2)用龙贝格求积计算完成问题(1)。
(3)用自适应辛普森积分,使得精度达到 10-4次
想要matlab代码
用不同数值方法计算积分
(1)取不同的步长h,分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h的函数,并与积分精确值比较两个公式的精度,是否存在一个最小的h,使得精度不能再被改善?
(2)用龙贝格求积计算完成问题(1)。
(3)用自适应辛普森积分,使得精度达到 10-4次
想要matlab代码
回答第一题
f = @(x) sqrt(x).*log(x).*(x>0)+0.*(x<=0); % 函数
narr = 10.^(1:8); % 分段从10~100000000,h从十分之一到亿分之一
err1 = zeros(size(narr));
err2 = zeros(size(narr));
for i = 1:length(narr)
n = narr(i);
a = 0;
b = 1;
xi = linspace(a,b,n+1);
h = (b-a)/n;
% 复合梯形法
S1 = sum([0, 2*f(xi(2:end)), f(b)])*h/2;
% 复合辛普森法
if(mod(n,2)~=0)
n = n+1;
end
xi = linspace(a,b,n+1);
h = (b-a)/n;
S2 = sum([0, f(b), 4*f(xi(2:2:end-1)), 2*f(xi(3:2:end-2))])*h/3;
err1(i) = abs((S1-(-4/9))/(-4/9)); % 求误差
err2(i) = abs((S2-(-4/9))/(-4/9)); % 求误差
end
loglog(1./narr, err1, 'r-*', 1./narr, err2, 'b-o') % 画误差对h的对数坐标图
xlabel('h'); ylabel('error')
legend('复合梯形法','复合辛普森法')
可见在相同步长h时,复合辛普森法要比复合梯形法精度要高,且随着步长减小,相对误差也减小,且可见相对误差与步长的关系符合幂指数形式