区间[a,b]上2点Gauss-Legendre积分如下,计算[0,π/4]上cosx的积分结果和精确值相差太大,如何修改?
%区间[a,b]上2点Gauss-Legendre积分
function y=GLdi2ab(fun,a,b)
f1=fun((b+a)/2+((b-a)/2)*(-1/sqrt(3)));
f2=fun((b+a)/2+((b-a)/2)*(1/sqrt(3)));
y=((b-a)*2)*(f1+f2);
fprintf("该区间上2点Gauss-Legendre积分积分公式的结果为\n");
disp(y);
区间[a,b]上3点Gauss-Legendre积分如下,计算[0,π/4]上cosx的积分结果和精确值相差太大,如何修改?
function y=GLdi3ab(fun,a,b)
f1=fun((b+a)/2+((b-a)/2)*(-sqrt(15)/5));
f2=fun((b+a)/2);
f3=fun((b+a)/2+((b-a)/2)*(sqrt(15)/5));
y=((b-a)*2)*((5/9)*f1+(8/9)*f2+(5/9)*f3);
fprintf("该区间上3点Gauss-Legendre积分积分公式的结果为\n");
disp(y);
计算误差的函数如下
function e=merror(fun1,fun2,a,b,fun)
%fun1为数值积分计算公式
%fun2为y=cosx的定积分计算
%fun为数值积分的被积函数
%a,b分别为积分区间的左端点,右端点
y1=fun1(@fun,a,b);
y2=fun2(a,b);
e=abs(y1-y2);
fprintf("误差为\n");
disp(e)