【数值分析】复化积分公式
2015-02-02 11:00
519 查看
对于积分:
![](http://img.blog.csdn.net/20150130195600851?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ3dlaXR3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
只要找到被积公式的原函数F(x),利用牛顿莱普利兹公式有:
![](http://img.blog.csdn.net/20150130195639231?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ3dlaXR3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](file:///C:/Users/TW/Documents/My%20Knowledge/temp/4d162b9b-e7a5-4548-85c6-fd165db13099_4_files/2.png)
但是,实际使用这种求积分的方法往往是有困难的,因为大量的被积函数的原函数是不能用初等函数表示的;另外,当f(x)是由测量或数值计算给出的一张数据表时,牛顿莱普利兹公式也无法直接运用,因此有必要研究积分的数值计算问题。
对于一些理论的推导,大家可以看看维基百科,下面我主要给出牛顿-科特斯公式在n=1(梯形求积公式)、n=2(辛普森公式)的情况,并通过代码实现。
梯形公式:
![](http://img.blog.csdn.net/20150130195643396?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ3dlaXR3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](file:///C:/Users/TW/Documents/My%20Knowledge/temp/4d162b9b-e7a5-4548-85c6-fd165db13099_4_files/3.png)
辛普森公式:
![](http://img.blog.csdn.net/20150130195617013?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ3dlaXR3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](file:///C:/Users/TW/Documents/My%20Knowledge/temp/4d162b9b-e7a5-4548-85c6-fd165db13099_4_files/4.png)
应用高阶牛顿-科特斯公式计算积分时,会出现数值不稳定的情况,而低阶公式往往因为积分步长过大使得离散误差变大,因此,为了提高求积公式的精度,可以把积分区间分成若干个子区间,在每个子区间上使用低阶求积公式,然后将结果加起来,这种方法称为复化求积法。
复化梯形公式
将区间[a,b]划分为n等分,步长为h=(b-a)/h,节点为
![](http://img.blog.csdn.net/20150130195650790?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ3dlaXR3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
,在每个子区间
![](http://img.blog.csdn.net/20150130195654550?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ3dlaXR3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
使用梯形公式得:
![](http://img.blog.csdn.net/20150130195627871?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ3dlaXR3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](file:///C:/Users/TW/Documents/My%20Knowledge/temp/4d162b9b-e7a5-4548-85c6-fd165db13099_4_files/7.png)
复化辛普森公式
根据复化梯形公式的推导,同理可得复化辛普森公式为:
![](http://img.blog.csdn.net/20150130195631412?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ3dlaXR3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](file:///C:/Users/TW/Documents/My%20Knowledge/temp/4d162b9b-e7a5-4548-85c6-fd165db13099_4_files/8.png)
下面我们通过实例来实现复化梯形公式和复化辛普森公式:
对于函数f(x)=sin(x)/x,试用复化梯形公式和复化辛普森公式计算函数f(x)在[0,1]上的积分。
具体的程序实现如下:
运行结果如下图:
![](http://img.blog.csdn.net/20150130195705267?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ3dlaXR3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
结果分析:
比较复化梯形公式和复化辛普森公式两种方法的运行结果,我们发现复化辛普森公式与准确值0.9460831更加接近,复化梯形公式只有2位有效数字,而复化辛普森公式有6为有效数字。
原文:/article/1509036.html
作者:nineheadedbird
只要找到被积公式的原函数F(x),利用牛顿莱普利兹公式有:
![](file:///C:/Users/TW/Documents/My%20Knowledge/temp/4d162b9b-e7a5-4548-85c6-fd165db13099_4_files/2.png)
但是,实际使用这种求积分的方法往往是有困难的,因为大量的被积函数的原函数是不能用初等函数表示的;另外,当f(x)是由测量或数值计算给出的一张数据表时,牛顿莱普利兹公式也无法直接运用,因此有必要研究积分的数值计算问题。
对于一些理论的推导,大家可以看看维基百科,下面我主要给出牛顿-科特斯公式在n=1(梯形求积公式)、n=2(辛普森公式)的情况,并通过代码实现。
梯形公式:
![](file:///C:/Users/TW/Documents/My%20Knowledge/temp/4d162b9b-e7a5-4548-85c6-fd165db13099_4_files/3.png)
辛普森公式:
![](file:///C:/Users/TW/Documents/My%20Knowledge/temp/4d162b9b-e7a5-4548-85c6-fd165db13099_4_files/4.png)
应用高阶牛顿-科特斯公式计算积分时,会出现数值不稳定的情况,而低阶公式往往因为积分步长过大使得离散误差变大,因此,为了提高求积公式的精度,可以把积分区间分成若干个子区间,在每个子区间上使用低阶求积公式,然后将结果加起来,这种方法称为复化求积法。
复化梯形公式
将区间[a,b]划分为n等分,步长为h=(b-a)/h,节点为
,在每个子区间
使用梯形公式得:
![](file:///C:/Users/TW/Documents/My%20Knowledge/temp/4d162b9b-e7a5-4548-85c6-fd165db13099_4_files/7.png)
复化辛普森公式
根据复化梯形公式的推导,同理可得复化辛普森公式为:
![](file:///C:/Users/TW/Documents/My%20Knowledge/temp/4d162b9b-e7a5-4548-85c6-fd165db13099_4_files/8.png)
下面我们通过实例来实现复化梯形公式和复化辛普森公式:
对于函数f(x)=sin(x)/x,试用复化梯形公式和复化辛普森公式计算函数f(x)在[0,1]上的积分。
具体的程序实现如下:
#include<stdio.h> #include<math.h> double Function(double x)//所要计算积分的函数f(x) { if(x==0)//sin(x)/x在0处的取值为1 return 1; else return sin(x)/x; } //复化梯形公式 double Trapz(double a,double b,int n) { double h=(b-a)/n; double T=0; for(int i=1;i<n;i++) { T=T+Function(a+i*h); } T*=2; T=(Function(a)+Function(b)+T)*h/2; return T; } //复化辛普森公式 double MulripleSimpson(double a,double b,int n) { double h=(b-a)/n; double T=0; for(int i=0;i<n;i++) { T=T+Function(a+i*h)+4*Function(a+(i+0.5)*h)+Function(a+(i+1)*h); } T=T*h/6; return T; } void main() { printf("使用复化梯形公式可得:%f\n",Trapz(0,1,8)); printf("使用复化辛普森公式可得:%f\n",MulripleSimpson(0,1,4)); }
运行结果如下图:
结果分析:
比较复化梯形公式和复化辛普森公式两种方法的运行结果,我们发现复化辛普森公式与准确值0.9460831更加接近,复化梯形公式只有2位有效数字,而复化辛普森公式有6为有效数字。
原文:/article/1509036.html
作者:nineheadedbird
相关文章推荐
- 【数值分析】复化积分公式
- 复化梯形求积公式 c语言实现 数值积分
- 数学分析_Tom M.Apostol 定理7.6 用阿贝尔变换证明Riemann-Stieltjes积分的分部积分公式
- 数值积分之Gauss求积法五点公式
- 复化梯形和复化辛普生公式,积分函数在0~1上积分结果应该是PI
- 数值积分之复化求积法
- 【数值分析】微分求积:复化梯形、复化辛浦生
- 数值分析 第六章 数值积分
- Romberg(龙贝格)求积公式求解数值积分时的注意事项
- 龙贝格求积公式 c语言实现 数值积分
- 【数值分析】微分求积:复化梯形、复化辛浦生
- python实现数值积分的Simpson方法实例分析
- python实现数值积分的Simpson方法实例分析
- 变步长梯形求积公式 c语言实现 数值积分
- 数值积分之Simpson公式与梯形公式
- 数学分析_Tom M.Apostol 定理7.6 用阿贝尔变换证明Riemann-Stieltjes积分的分部积分公式
- 数值分析
- MATLAB数值分析之牛顿插值
- 利用复化梯形积分和龙贝格积分法计算积分
- lucene-2.9.0 数值类型的索引和检索分析