数值积分算法与MATLAB实现陈悦5133201讲解
数值积分的MATLAB实现

数值积分的MATLAB实现数值积分是通过数值方法计算定积分的近似值。
MATLAB是一种功能强大的数值计算软件,提供了多种函数和工具箱用于数值积分的实现。
在MATLAB中,常用的数值积分方法包括梯形法则、辛普森法则和龙贝格法。
梯形法则是最简单的数值积分方法之一、它的基本思想是将要积分的区间划分成多个小的梯形并计算每个梯形的面积,然后将这些面积相加得到最终的近似积分值。
在MATLAB中,可以使用trapz函数进行梯形法则的计算。
例如,要计算函数sin(x)在区间[0, pi]的积分,可以使用以下代码:```MATLABx = linspace(0, pi, 1000); % 在[0, pi]区间生成1000个等间隔的点y = sin(x); % 计算函数sin(x)在每个点的值integral_value = trapz(x, y) % 使用梯形法则进行数值积分```辛普森法则是一种更精确的数值积分方法,它使用二次多项式来逼近被积函数。
在MATLAB中,可以使用simpson函数进行辛普森法则的计算。
例如,上面例子中的积分可以改用辛普森法则进行计算:```MATLABintegral_value = simpson(x, y) % 使用辛普森法则进行数值积分```龙贝格法是一种高效的自适应数值积分方法,它通过逐步加密网格和逼近函数来提高积分的精度。
在MATLAB中,可以使用quad和quadl函数进行龙贝格法的计算。
例如,计算函数sin(x)在区间[0, pi]的积分:```MATLAB```除了上述方法外,MATLAB还提供了许多其他的数值积分函数和工具箱,用于处理不同类型的积分问题。
例如,int和integral函数可以用于处理多重积分和奇异积分。
Symbolic Math Toolbox中的函数可以用于计算符号积分。
需要注意的是,数值积分是一种近似方法,计算结果的误差与划分区间的精细程度有关。
数值积分算法与MATLAB实现

数值积分算法与MATLAB实现本文从网络收集而来,上传到平台为了帮到更多的人,如果您需要使用本文档,请点击下载按钮下载本文档(有偿下载),另外祝您生活愉快,工作顺利,万事如意!摘要:在求一些函数的定积分时,由于原函数十分复杂难以求出或用初等函数表达,导致积分很难精确求出,只能设法求其近似值,因此能够直接借助牛顿-莱布尼兹公式计算定积分的情形是不多的。
数值积分就是解决此类问题的一种行之有效的方法。
积分的数值计算是数值分析的一个重要分支;因此,探讨近似计算的数值积分方法是有着明显的实际意义的。
本文从数值积分问题的产生出发,详细介绍了一些数值积分的重要方法。
本文较详细地介绍了牛顿-科特斯求积公式,以及为了提高积分计算精度的高精度数值积分公式,即龙贝格求积公式和高斯-勒让德求积公式。
除了研究这些数值积分算法的理论外,本文还将这些数值积分算法在计算机上通过MATLAB软件编程实现,并通过实例用各种求积公式进行运算,分析比较了各种求积公式的计算误差。
【关键词】数值积分牛顿-科特斯求积公式高精度求积公式MATLAB软件前言对于定积分,在求某函数的定积分时,在一定条件下,虽然有牛顿-莱布里茨公式可以计算定积分的值,但在很多情况下的原函数不易求出或非常复杂。
被积函数的原函数很难用初等函数表达出来,例如等;有的函数的原函数存在,但其表达式太复杂,计算量太大,有的甚至无法有解析表达式。
因此能够借助牛顿-莱布尼兹公式计算定积分的情形是不多的。
另外,许多实际问题中的被积函数往往是列表函数或其他形式的非连续函数,对这类函数的定积分,也不能用不定积分方法求解,只能设法求其近似值。
因此,探讨近似计算的数值积分方法是有明显的实际意义的,即有必要研究定积分的数值计算方法,以解决定积分的近似计算。
而数值积分就是解决此类问题的一种有效的方法,它的特点是利用被积函数在一些节点上的信息求出定积分的近似值。
微积分的发明是人类科学史上一项伟大的成就,在科学技术中,积分是经常遇到的一个重要计算环节。
matlab数值积分

