1、1.2.3 应用举例通过简单举例,自建一个相对简单和复杂的函数,用上面编写的Matlab源程序来解决实际问题,体会数值积分和Matlab的优势2 牛顿柯特斯公式及Matlab实现2.1 牛顿柯特斯公式的基本原理方法设将积分区间a, b划分为n等分,步长为,选取等距节点构造出的差值型求积公式, (2.1)称为牛顿-柯特斯公式,式中称为柯特斯系数根据, (2.2)引进变量代换,则有 (2.3)当n = 2时,此时柯特斯系数为,相应的求积公式就是辛普森求积公式: (2.4)2.2 牛顿柯特斯公式的Matlab实现functionC, g = NCotes(a, b, n, m)% a,b分别为积分的
2、上下限;% n是子区间的个数;% m是被调用第几个被积函数;% 当n=1时计算梯形公式;当n=2时计算辛普森公式,以此类推;I = n;h = (b - a) / i; z = 0; for j = 0 : i x(j + 1) = a + j * h;s = 1; if j = 0 s = s; elsefor k=1 : j s =s * k; endendr = 1;if i - j = 0 r = r; else for k = 1 : (I - j) r = r * k; end end if mod(I - j), 2) = 1 q = -(I * s * r);else q =
3、i * s * r;y = 1;for k = 0 : if k = j y = y * (sym(t) - k); l = int(y, 0 , i); C(j + 1)= l / q; z = z + C(j + 1)*f1(m, x(j + 1); g=(b - a)*z3 复合求积公式及Matlab实现3.1 复合梯形公式的基本原理将区间a, b划分成n等分,分点,在每个子区间()上采用梯形公式得: (3.1)记 (3.2)称式(3.2)为复合梯形公式3.2 复合梯形公式的Matlab实现function s = trapr1(f, a, b, n)% f表示被积函数;% a,b表示积
4、分上下限;h = (b - a) / n;s = 0; (n - 1) x = a + h * k;s = s + feval(f, x);end format long s = h*(feval(, a) + feval(, b) / 2 + h * s;3.3 复合辛普森求积公式的基本原理将区间a,b分等分,在每一个子区间上采用辛普森公式,若记,则得 (3.3)(3.4)称式(3.4)为复合辛普森求积公式3.4 复合辛普森求积公式的Matlab实现function s = simpr1(f, a, b, n) h = (b - a) / (2 * n);s1 = 0;s2 = 0; n x
5、 = a + h * (2*k - 1); s1 = s1 + feval( x = a + h * 2 * k; s2 = s2 + feval( s = h*(feval(, b) + 4 * s1 + 2 * s2) / 3;4 龙贝格求积公式及Matlab实现4.1 龙贝格算法的基本原理由梯形的递推法可以看出,将积分区间等分时,用复化梯形公式计算的结果作为积分的近似值,其误差近似值为 (4.1)可以设想,如果用这个误差作为的一种补偿,即将 (4.2)作为积分的近似值,可望提高其精确度直接根据复化求积公式,不难验证 (4.3)这说明,将区间对分前后两次复化梯形公式的值,按式 (4.4)作
6、线性组合恰好等于复合辛普森公式的值,它比更接近于近似值 同样,根据 (4.5)用于作线性组合会得到比更精确的值,且通过直接验证可得 (4.6)再由 (4.7)与作线性组合,又可得到比更精确的值,通常记为,即 (4.8)此式(4.8)就称为龙贝格求积公式 上述用若干积分近似值推算出更为精确的积分近似值得方法,称为外推法我们将序列分别称为梯形序列,辛普森序列,柯特斯序列和龙贝格序列由龙贝格序列求积的算法称为龙贝格算法具体步骤为:第一步:算出和的值,根据公式 (4.9)求出;第二步:将区间a,b分半,算出的值,并根据(4.3)和(4.9)式计算第三步:再将区间分半,算出及,再有公式(4.4)求出;第
7、四步:再将区间分半,计算, ,并根据公式(4.5)计算第五步:再将区间分半,类似上述过程计算重复以上步骤即可得到,一直到龙贝格序列中前后两项的绝对值差不超过给定的误差险为止4.2 龙贝格算法的Matlab实现function R, quad, err, h=romber(f, a, b, n, delta) % n是子区间的个数% delta是误差限M = 1;h = b - a;err = 1 J = 0;R = zeros(4, 4);R(1, 1) = h * (feval(, b) / 2 while (err delta) & (J n) ) | (J Ncotes(0, 1, 1,
8、 2) 回车得到;ans = 0.9270Ncotes(0, 1, 2, 2) 回车得到: 0.94616.1.2 复合梯形公式和复合辛普森求积公式的计算结果建立一个M文件定义一个f.m函数function y = f(x) if x = 0 y = sin(x) / xtrapr1(f, 0, 1, 10) 0.9458simpr1(f, 0, 1, 10)0.94616.1.3 龙贝格求积公式的计算结果(取误差不超过)romber(f, 0, 1, 10,0.5*10(- 10) quad = 0.9207 0 0 0 0 0.9398 0.9461 0 0 0 0.9445 0.9461
9、 0.9461 0 0 0.9457 0.9461 0.9461 0.9461 00.9460 0.9461 0.9461 0.9461 0.94616.1.4 高斯勒让德求积公式的计算结果(给定节点3)function y = f(x) ;y = sin(x) / x;输入gauss8(f,0,1,-0.7745966692,0.7745966692,0,0.5555555556,0.5555555556,0.8888888888) 0.89566.2 复杂数值积分的解(精确值-1.8785)6.2.1 牛顿柯特斯当n = 1时的梯形算法和n = 2时的辛普森算法的结果 g(2) = cos
10、(x) 1 / (1 + x.2) 1 / (4.*sqrt(4 + x.2);Ncotes(0, 2*pi, 1, 2)回车得到 -1.8692Ncotes(0, 2*pi, 2, 2) -1.87046.2.2 复合梯形公式和复合辛普森求积公式的计算结果 y = cos(x) 1 / (1 + x.2) 1 / (4.*sqrt(4 + x.2);trapr1(f, 0, 2*pi, 10) -1.8748simpr1(f, 0, 2*pi, 10) -1.86946.2.3 龙贝格求积公式的计算结果(取误差不超过romber(f, 0, 2*pi ,10,0.5*10(-10) -1.8
11、7646.3 各个求积公式的比较分析(以的各个积分结果为例) 表6.1各个数值积分的比较积分方法牛顿柯特斯(梯形)牛顿-柯特斯(辛普森)复合梯形复合辛普森龙贝格高斯-勒让德精确值实际值0.92700.94600.94580.8956误差0.1890.00010.00030.0505代数精度10牛顿-柯特斯方法是一种利用插值多项式来构造数值积分的常用方法,这其中梯形积分方法的误差最大,近似效果最差,辛普森方法的精度比梯形积分高了一个数量级,它的代数精度比梯形积分的代数精度高,能更好地近似积分值;牛顿-柯特斯积分方法的误差比辛普森积分精度高两个数量级复合梯形积分方法比单独的梯形积分精度高,龙贝格方
12、法收敛速度快、计算精度较高,但是计算量较大高斯求积方法积分精度高、数值稳定、收敛速度较快,但是节点与系数的计算较麻烦,而且要求已知积分函数结 论本文主要讨论了数值积分的计算方法并通过MATLAB软件编程实现,通过前面的研究我们知道求数值积分近似值的计算方法很多,包括牛顿-柯特斯求积公式、复合求积公式、龙贝格求积公式、高斯求积公式等等其中牛顿-柯特斯方法是一种利用插值多项式来构造数值积分的常用方法,这其中梯形积分方法的误差最大,近似效果最差,辛普森方法的精度比梯形积分高了一个数量级,它的代数精度比梯形积分的代数精度高,能更好地近似积分值;牛顿-柯特斯积分方法的误差比辛普森积分精度高两个数量级因此
13、,一般情况下,代数精度越高,积分公式计算精度也越高但是高阶的牛顿-柯特斯方法的收敛性没有保证,因此,在实际计算中很少使用高阶的牛顿-柯特斯公式复合梯形积分方法比单独的梯形积分精度高,它的积分精度和被积函数有关,还和复合积分时的步长有关复合辛普森积分公式比单独的辛普森积分公式高近7个数量级,效果明显龙贝格方法收敛速度快、计算精度较高,但是计算量较大高斯求积方法积分精度高、数值稳定、收敛速度较快,但是节点与系数的计算较麻烦、而且要求已知积分函数一般来说,牛顿-柯特斯方法的代数精度越高,数值积分的效果越好、越精确当积分区间比较大的时候,可以采用复化积分方法可以得到更好的效果;变步长积分方法不仅可以很好地控制计算误差,并且可以寻找到适当的积分步长;龙贝格积分方法可以更好地利用变步长复合积分公式得到的积分序列从而得到更为精确的数值结果,是一个较好的数值积分方法高斯求积方法精确度高,收敛性快也是一种很优秀的数值积分方法参考文献1 张德丰. Matlab数值分析与应用M. 北京: 国防工业出版社, 2007. 1-12 胡良剑, 孙晓君.MATLAB数学实验M. 北京: 高等教育出版社, 20063 李庆扬, 王能超, 易大义. 数值分析M. 北京: 清华大学出版社, 2008
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2