数值积分与微分摘要本文首先列举了一些常用的数值求积方法,一是插值型求积公式,以NewtonCotes公式为代表,并分析了复合型的NewtonCotes公式;另一个是GaussLedendre求积公式,并给出几个常用的GaussLedendre求积公式。其次,本文对数值微分方法进行分析,主要是差分型数值微分和插值型数值微分,都给出了几种常用的微分方法。然后,本文比较了数值积分与微分的关系,发现数值积分与微分都与插值或拟合密不可分。本文在每个方法时都分析了误差余项,并且在最后都给出了MATLAB的调用程序。关键词:插值型积分GaussLedendre差分数值微分插值型数值微分MATLAB1一、常用的积分方法计算积分时,根据NewtonLeibniz公式,()()()bafxdxFbFa但如果碰到以下几种情况:1)被积函数以一组数据形式表示;2)被积函数过于特殊或者原函数无法用初等函数表示3)原函数十分复杂难以计算这些现象中,NewtonLeibniz公式很难发挥作用,只能建立积分的近似计算方法,数值积分是常用的近似计算的方法。1.1插值型积分公式积分中的一个常用方法是利用插值多项式来构造数值求积公式,具体的步骤如下:在积分区间上[,]ab上取一组节点:01201,,,,()nnxxxxaxxxb。已知()kxf的函数值,作()xf的n次插值多项式,则(1)()10()()()()()(1)!nnxnnkknkffLxRxfxlxwxn其中,()klx为n次插值基函数,则得(1)+10()(()())1=[()]()[()](1)!bbnnaanbbnkknaakfxdxLxRxdxlxdxfxfxwxdxn()公式写成一般形式:0()()[]nbkknakfxdxAfxRf其中,01100110()()()()()()()()()bbkkkkaakkkkkkxxxxxxxxAlxdxdxxxxxxxxx(1)+11[][()](1)!bnnnaRffxwxdxn()显然,当被积函数f为次数小于等于n的多项式时,其相应的插值型求积公式为准确公式,即:0()()nbkkakfxdxAfx1.1.1求积公式的代数精度定义:求积公式对于任何次数不大于m的代数多项式()fx均精确成立,而对于1()mfxx不精确成立,则称求积公式具有m次代数精度。定理:含有1n个节点(0,1,,)kxkn的插值型求积公式的代数精度至少为n。21.2NewtonCotes公式1.2.1NewtonCotes公式将积分区间等分,并取分点为求积公式,这样构造出来的插值型求积公式就是NewtonCotes公式。()0()()nbnkkakfxdxbaCfx()其中,()0()nnkkbabaC且Cotes系数满足重要的关系式:()01(k=0,1,2,,n)nnkkC1n时,求积公式为梯形公式(两点公式):()[()()]2babafxdxfafb梯形公式具有1阶代数精度,余项为:3()[]()[,]12TbaRffabn=2时,求积公式为Simpson公式(三点公式):()[()4()()]62babaabfxdxfaffbSimpson公式具有3阶代数精度,余项为:5(4)1[]()()[,]902SbaRffabn=4时,求积公式为Cotes公式(五点公式):01234()[7()32()12()32()7()]90babafxdxfxfxfxfxfx其中,4kbaxakCotes公式具有5次代数精度,余项为:7(6)8[]()()[,]9454CbaRffab1.2.2复合NewtonCotes公式当积分区间过大时,直接使用NewtonCotes公式所得的积分的近似值很难得到保证,因此在实际应用中为了既能够提高结果的精度,又使得算法简便且容易在计算机上实现,往往采用复合求积的方法。所谓复合求积,就是先将积分区间分成几个小区间,并从每个小区间上用低阶NewtonCotes公式计算积分的近似值,然后对这些近似值求和,从而得到所求积分的近似值,由此得到一些具有更大实用价值的数值求积公式,统称为复合求积公式。将[,]ab区间n等分,记分点为(0,1,,)kxakhkn,其中,bahn称为步长,3然后在每个小区间内利用梯形公式,即可导出复合梯形公式:1111()()[()()]2kknnbxkkaxkkhfxdxfxdxfxfx若将所得积分近似值记为nT,并注意到0,nxaxb,则复合梯形公式为:11()=[()2()()]2nbnkakhfxdxTfafxfb其余项为:2210()()()=()[,]1212nnkTkfbahbahRfabn类似可得复合Simpson公式:111012()[()4()2()()]6nnbnkakkkhfxdxSfafxfxfb其中,1/212kkxxh.其余项为:4(4)()=()()[,]1802nSbahRfab1.2.3NewtonCotes公式在MATLAB中的实现1)复合梯形数值积分:调用形式:Z=trapz(X,Y)其中,X,Y分别代表数目相同的向量或者数值,Y与X的关系可以是函数形态或者离散形态;Z代表返回的积分值。2)自适应Simpson公式基本调用格式:q=quad(fun,a,b,tol,trace,p1,p2)其中:fun代表被积函数;a,b为积分的上下限;q为积分结果;tol为默认误差限,默认了1.e-6;trace表示取0表示不用图形显示积分过程,非0表示用图形显示积分过程;p1,p2为直接传递给函数fun的参数3)自适应Lobatto法数值积分:quadl()Quadl是高阶的自适应NewtonCotes数值积分法函数,比quad函数更有效,精度更高,使用方法与quad完全相同。1.3GaussLedendre求积公式1、精度较高GaussLedendre公式(1)Ledendre多项式。以Gauss点kx为零点的n次多项式:12()()()()nnpxxxxxxx上式称为Ledendre多项式(2)GaussLedendre求积公式。以Ledendre多项式的n个实根为节点的插值求积公式为GaussLedendre求积公式。考虑在[1,1]上Gauss求积公式的构造1)一个节点411()2(0)fxdxf2)两个节点二次Ledendre正交多项式221()(31)2pxx所以两点的GaussLedendre求积公式为:1111()(-)+()33fxdxff对于一般区间的积分,可以用22abbaxt将[,]ab区间转化为[1,1],即1111()()222baabbafxdxftdt然后用相应的GaussLedendre求积公式计算。(3)一般形式的GaussLedendre求积公式为:1()()()nbjjajwxfxdxAfx其中()wx是一个权重函数,jA为系数,jx为横坐标上的节点。因为()1wx,所以,一个n点的求积公式具有如下形式:111()()njjjfxdxAfx其中,()jfx是函数()fx在节点jx处的值,节点jx是Ledendre正交多项式的根。222[()](1)jnjjApxx给出x和A的表格:nLedendre正交多项式kxkA11()pxx022221()(31)2pxx0.5775313331()(53)2pxxx0.77460,0.000000.55556,0.8888944241()(35303)8pxxx0.86114,0.339980.34785,0.652152、在MATLAB中的实现MATLAB没有提供GaussLedendre的有关计算函数,此处给出一部分的编程代码:functionq=gaussL(f,a,b,x,A)N=length(x);T=zeros(1,N);T=(a+b)/2+((b-a)/2)*x;q=((b-a)/2)*sum(A.*feval(‘f’.T));其中,f为被积函数;x和A的值可有上表查到。5二、数值微分数值微分的建立常用的三种思路:1、直接从微分的定义出发,通过近似的处理(泰勒展开),得到数值微分的近似公式;2、利用插值的基本思想,采用插值近似公式,对插值公式的近似求导得到原数值微分的近似公式3、根据已知数据,利用最小二乘拟合的方法,得到近似的函数,然后对此近似函数求微分就可以得到数值微分的近似公式。2.1差分法近似微分1、计算公式在微积分中,一阶微分的计算可以在相邻点xh和x间函数取得极限求得。000()()()()()()22()limlimlimhhhhhfxfxfxhfxfxfxhfxhhh所以给出下列差分近似式子:一阶向前差分:()()()fxhfxfxh一阶向后差分:()()()fxfxhfxh精度较高的一阶中心差分:()()22'()hhfxfxfxh2、在MATLAB中的实现调用形式:Y=diff(X,n)其中:X表示求导变量,可以是向量或者矩阵。如是矩阵形式则按照各列做差分;n表示n阶差分,即差分n次;用diff函数进行离散数据的近似求导与向前差分近似,但误差较大。可以将数据利用插值或者拟合得到多项式,然后对近似多项式进行微分。2.2插值型近似微分1、方法概述Lagrange插值公式,使得()()()nnfxLxRx其中,0()()()nnkkkLxlxfx,(1)1[()]()()(+1)nnnfxRxwxn!利用插值公式近似替代原函数,再对插值公式求导,可得插值型求导公式为:()()()()mmnfxLx6余项为:(1)()1[()]()[()](+1)knknnkdfxRxwxdxn!特别的,n=1时,可得一阶微分两点公式为:()()()fxhfxfxh()()()fxfxhfxhn=2时,'0200121'()()[3()4()()]2fxLxfxfxfxh'121021'()()[()()]2fxLxfxfxh'2220121'()()[()4()3()]2fxLxfxfxfxh下面给出一个常用的五点公式:021121'()[()8()8()()]12fxfxfxfxfxh2、三次样条插值函数求微分的MATLAB函数由于三次样条插值的导数近似被插值函数导数的效果很好,此处给出三次样条插值函数的MATLAB调用步骤:Step1:对离散数据用csapi函数(或者spline函数),得到其三次样条插值函数调用形式pp=csapi(x,y)其中,x,y分别为离散数据对的自变量和因变量;pp为得到的三次样条插值函数Step2:用fnder函数求三次样条插值函数的导数调用形式fprime=fnder(f,dorder)其中,f为三次样条插值函数,dorder为三次样条插值函数的求导阶数;fprime为得到的三次样条插值函数的导数值Step3:用fnval函数求导函数在未知点处的导数值调用形式v=fnval(fprime,x)其中,fprime为三次样条插值函数导函数;x为未知点处自变量值;v为未知点处的导数值。三、数值积分与微分的比较1、数值解法微积分是高等数学的重要内容,在实际工程中有许多重要的应用。微积分的数值解法,是不同于高等数学中的解析方法,适合求解没有或者很那求出微分或者积分解析表达式的实际问题的计算。2、数值积分与微分与插值和拟合的关系数值微分与数值积分依