初学Markdown编辑器,编排及内容错误请指正,谢谢。
1. 引言
众所周知,微积分的两大部分是微分与积分。微分实际上是求一函数的导数,而积分是已知一函数的导数,求这一函数。所以,微分与积分互为逆运算。实际上,积分还可以分为两部分。第一种,是单纯的积分,也就是已知导数求原函数,称为不定积分。相对而言,另一种就是定积分了,之所以称其为定积分,是因为它积分后得出的值是确定的,是一个数,而不是一个函数。计算定积分的方法很多,而高斯—勒让德公式就是其中之一。
高斯积分法是精度最高的插值型数值积分,具有 2n+1 2 n + 1 阶精度,并且高斯积分总是稳定。而高斯求积系数,可以由Lagrange多项式插值系数进行积分得到。
高斯-勒让德求积公式是构造高精度差值积分的最好方法之一。他是通过让节点和积分系数待定让函数 f(x) f ( x ) 以此取 i=0,1,2....n i = 0 , 1 , 2.... n 次多项式使其尽可能多的能够精确成立来求出积分节点和积分系数。高斯积分的代数精度是 2n−1 2 n − 1 ,而且是最高的。通常运用的是 (−1,1) ( − 1 , 1 ) 的积分节点和积分系数,其他积分域是通过一定的变换变换到-1到1之间积分。
2. 高斯-勒让德求积公式
在区间 [−1,1] [ − 1 , 1 ] 上,高斯-勒让德求积公式为
节点数 | xk x k | Ak A k |
---|---|---|
1 | 0.0000000 | 2.0000000 |
2 | ± ± 0.5773503 | 1.0000000 |
3 | ± ± 0.7745967 0.0000000 | 0.5555556 0.8888889 |
4 | ± ± 0.8611363 ± ± 0.3399810 | 0.3478548 0.6521452 |
当积分区间不是 [−1,1] [ − 1 , 1 ] ,而是一般的区间 [a,b] [ a , b ] ,只要做变换
3. Matlab数值求解高斯-勒让德积分
例1:用两点高斯-勒让德积分公式求 ∫10x3dx ∫ 0 1 x 3 d x 。
我们可以很容易知道结果为 0.25 0.25 接下来用matlab数值求解:
GaussP=[-0.5773503 0.5773503]; %高斯点
GaussA=[1 1]; %高斯系数
h = 0.1; %剖分步长
x = 0:h:1; %区间[0,1]
for i=1:length(x)-1
points = h/2*GaussP + (x(i+1)+x(i))/2; %区间变换
f(i) = 0;
for k=1:2
f(i) = f(i) + h/2*points(k)^2*GaussA(k);
end
end
result = sum(f)
可以得到结果为:0.250000000133413。
例2:用三点高斯-勒让德积分公式求 ∫10x2(1−x)2dx ∫ 0 1 x 2 ( 1 − x ) 2 d x 。
我们可以很容易知道结果为 130≈0.033333333333333 1 30 ≈ 0.033333333333333 接下来用matlab数值求解:
GaussP=[-0.7745967 0 0.7745967]; %高斯点
GaussA=[0.5555556 0.8888889 0.5555556]; %高斯系数
h = 0.1; %剖分步长
x = 0:h:1; %区间[0,1]
for i=1:length(x)-1
points = h/2*GaussP + (x(i+1)+x(i))/2; %区间变换
f(i) = 0;
for k=1:3
f(i) = f(i) + h/2*(points(k)^2*(1-points(k))^2)*GaussA(k);
end
end
result = sum(f)
结果为:0.033333334999780