Matlab数值积分引言数值积分是一种计算近似定积分的方法,通过将积分区间划分成若干小区间并计算每个小区间上的函数面积之和来逼近定积分的值。
Matlab提供了多种数值积分的方法,使得用户能够方便地进行数值积分计算。
本文将介绍Matlab中常用的数值积分函数和方法,并通过示例演示其具体用法。
数值积分函数在Matlab中,常用的数值积分函数有: - quad:用于一维定积分的自适应数值积分函数。
- dblquad:用于二维定积分的自适应数值积分函数。
- triplequad:用于三维定积分的自适应数值积分函数。
- quad2d:用于二维定积分的数值积分函数(不支持自适应)。
- integral:用于一维定积分的自适应数值积分函数(推荐使用quad替代)。
接下来将分别介绍这些函数的用法。
一维定积分quad函数quad函数是Matlab中用于一维定积分的自适应数值积分函数。
其语法如下:[q,err] = quad(fun,a,b)[q,err] = quad(fun,a,b,tol)[q,err] = quad(fun,a,b,tol,[],p1,p2,...)•fun是用于计算被积函数的句柄或函数名称。
•a和b是积分区间的上下限。
•tol是计算精度(可选参数,默认值为1e-6)。
•p1,p2,...是传递给函数fun的额外参数(可选参数)。
quad函数将返回两个值: - q是定积分的近似值。
- err 是估计的误差。
下面是一个使用quad函数计算一维定积分的示例:fun = @(x) exp(-x.^2); % 定义被积函数a = 0; % 积分下限b = 1; % 积分上限[q,err] = quad(fun,a,b); % 计算积分disp(['定积分的近似值:', num2str(q)]);disp(['估计的误差:', num2str(err)]);integral函数integral函数是Matlab中用于一维定积分的自适应数值积分函数,与quad函数功能类似。
数值积分的Matlab实现研究

3.指令所采用的算法是将一般的积分区域映射到矩形区域, 然后利用自适应Lobatton算法进行计算.
例题:计算
1
2 1 x 2 2
( x 2 y 2 ) sin(x y 2 )dx
可用如下指令:
quad2d (@(x, y)(x.^2 y.^2).* sin(x y.^2), ...1,2, @( x) x, @( x)1 x.^2)
其中:tic,toc是秒表计时命令,tic表示秒表计时开始,toc表 示秒表计时结束,运行花费时间输出格式为“elapsed_time=”, 单位为秒。 2、被积函数用内嵌函数表示
sym s y 2; y 2 inline('1. /((x 0.3)^2 0.01) 1. /((x 0.9)^2 0.04) 6' );
…*(x.^2+y.^2),x,1+x.^2),x),0,inf)
运行结果:0.6427 例2.计算三重积分 2 2 ( xz y ) ln( 1 x z)dv
其中积分区域由xoy坐标面 与旋转抛物面z=16-x^2-y^2所 围成的立体区域.
4 x 4; 16 x 2 y 16 x 2 ; 0 z 16 x 2 y 2
二、一般数值积分的讨论与研究 由于数值积分非常复杂,如振荡积分,无界区域的积分,无 界函数的积分,高维积分等,目前matlab系统还没有直接提供 一般区域上的三元及三元以上函数积分的指令,这需要人们 从问题出发,利用matlab系统现有的指令,探索求解一般区域 的积分问题. 以具体例题进行讨论: 例1
如 : dz dy ( x 2 y 2 ) ln(x y z )dx
数值积分与matlab求解

1.3
数值求积方法
建立数值积分公式的途径比较多, 其中最常用的有两 种:
(1)由积分中值定理可知,对于连续函数f(x),在积分
区间[a,b]内存在一点ξ,使得 b f ( x)dx (b a) f ( )
a
a, b
即所求的曲边梯形的面积恰好等于底为(b-a),高为 f ( ) 的矩形面积。但是点ξ的具体位置一般是未知的, 因 而 f ( ) 的值也是未知的, 称 f ( ) 为f(x) 在区间[a,b]上的平均 高度。那么只要对平均高度 f ( ) 提供一种算法,相应地就 获得一种数值求积方法
计算
2 0
e - x sinxdx ,并与精确值比较.
解:将[0,/ 2]分成20 等份,步长为 / 40,输入程序如下(注意sum 和 cumsum的用法) • >> h=pi/40; x=0:h:pi/2; y=exp(-x).*sin(x); • z1=sum(y(1:20))*h,z2=sum(y(2:21))*h, • z=cumsum(y); z11=z(20)*h, z12=(z(21)-z(1))*h, 运行后屏幕显示计算结果分别如下 • z1 = z2 = z11 = z12 =0.3873 0.4036 0.3873 0.4036 求定积分的精确值,输入程序 • >> syms x • F=int(exp(-x)*sin(x),x,0, pi/2) • Fs= double (F) ,wz1=abs( Fs-z1), wz2= abs( Fs-z2) 运行后屏幕显示定积分的精确值Fs 和用矩形公式计算结果的绝对误差 wz1、wz2 分别如下 • F = Fs =1/2*(-1+exp(pi)^(1/2))/exp(pi)^(1/2) 0.3961 • wz1 = wz2 =0.0088 0.0075
数值积分算法与MATLAB实现陈悦5133201讲解

东北大学秦皇岛分校数值计算课程设计报告数值积分算法及MATLA实现学院数学与统计学院专业信息与计算科学学号5133201姓名_____________ 陈世_____________指导教师姜玉山张建波成绩教师评语:指导教师签字:2015年07月14日1 绪论数值分析是计算数学的一个主要部分,计算数学是数学科学的一个分支,它研究用计算机求解各种数学问题的数值检索方其理论与软件的实现•而数值分析主要研究数值计算•现科学技术的发展与进步提出了越来越多的复杂的数值计算问题,这些问题的圆满解决已远人工手算所能胜任,必须依靠电子计算机快速准确的数据处理能力•这种用计算机处理数值问题的方法,成为科学计算•今天,科学计算的应用范围非常广泛,天气预报、工程设计、流体计算、经济规划和预测以及国防尖端的一些科研项目,如核武器的研制、导弹和火箭的发射等,始终是科学计算最为活跃的领域•1.1数值积分介绍数值积分是数值分析的重要环节,实际问题当中常常需要计算积分,有些数值方法,如微分方程和积分方程的求解,也都和积分计算相联系求某函数的定积分时,在多数情况下,被积函数的原函数很难用初等函数表达出来,因此能够借助微积分学的牛顿-莱布尼兹公式计算定积分的机会是不多的•另外,许多实际问题中的被积函数往往是列表函数或其他形式的非连续函数,对这类函数的定积分,也不能用不定积分方法求解•由于以上原因,数值积分的理论与方法一直是计算数学研究的基本课题•对微积分学做出杰出贡献的数学大师,如I.牛顿、L.欧拉、C.F.高斯、拉格朗日等人都在数值积分这个领域作出了各自的贡献,并奠定了这个分支的理论基础•构造数值积分公式最通常的方法是用积分区间上的n次插值多项式代替被积函数,由此导出的求积公式称为插值型求积公式•特别在节点分布等距的情形称为牛顿-科特斯公式,例如梯形公式(Trapezoidal Approximations)与抛物线公式(Approximatens Using Parabolas)就是最基本的近似公式•但它们的精度较差•龙贝格算法是在区间逐次分半过程中,对梯形公式的近似值进行加权平均获得准确程度较高的积分近似值的一种方法,它具有公式简练、计算结果准确、使用方便、稳定性好等优点,因此在等距情形宜采用龙贝格求积公式(Rhomberg Integration).当用不等距节点进行计算时,常用高斯型求积公式计算,它在节点数目相同情况下,准确程度较高,稳定性好,而且还可以计算无穷积分•数值积分还是微分方程数值解法的重要依据•许多重要公式都可以用数值积分方程导出•现探讨数值积分算法以及运用MATLAB软件的具体实现1.2 MATLAB 软件MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分.MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室).是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境.它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平•MATLAB和Mathematics Maple并称为三大数学软件.它在数学类科技应用软件中在数值计算方面首屈一指.MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域.MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件.在新的版本中也加入了对C,FORTRAN, C++,JAVA的支持.2数值积分的基本概念一般的,我们可以在区间la,b 1上适当选取某些节点兀,然后用f X k的加权平均得到平均高度f 的近似值,这样构造出的求积公式具有下列形式:a n八A k f X k ,式中X k称为求积节点;A k称为求积系数,亦称伴随节点X k的k =0b f x dx :权.权A k仅仅与节点X k的选取有关,而不依赖于被积函数 f x的具体形式.2.1代数精度的概念如果某个求积公式对于次数不超过m的多项式均能准确的成立,但对于m T次多项式就不准确成立,则称该求积公式具有m次代数精度(或代数精确值)一般地,欲使求积公式具有m次代数精度,只要令它对于 f x =1,x,|||,x m都能准确成立,这就要求:乞A k =b-a,1 2 2为A k x k=2(b -a)‘++-- - m 1 t. m+1 m+1 ,送A k x k =一 b -a .、一m+12.2求积公式的余项b n令求积公式的余项为R【f】,其中R i f ]二J a f (x)dx-送A k f(x J;区间【a,b】可以是k=0有限的或无限的•构造求积公式的问题就是确定X j和A j使得R〔f 1在某种意义下尽可能地小.3数值积分方法及MATLAB实现3.1复合辛普森公式3.1.1插值型求积公式用插值多项式L n(X)替换积分广=[f(XpX中的被积函数f(X),然后计算bI 「L n XdX作为积分的近似值,这样建立的求积公式称为插值型求积公式•用插值多an n项式L n(x)的表达式L n(X)八I k X f X k,代入得I二^ A k f X k,其中:k=0 k=0A = f (X—X。
(完整版)MATLAB数值积分解读

6.3 二重定积分的数值求解
使用MATLAB提供的dblquad函数就可以直接求出 上述二重定积分的数值解。该函数的调用格式为:
I = dblquad(f,a,b,c,d,tol,trace) 该函数求f(x,y)在[a,b]×[c,d]区域上的二重定积分。 参数tol,trace的用法与函数quad完全相同。 a,b
通过对表达式尝试多种丌同的算法迚行化简以寻求符号表达式为返回的简化形式how为化简过程中使用的主要方法simple函数综合使用了下列化简方法
6 MATLAB 数值积分
定积分:函数f (x)在区间[a, b]上的定积分定义为
其中
b
n
I
a
f (x)dx lim max(xi )0 i1
f (i )xi
分的下限和上限。该函数求被积函数在区间 [a,b]上的定积分。a和b可以是两个具体的数, 也可以是一个符号表达式,还可以是无穷(inf)。 当函数f关于变量x在闭区间[a,b]上可积时,函 数返回一个定积分结果。当a,b中有一个是inf 时,函数返回一个广义积分。当a,b中有一个 符号表达式时,函数返回一个符号函数。
6.2.3 被积函数由一个表格定义
trapz(x,y) 为梯形积分法,x表示积分区间的离散化 向量,y是与x同维数的向量,表示被积函数在x处的 函数值,z返回积分值。
例4 用trapz函数计算定积分。 命令如下:
X=1:0.01:2.5; Y=exp(-X); %生成函数关系数据向量 trapz(X,Y)
运行结果为ans =64/5
用trapz求数值解,相应的Matlab代码为
clear; x=-2:0.1:2; y=x.^4; %积分步长为0.1(可改变,演示)
演示-matlab计算数值积分

综合示例1
综合示例2
练习
1.计算下列定积分
1 x sin x
e 2 dx 0
e x2Inxdx 1
2.计算下列二重积分
抛物线法 quad(f,a,b,tol)
f 为被积函数,字符串类型,内部运算使用点运算 [a,b] 为积分区间,tol 为计算精度,默认精度10-6
注意:quad函数 的第一个参数带 单引号,内部的*, /,^都需要表示 为形积分域上的二重积分
例:计算二重积分 I 2 1 (4xy 3y2 )dxdy 0 1 f=inline('4*x.*y+3*y.^2'); I=dblquad(f,-1,1,0,2)
Matlab与定积分
—数值积分
习长新 荆楚理工学院数理学院
本节提要
通过本节的学习,我们将了解到 定积分的近似计算原理 常用的近似计算函数
定积分的近似计算原理
矩 形 法
定积分的近似计算原理
梯 形 法
定积分的近似计算原理
抛
物
Pi ( xi , yi ), Pi1 ( xi1 , yi1 ), Pi2 ( xi2 , yi2 )
线
法
Matlab数值积分函数
梯形法 trapz(x,y)
x 为分割点(节点)组成的向量, y 为被积函数在节点上的函数值组成的向量。
理论值:pi/4≈0. 78539816
x=0:1/100:1; y=1./(1+x.^2); trapz(x, y)
ans ≈0.7853939967
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
东北大学秦皇岛分校数值计算课程设计报告数值积分算法及MATLAB实现学院数学与统计学院专业信息与计算科学学号*******姓名陈悦指导教师姜玉山张建波成绩教师评语:指导教师签字:2015年07月14日1 绪论数值分析是计算数学的一个主要部分,计算数学是数学科学的一个分支,它研究用计算机求解各种数学问题的数值检索方其理论与软件的实现.而数值分析主要研究数值计算.现科学技术的发展与进步提出了越来越多的复杂的数值计算问题,这些问题的圆满解决已远人工手算所能胜任,必须依靠电子计算机快速准确的数据处理能力.这种用计算机处理数值问题的方法,成为科学计算.今天,科学计算的应用范围非常广泛,天气预报、工程设计、流体计算、经济规划和预测以及国防尖端的一些科研项目,如核武器的研制、导弹和火箭的发射等,始终是科学计算最为活跃的领域.1.1 数值积分介绍数值积分是数值分析的重要环节,实际问题当中常常需要计算积分,有些数值方法,如微分方程和积分方程的求解,也都和积分计算相联系.求某函数的定积分时,在多数情况下,被积函数的原函数很难用初等函数表达出来,因此能够借助微积分学的牛顿-莱布尼兹公式计算定积分的机会是不多的.另外,许多实际问题中的被积函数往往是列表函数或其他形式的非连续函数,对这类函数的定积分,也不能用不定积分方法求解.由于以上原因,数值积分的理论与方法一直是计算数学研究的基本课题.对微积分学做出杰出贡献的数学大师,如I.牛顿、L.欧拉、C.F.高斯、拉格朗日等人都在数值积分这个领域作出了各自的贡献,并奠定了这个分支的理论基础.构造数值积分公式最通常的方法是用积分区间上的n 次插值多项式代替被积函数,由此导出的求积公式称为插值型求积公式.特别在节点分布等距的情形称为牛顿-科特斯公式,例如梯形公式(Trapezoidal Approximations)与抛物线公式(Approximations Using Parabolas)就是最基本的近似公式.但它们的精度较差.龙贝格算法是在区间逐次分半过程中,对梯形公式的近似值进行加权平均获得准确程度较高的积分近似值的一种方法,它具有公式简练、计算结果准确、使用方便、稳定性好等优点,因此在等距情形宜采用龙贝格求积公式(Rhomberg Integration).当用不等距节点进行计算时,常用高斯型求积公式计算,它在节点数目相同情况下,准确程度较高,稳定性好,而且还可以计算无穷积分.数值积分还是微分方程数值解法的重要依据.许多重要公式都可以用数值积分方程导出.现探讨数值积分算法以及运用MATLAB软件的具体实现1.2 MATLAB 软件MATLAB 是美国MathWorks 公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB 和Simulink 两大部分.MATLAB 是matrix&laboratory 两个词的组合,意为矩阵工厂(矩阵实验室).是由美国mathworks 公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境.它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C 、Fortran )的编辑模式,代表了当今国际科学计算软件的先进水平.MATLAB 和Mathematica 、Maple 并称为三大数学软件.它在数学类科技应用软件中在数值计算方面首屈一指.MATLAB 可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域.MATLAB 的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB 来解算问题要比用C ,FORTRAN 等语言完成相同的事情简捷得多,并且MATLAB 也吸收了像Maple 等软件的优点,使MATLAB 成为一个强大的数学软件.在新的版本中也加入了对C ,FORTRAN ,C++,JAVA 的支持.2 数值积分的基本概念一般的,我们可以在区间[],a b 上适当选取某些节点k x ,然后用()k f x 的加权平均得到平均高度()f ς的近似值,这样构造出的求积公式具有下列形式:()()0d nakkbk f x x A f x =≈∑⎰,式中kx称为求积节点;k A 称为求积系数,亦称伴随节点k x 的权.权k A 仅仅与节点k x 的选取有关,而不依赖于被积函数()f x 的具体形式. 2.1 代数精度的概念如果某个求积公式对于次数不超过m 的多项式均能准确的成立,但对于1m +次多项式就不准确成立,则称该求积公式具有m 次代数精度(或代数精确值)一般地,欲使求积公式具有m 次代数精度,只要令它对于()1,,,m f x x x =都能准确成立,这就要求:()()22+1+1=-,1=-,21=-.+1k k k m m m k k A b a A x b a A x b a m ⎧⎪⎪⎪⎨⎪⎪⎪⎩∑∑∑ 2.2 求积公式的余项令求积公式的余项为[]R f ,其中[]()()ba=d nk k k R f f x x A f x =-∑⎰.;区间[],a b 可以是有限的或无限的.构造求积公式的问题就是确定j x 和j A 使得[]R f 在某种意义下尽可能地小.3 数值积分方法及MATLAB 实现3.1 复合辛普森公式 3.1.1 插值型求积公式用插值多项式()n L x 替换积分()*d ba I f x x =⎰中的被积函数()f x ,然后计算()d bn aI L x x =⎰作为积分的近似值,这样建立的求积公式称为插值型求积公式.用插值多项式()n L x 的表达式()()0()n n k k k L x l x f x ==∑,代入得()0nk k k I A f x ==∑,其中:011011()()()()d ()()()()bk k n k ak k k k k k n x x x x x x x x A x x x x x x x x x -+-+----=----⎰.其余项为:[]()(1)*()d (1)!n baf R f I I x x n ξω+=-=+⎰.3.1.2 牛顿-科特斯公式介绍取等距节点,把积分区间[],a b 剖分成n 等分.令步长()b a h n-=,并记0,n x a x b ==,则1n +个节点为0,0,1,k x x kh k n =+=,代入得:k A =0(1)(1)(1)(1)()d ()!!n k nh t t t k t k t n t n k k ----+----⎰.这种等距节点的插值型求积公式通常称为牛顿-科特斯公式. 3.1.3 辛普森公式利用牛顿-科特斯公式,取n =2,此时为()4()()62b a a b S f a f f b -+⎡⎤=++⎢⎥⎣⎦,即为辛普森公式,其余项为[]5(4)1()()902s b a R f f η-=-. 3.1.4 复合辛普森公式将积分区间[],a b 分成n 等分,分点为(0,1,,)k x a kh k n =+=,其中()b a h n-=,记区间[]1,k k x x +的中点为12k x +,在每个小区间[]1,k k x x +上用辛普森公式,则得到所谓的复合辛普森公式:()()1110246n n k k k k h S f x fx f x -++=⎡⎤⎛⎫=++⎢⎥ ⎪⎢⎥⎝⎭⎣⎦∑.()()()111102246n n n k k k k h S f a f b f x f x --+==⎡⎤⎛⎫=+++⎢⎥ ⎪⎢⎥⎝⎭⎣⎦∑∑.余项为[]()4(4)()1802n b a h R S f ξ-=-,(,)a b ξ∈. 3.1.5 复合辛普森公式的MATLAB 实现 代码如下:function s=xinpusen(fun,a,b,n) h=(b-a)/n s1=0;s2=0; for k=0:(n-1) x=a+h*k;s1=s1+feval(fun,x); end for k=0:(n-1) x=a+h*(k+1/2); s2=s2+feval(fun,x);ends=h/6*(feval(fun,a)+feval(fun,b)+2*s1+4*s2); 3.2 龙贝格公式 3.2.1 梯形法的递推化将区间[],a b 分成n 等份,共有1n +个分点,如果将求积区间再二分一次,则分点增至21n +个,用复合梯形公式求得该子区间上的积分值为()1122()4k k k h f x fx f x ++⎡⎤⎛⎫++⎢⎥ ⎪⎢⎥⎝⎭⎣⎦,将每个子区间上的积分值相加得2n T =()1111002()()42n n k k k k k h h f x f x f x --++==++⎡⎤⎣⎦∑∑. 得到递推公式:12102122n n n k k h T T f x -+=⎛⎫=+ ⎪⎝⎭∑.3.2.2 龙贝格算法公式当()f x 在[],a b 上充分光滑时, 可证用1()T h 逼近I 的截断误差是:1()I T h -=21a h 42a h +2k k a h +++按理查森外推法:()1()F h F h =,1()()(),(1,2,)1mpm m m m p F qh q F h F h m q+-==- 其中,q 为满足10(1,2,)m p q m -≠=的适当正数 .取序列:()()()142,1,2,41m m n m m h T T h T h m +⎛⎫- ⎪⎝⎭==-. 用()1m T h +来逼近I 的误差为()()21m O h +,这种算法就是龙贝格算法.3.2.3 龙贝格算法MATLAB 实现 代码如下:function s=longbeige(fun,a,b,tol) if nargin<4,tol=1e-4;end i=1;j=1;h=b-a;T(1,1)=h*(feval(fun,a)+feval(fun,b))/2;T(i+1,j)=T(I,j)/2+sum(feval(fun,a+h/2:h:b-h/2))*h/2; T(i+1,j+1)=(4^j*T(i+1,j)-T(i.j))/(4^j-1); while (abs(T(i+1,i+1)-T(I,i))>tol) i=i+1;h=h/2;T(i+1,1)=T(I,1)/2+sum(feval(fun,a+h/2:h:b-h/2))*h/2; for j=1:iT(i+1,j+1)=(4^j*T(i+1,j)-T(I,j))/(4^j-1); end end Ts=T(i+1,j+1); 3.3 自适应法自适应积分法是一种比较经济而且快速的求积分的方法.他能自动地在被积函数变化剧烈的区域增多节点,而在被积函数变化平缓的地方减少节点.因此它是一种不均匀区间的积分方法.按照子区间上的积分方式它可以分为自适应辛普森积分法和自适应梯形积分法.通常是采用自适应辛普森积分法作为子区间的积分方式.自适应积分法的基本步骤如下:(1) 将积分区间[],a b 分成两个相等的1级子区间1,2a a h ⎡⎤+⎢⎥⎣⎦和1,2a h a h ⎡⎤++⎢⎥⎣⎦,且h b a =-;(2) 在上述两个1级子区间上用辛普森积分得到积分(){}1_,^12I a a h ⎧⎫+⎨⎬⎩⎭和(){}1_,^12I a h a h ⎧⎫++⎨⎬⎩⎭;(3) 将子区间1,2a a h ⎡⎤+⎢⎥⎣⎦分成两个相等的2级子区间21,2a a h ⎡⎤+⎢⎥⎣⎦和211,22a h a h ⎡⎤++⎢⎥⎣⎦; (4) (){}(){}(){}221111_,^2_,^1_,^12222I a a h I a a h I a h a h ⎧⎫⎧⎫⎪⎪⎪⎪⎧⎫+=++++⎨⎬⎨⎬⎨⎬⎩⎭⎪⎪⎪⎪⎩⎭⎩⎭;(5) 比较(){}1_,^22I a a h ⎧⎫+⎨⎬⎩⎭和(){}1_,^12I a a h ⎧⎫+⎨⎬⎩⎭, 如果|(){}1_,^12I a a h ⎧⎫+⎨⎬⎩⎭- (){}1_,^22I a a h ⎧⎫+⎨⎬⎩⎭|<110**2epsi ,其中epsi 为整体积分所需要的精度,则认为子区间1,2a a h ⎡⎤+⎢⎥⎣⎦上的积分(){}1_,^12I a a h ⎧⎫+⎨⎬⎩⎭已达到所需精度,不需要再细分;否则就需要再细分,对每个2级子区间做同样的判断1级子区间1,2a h a h ⎡⎤++⎢⎥⎣⎦的操作过程完全与上面相同. 3.4 高斯法对已知求积公式可以讨论它的代数精度,反之也可以按照代数精度要求导出求积公式.对于求积公式,当求积节点k x (0,1,,k n =)固定时,公式有1n +个待定参数,故此时可要求满足对1,,,n x x “准确”这样1n +个约束条件,从而使之至少具有n 次代数精度.进一步,可考虑将k x ()0,1,,k n =也视为待定参数,这样公式的待定参数就有22n +个,从而可望公式的代数精度达到21n +.此类高精度的求积公式称为高斯型公式,而对应的节点k x ()0,1,,k n =称为区间[],a b 上的高斯点.3.4.1 高斯法的MATLAB 实现 代码如下:function g=gaosi(fname,a,b,n,m) switch m case 1 t=0;A=1; case 2t=[-1/sqrt(3),1/sqrt(3)];A=[1,1]; case 3t=[-sqrt(0.6),0.0,sqrt(0.6)];A=[5/9,8/9,5/9]; case 4t=[-0.8612136,-0.339981,0.339981,0.861136]; A=[0.347855,0.652145,0.652145,0.347855]; case 5t=[-0.906180,-0.538469,0.0,0.538469,0.906180]; A=[0.236927,0.478629,0.568889,0.478629,0.236927]; case 6t=[-0.932470,-0.661209,-0.238619,0.238619,0.661209,0.932470];A=[0.171325,0.360762,0.467914,0.467914,0.360762,0.171325]; otherwise error endx=linspace(a,b,n+1); g=0; for i=1:ng=g+gsint(fname,x(i),x(i+1),A,t); endfunction g=gsint(fname,a,b,A,t)g=(b-a)/2*sum(A.*feval(fname,(b-a)/2*t+(a+b)/2)); 3.5 多重积分法考虑二重积分(,)d Rf x y A ⎰⎰,它是曲面(,)z f x y =与平面区域R 围成的体积,对于矩形区域{}(,),R x y a x b c y d =≤≤≤≤.可将它写成累次积分(,)((,)d )d b dacRf x y dx f x y y x =⎰⎰⎰⎰若用复合辛普森公式,可分别将[,],[,]a b c d 分成N ,M 等份,步长,b a d ch k N M--==,先对积分(,)d d c f x y y ⎰应用复合辛普森公式,令i y c ik =+,121()2i yc i k +=++.1101012(,)d (,)4(,)2(,)(,)6M M di M ci i i k f x y y f x y f x y f x y f x y --+==⎡⎤=+++⎢⎥⎣⎦∑∑⎰.从而得:1101012(,)d d (,)4(,)2(,)(,)d 6M M bdbb b b i M aca a a a i i i k f x y y x f x y f x y f x y f x y x --+==⎡⎤=+++⎢⎥⎣⎦∑∑⎰⎰⎰⎰⎰⎰.4 数值积分方法比较例:用数值积分方法计算方程1204d 1I x x =+⎰的值. 4.1 复合辛普森公式求解 >> fun=inline('4./(1+x.^2)'); >> xinpusen(fun,0,1,10)ans =3.2749259863031184.2 龙贝格算法求解longbeige(inline('4./(1+x.^2)'),0,1,1e-6)T =3.00003.1000 3.13333.1312 3.1416 3.14213.1390 3.1416 3.1416 3.14163.1409 3.1416 3.1416 3.1416 3.14163.1414 3.1416 3.1416 3.1416 3.1416 3.1416ans =3.1415926536382444.3 高斯算法求解>> gaosi(inline('4./(1+x.^2)'),0,1,2,3)ans =3.141591222382834>> gaosi(inline('4./(1+x.^2)'),0,1,4,4)ans =3.1415956115587354.4 三种方法比较分析结果显示每一个算法都接近真实值,但龙贝格算法相比较复合辛普森算法,高斯算法来说更加接近.对于代数精度来说,复合辛普森的代数精度为11,龙贝格代数精度为11,高斯代数精度为11.可见代数精度相同时,龙贝格的求积精度最小,所以相同条件下龙贝格求积公式最能接近准确值.数学与统计学院课程设计(实习)报告第10页总结随着数学实验的兴起,对整个数学课程教学改革起到了积极的推动作用,我们要熟悉的运用各种数学软件,解决数学运算中繁琐的问题,实现学习的简单,快捷化.同时意识到用MATLAB编程时,要实现代码的层次性,做到有规有矩,那样才能把MATLAB 运用自如.这次课程设计,用MATLAB实验对数值积分进行了实现,简介了5种不同的数值积分的方法,并且实现了其中的3中方法,实现过程中发现了各种方法之间的区别和联系.并且在实验过程中,使自己对数值积分和MATLAB更加的熟悉.做到了学习和实践相联系.参考文献[1]戈慈水.《数值分析》课程数值积分的MatLab实现问题的教学研究[M].时代教育出版社,2011.7[2]张志涌.精通MATLAB6.5版[M].北京航天航空大学出版社,2003.3.[3]陈杰,孙晓君.MATLAB数学实验[M].高等教育出版社,2006.6.[4]朱叶志.MATLAB数值分析与应用[M].北京:机械工业出版社,2009.[5]王正林.精通MATLAB科学计算[M].北京:电子工业出版社,2007.[6]萧树铁.大学数学实验[M].北京:高等教育出版社,1997.。