变步长的梯形积分方法的应用
变步长辛卜生积分法
探索与其他算法的结合
01
与机器学习算法结 合
将变步长辛卜生积分法与机器学 习算法结合,实现数据驱动的系 统建模和预测。
02
与优化算法结合
将变步长辛卜生积分法与优化算 法结合,实现系统参数优化和控 制系统设计。
03
与人工智能算法结 合
将变步长辛卜生积分法与人工智 能算法结合,实现智能决策和控 制系统。
算法加速技术
采用算法加速技术,如矩阵运算优化、数值稳定 化等,提高算法的运算效率。
拓展应用领域
复杂系统建模
将变步长辛卜生积分法应用于更 复杂的系统建模,如多体动力学、 流体动力学等。
工程领域应用
将变步长辛卜生积分法应用于工 程领域,如机械振动、控制系统 等,解决实际问题。
生物医学建模
将变步长辛卜生积分法应用于生 物医学建模,如生物分子动力学、 药物设计等。
此外,变步长辛卜生积分法还可以用于信号的 滤波、去噪和压缩等处理,从而提高信号处理 的效果和质量。
05
变步长辛卜生积分法的未来发展
改进算法的效率
优化算法参数
通过调整算法中的参数,如步长、积分区间等, 提高算法的效率和精度。
引入并行计算
利用多核处理器或分布式计算资源,实现算法的 并行化,加快计算速度。
02
变步长策略
变步长策略的定义
定义
变步长策略是一种在数值计算中调整 步长的方法,以适应不同阶段的需求 和精度要求。
目的
通过动态调整步长,提高数值计算的 效率和精度,减少计算量,避免不必 要的误差累积。
变步长策略的原理
原理
根据计算过程中误差的变化情况,适 时地增大或减小步长,以保持计算的 精度和稳定性。
该方法基于辛卜生公式,通过将积分区间划分为若干个子区 间,并在每个子区间上应用辛卜生公式进行数值积分,最终 得到整个积分区间的近似值。
复化梯形法 复化矩形法 变步长梯形 变步长辛普森
陕西科技大学机械教改班用C++的积分其实积分的思想就是,微分—>求和—>取极限,如果是用纯手工法那就是先对一个函数微分,再求出它的面积,在取极限,因为我们的计算速度和计算量有限,现在有了计算机这个速度很快的机器,我们可以把微分后的每个小的面积加起来,为了满足精度,我们可以加大分区,即使实现不了微分出无限小的极限情况,我们也至少可以用有限次去接近他,下面我分析了四种不同的积分方法,和一个综合通用程序。
一.积分的基本思想1、思路:微分—>求和—>取极限。
2、Newton —Leibniz 公式 ⎰-=ba a Fb F dx x f )()()( 其中,)(x F 被积函数)(x f的原函数。
3、用计算机积分的思路在积分区间内“微分—>求和—>控制精度”。
因为计算机求和不可以取极限,也就是不可以无限次的加下去,所以要控制精度。
二.现有的理论1、一阶求积公式---梯形公式⎰=+-=b a T b f a f a b dx x f )]()([2)( 他只能精确计算被积函数为0、1次多项式时的积分。
2、二阶求积分公式——牛顿、科特斯公式 ⎰=+++-=ba Sb f a b f a f a b dx x f )]()2(4)([6)(他只能精确计算被积函数为0、1、2、3次多项式时的积分。
三.四种实现方法1.复化矩形法将积分区间[a,b]等分成n 个子区间:],[],[],[],[],[112322110n n n n x x x x x x x x x x ---、、、 则h=(b-a)/n,区间端点值k x =a+kh)hf(x ))f(x x (x I 11121=-=)()()x (22232x hf x f x I =-=............................)()()(111n ---=-=n n n n x hf x f x x I∑==ni i x hf T 1n )(源程序:#include <iostream.h>#include<math.h>double f(double x) //计算被积函数{double y;y=log(1+x)/(1+x*x); //被积函数return y;}double Tn(double a,double b,int n) //求Tn{double t=0.0;double xk; //区间端点值double t1,t2; //用来判断精度do{double h=(b-a)/n;for(int k=1;k<=n-1;k++) //每一小段的矩形叠加 {t1=t;xk=a+k*h;t+=h*f(xk);t2=t;}n++; //如果精度不够就对区间再次细分,直到达到精度要求 }while(fabs(t1-t2)<=1e-7); //判断计算精度return t;}void main(){double a=0.0; //积分下线double b=2.0; //积分上限int n=1024; //把区间分为1024段cout<<Tn(a,b,n)<<endl; //输出积分结果}执行结果:2.复化梯形法方法和复化矩形法类似,只是把原来的矩形小面积变成了梯形小面积,但是精确度明显提高了,也就是说达到同样的精度需要的时间少了。
c.2数值积分中复化simpson公式和变步长梯形法内容
c.2数值积分中复化simpson公式和变步长梯形法内容1. 引言1.1 概述数值积分是数学领域中重要的计算方法之一,广泛应用于工程、物理、经济学等多个学科。
它通过近似求解定积分来解决无法进行解析求解的复杂函数问题。
在数值积分方法中,复化Simpson公式和变步长梯形法都是常见且有效的技术手段。
1.2 文章结构本文将围绕复化Simpson公式和变步长梯形法展开讨论,并对它们进行比较与选择。
文章主要分为引言、复化Simpson公式、变步长梯形法、两者比较与选择以及结论部分。
1.3 目的本文旨在介绍复化Simpson公式和变步长梯形法这两种数值积分方法,探讨它们的基本原理、方法步骤以及在实际应用中的优势和适用场景。
通过对比与选择这两种方法,可以为读者提供更好地理解和运用数值积分技术的指导,并为未来研究方向和改进空间提供一定参考。
2. 复化Simpson公式:2.1 基本原理:复化Simpson公式是一种数值积分方法,用于近似计算定积分的值。
它基于简单的Simpson公式,并将区间等分为若干子区间,在每个子区间上应用Simpson公式来进行积分计算。
2.2 方法步骤:下面是复化Simpson公式的具体步骤:1. 将要积分的区间[a, b]等分为n个子区间,每个子区间宽度为h。
2. 根据Simpson公式,计算每个子区间的积分值。
3. 将所有子区间的积分值相加,得到整个区间[a, b]上的近似积分值。
具体而言,对于每个子区间[x(i-1), x(i)], i从1到n,使用Simpson公式进行积分近似。
即将该子区间均匀地划分为两部分,并以梯形面积和抛物线面积来逼近曲线下面积。
然后将所有n个子区间的近似积分值相加,得到最终的数值积分结果。
2.3 应用和优势:复化Simpson公式在数学和工程领域中广泛应用于需要进行定积分计算的问题。
它的优势包括:1. 相比于简单的Simpson公式,复化Simpson公式可以更准确地近似计算定积分的值。
高校(理工类)数学变步长的梯形法则教学(课堂讲义)
1 (Tn (h) 2 H n (h)) 3 h 1 h h 所以S 2 n ( ) (T2 n ( ) 2 H 2 n ( )) 2 3 2 2
变步长Simpson求积公 式
程序实现的基本思想: Tn (h) H n (h) S n (h) h h h T2 n ( ) H 2 n ( ) S 2 n ( ) 2 2 2 h h 当 S 2 n ( ) S n (h) 时,取S 2 n ( )为 2 2 定积分的近似值,否则 将分点加密一倍, 重复上述过程。
[例2]
11 1 1 1 I S 5 ( h) [( ) 2 ( 6 5 1 0 11 1 0.2 1 1 1 1 )] 1 0.4 1 0.6 1 0.8 1 1 1 1 1 1 1 1 1 ( 2 ( )) 30 2 1.2 1.4 1.6 1.8 2 0.69315 24 ( 4) 因为 f ( x) 24 5 1 x
变步长Simpson求积算 法
1.输入a, b, , M ; 2. 计算Tn (h), H n (h), S n (h) h( f (a) f (b)) (1) n 1; h b a; T1 ; 2 ab 1 (2) H n hf ( ); S1 (T1 2 H n ); 2 3 h h h 3. 计算T2 n ( ), H 2 n ( ), S 2 n ( ) 2 2 2 1 h (1) T2 (T1 H n ); n 2n; h ; 2 2 n 1 1 (2) H n h f (a ( j )h); S 2 (T2 H n ); 2 3 j 1
复化梯形公式和变步长法的比较
复化梯形法 变步长法
变步长梯形求积法计算定积分(word文档良心出品)
变步长梯形求积法计算定积分1.原理:变步长求积法的思想是利用若干小梯形的面积代替原方程的积分,当精度达不到要求时,可以通过增加点数对已有的区间再次划分,达到所需精度时即可;其中由于新的式子中有原来n点中的部分项主要公式:T2n=T n/2+(h/2)*Σf(x k+0.5);2.源程序如下:#include"math.h"#include"iostream.h"double f(double x){double s;s=log(x*x);return(s);}double ffts(double a,double b,double eps){int n,k;double fa,fb,h,t1,p,s,x,t;fa=f(a);fb=f(b);n=1;h=b-a;t1=h*(fa+fb)/2;p=eps+1;while(p>=eps){s=0;for(k=0;k<=n-1;k++){x=a+(k+0.5)*h;s=s+f(x);}t=t1/2+h*s/2;p=fabs(t1-t);cout<<"步长n为:"<<n<<"时的"<<"Tn="<<t1<<'\t'<<"T2n="<<t<<'\t'<<"误差变化:"<<p<<endl;t1=t;n=n*2;h=h/2;}return(t);}void main(){double result,a,b,eps;cout<<"需要求解的积分式为f(x)=log(x^2)"<<endl;cout<<"输入边界值a="<<'\t';cin>>a;cout<<"输入边界值b="<<'\t';cin>>b;cout<<"输入误差限"<<'\t';cin>>eps;result=ffts(a,b,eps);cout<<"经过变步长梯形求积法得方程结果为:"<<result<<endl;}3.运行结果:根据程序提示依次输入积分上限和积分下限,然后输入误差限;本程序需要预先在程序中输入需要积分方程的表达式。
变步长辛卜生积分法
}
过
} void main()
{
CIntegral T;
程
T.Simpson(1,10,1E-7);
cout<<“积分值
实 ="<<T.Simpson(1,10,1E-
7)<<endl;
现}
过
程
实
现 积分值= -2.7
结
果
〈〈科学与工程数值算 参 法(Visual C++版)〉〉
考
〈〈 大 学 物 理 习 题 计 算 机算法〉〉
算法原理
简 实现过程
实现结果
介 参考文献
心得体会
实
变 步 长 辛 补 b 生
(Simpson)求积分 f (x)dx
a
现 是计算定积分的经典方法,
其计算步骤
原 如下:
理
T (1)用梯形公式计算 hf a f b/ 2
实 ,其中n=1,h=b-a,且令n Sn=Tn
(2)用变步长梯形法则计算
程 In=Tn;
while(!done)
{
实
double temp(0.0);
for(int k=0;k<=n-1;k++)
{
现
double x=a+(k+0.5)*h; temp+=Func(x);
}
过
T2n=(Tn+h*temp)/2.0; I2n=(4.0*T2n-Tn)/3.0;
if(fabs(I2n-In)<eps)
done=1;
程 else
{
Tn=T2n;
实 n*=2;
h/=2;
变步长梯形公式
变步长梯形公式变步长梯形公式是数值积分中一种用于近似计算定积分的方法。
在数学中,定积分是一个数学概念,代表了曲线与坐标轴之间的面积。
然而,有些曲线的积分无法通过解析方法进行求解,因此需要使用数值积分方法进行近似计算。
变步长梯形公式是一种数值积分方法,它通过将被积函数的曲线分割成多个小梯形来近似计算定积分的值。
这个方法的核心思想是将整个积分区间分割成多个小区间,然后在每个小区间内使用梯形公式来计算面积,并将这些面积相加得到最终的近似值。
变步长梯形公式的具体实现步骤如下:1. 将积分区间[a, b]等分为n个小区间,每个小区间的长度为h=(b-a)/n。
2. 在每个小区间内,使用梯形公式来计算面积。
梯形公式可以表示为:S = (f(x[i])+f(x[i+1]))*h/2,其中x[i]和x[i+1]分别表示小区间的左边界和右边界,f(x)表示被积函数。
3. 将每个小区间的面积相加得到整个积分区间的近似值:I ≈(f(a)+2f(x1)+2f(x2)+.+2f(x[n-1])+f(b))*h/2。
4. 如果需要提高计算精度,可以通过增加小区间的数量n来减小步长h,进而得到更精确的近似值。
变步长梯形公式的优点是简单易懂、易于实现,适用于一般的函数。
然而,它也存在一些缺点。
首先,当被积函数在积分区间上的变化较大时,梯形公式可能会产生较大的误差。
其次,该方法对积分区间的分割方式较为敏感,不同的分割方式可能会得到不同的近似值。
因此,在实际应用中,需要根据具体问题选择合适的分割方式和步长。
尽管变步长梯形公式存在一些局限性,但它仍然是一种常用的数值积分方法,广泛应用于科学计算、工程计算等领域。
在实际问题中,可以根据需要选择合适的数值积分方法,以获得更精确的结果。
变步长梯形求积法计算定积分
变步长梯形求积法计算定积分1.原理:变步长求积法的思想是利用若干小梯形的面积代替原方程的积分,当精度达不到要求时,可以通过增加点数对已有的区间再次划分,达到所需精度时即可;其中由于新的式子中有原来n点中的部分项主要公式:T2n=T n/2+(h/2)*Σf(x k+0.5);2.源程序如下:#include"math.h"#include"iostream.h"double f(double x){double s;s=log(x*x);return(s);}double ffts(double a,double b,double eps){int n,k;double fa,fb,h,t1,p,s,x,t;fa=f(a);fb=f(b);n=1;h=b-a;t1=h*(fa+fb)/2;p=eps+1;while(p>=eps){s=0;for(k=0;k<=n-1;k++){x=a+(k+0.5)*h;s=s+f(x);}t=t1/2+h*s/2;p=fabs(t1-t);cout<<"步长n为:"<<n<<"时的"<<"Tn="<<t1<<'\t'<<"T2n="<<t<<'\t'<<"误差变化:"<<p<<endl;t1=t;n=n*2;h=h/2;}return(t);}void main(){double result,a,b,eps;cout<<"需要求解的积分式为f(x)=log(x^2)"<<endl;cout<<"输入边界值a="<<'\t';cin>>a;cout<<"输入边界值b="<<'\t';cin>>b;cout<<"输入误差限"<<'\t';cin>>eps;result=ffts(a,b,eps);cout<<"经过变步长梯形求积法得方程结果为:"<<result<<endl;}3.运行结果:根据程序提示依次输入积分上限和积分下限,然后输入误差限;本程序需要预先在程序中输入需要积分方程的表达式。
第三章 第四节 变步长积分法
一、引言
变步长积分法
二、以梯形公式为例来介绍这一算法
一、引言
利用复化梯形公式和复化Simpson公式来进行定积 分的近似计算既简便, 又可以达到满意的计算精度。
但是为了确定把积分区间 a, b 分成多少个子区间,即 n
取多大, 则需依据误差表达式作事先估计, 就要Байду номын сангаас析
被积函数的高阶导数,而这是很困难的。
S2n Sn
(4.4)
来控制计算过程。
2n
k 0
f k f x dx
b a
则得到
I Tn 4 I T2 n
I T2 n
1 T2 n Tn 3
(4.3)
这说明,若用不等式(4.1)来控制计算过程。则 T2n 与积 分精确值之差大约是允许误差的三分之一,因此计算可 以至此为止。误差的这种估计法称为后天估计(或事后 估计)。 对于 Simpson 公式, 也可以同样进行区间逐次分 半,并可由不等式
T n
1 ba T E2 n f I T2 n 12 2n
3 2 n 1 k 0
f
k
将两式相除并注意当 n 充分大时
b a n 1
n
f
k 0 k
b
a
f x dx
b a 2 n 1
T2n Tn
(取绝对误差)
(4.1)
T2 n Tn T2 n
(取相对误差)
(4.2)
是否满足,如果满足,则取 T2n 为所求定积分之近似 值,否则区间继续分半,重复上述过程直至条件满足。
现在我们来分析为什么可以通过(4.1)式来控制 计算过程。由(3.2)式可知
数值分析4-4(李查逊外推加速法)讲解
经过二分后新增分点为 x k 1
2
xk 1
2
1 ( x k x k 1 ) 2
用复化梯形公式求得该区间上的积分值为
h/ 2 f ( x k ) 2 f ( x k 1 ) f ( x k 1 ) 2 2
这里的h是二 故在整个区间上的积分值为 分前的步长 n1
n1
h 1 4 ˆ 6 ˆ 8 T1 ( ) I h 2 h 3 h ... 2 16
16 h 1 T2 ( h) T1 T1 ( h) 15 2 15
若
则又可以进一步消去展开式中的 h4 项,而有
T2 ( h) I 1h6 2 h8 ...
h 4T ( ) T ( h) 2 T1 ( h) I 1 h4 2 h6 ... 3
那么 则得
h 与龙贝格公式的构造相比,这里的 T1 ( h), T1 ( ),... 2
就是辛甫生公式。 又根据 T1 ( h) I 1h4 2 h6 ... 有
2. 变步长的梯形法 设将区间[a, b]分为n等份,共有 n+1 个分点
ba 其步长 h ,在每个小区间 [x , x ] 上 k k+1 n
用梯形公式计算为
h I k f ( x k ) f ( x k 1 ) 2
如果再二分一次,则步长减半,即h/2,分点
增至2n+1个,记区间[xk,xk+1]上
1 sin
x
x
dx
详见书上本节例2,计算时要注意公式中步长 的含义。
请回答:本例最后结果二分多少次?
共有多少个分点?
答: 二分10次,共有210 +1=1025个分点, 将区间平分为210=1024份。
变步长的梯形积分方法的应用
CENTRAL SOUTH UNIVERSITY 数值分析实验报告变步长的梯形积分方法的应用一、问题背景实际问题当中常常需要计算积分,有些数值方法,如微分方程和积分方程的求解,也都和积分计算相关联。
依据人们所熟知的微积分基本定理,对于积分()dx x f I a ⎰=b, 只要找到被积分函数()x f 的原函数()x F ,便有下列牛顿-莱布尼茨(Newton-Leibniz )公式:()()()a F b F dx x f b-=⎰a . 但实际使用这种求积分方法往往有困难,因为大量的被积函数,诸如()0sin ≠x xx ,2x e -等,其原函数不能用初等函数表达,故不能用上述公式计算。
即使能求得原函数的积分,有时计算也十分困难。
例如对于被积函数()611x x f +=,其原函数 ()C x x x x x x x x F ++-+++⎪⎭⎫ ⎝⎛-+=1313ln 3411arctan 61arctan 3122, 计算()a F ,()b F 仍然很困难,另外,当()x f 是由测量或数值计算给出的一张数据表时,牛顿-莱布尼茨公式也不能直接运用。
因此有必要研究积分的数值计算问题。
二、数学模型由于牛顿-科特斯积分公式在8≥n 时不具有稳定性,故不能通过提高阶数的方法来提高求积精度。
为了提高精度通常可以把积分区间划分成若干的子区间(通常是等分),再在每个子区间上用低阶求积公式。
这种方法称为复合求积法。
复合梯形法虽然方法简单,但是却不能估计积分精度,这有时候是很不方便的。
要想控制积分精度,可以采用如下的方法,设积分区间已经划分为n 个子区间,这时再把区间划分更细,给出新的积分结果,如果前后两次积分的差比给定的误差容限小的话,则停止细华否则继续增加积分区间。
这种方法原理很简单也 容易实现,但是实际计算中一般采用的比较少,因为这种方法比较机械效率不是太高,实际上采用比较多的通常是Romberg 方法。
4.2 龙格库塔法
重复积分过程,直到相邻两次的积分值R2n 与Rn 满足 下列关系:
| R2n Rn | | R2n | 1
R2 n Rn | | R2 n
其中 为允许的误差限。
| R2n | 1
例1:利用龙贝格法计算单摆的振荡周期 T l /2 d T 4 1 g 0 2 0 [1 sin ( )sin 2 ]2 2 g 9.8m/s2 , 其中 l 5m , 0 20/ , 105 program main external f call romb(0.,1.5708,1e-5,r2,f) write(*,"(3x,'B=',e12.6)") r2 End function f(x) f=4*sqrt(5/9.8)/(1-sin(10/3.14159)**2*sin(x)**2)**(1/2) end
subroutine romb(a,b,ep,r2,f) h=b-a t1=h/2.*(f(a)+f(b)) n=1 5 s=0.0 do k=0,n-1 s=s+f(a+(k+0.5)*h) end do t2=t1/2.+h/2.*s s2=t2+(t2-t1)/3. if(n/=1)goto 20 15 n=n+n h=h/2 t1=t2 s1=s2 goto 5 20 c2=s2+(s2-s1)/15. if(n/=2)goto 40
共有 n 1个分点 xk a kh, h b a , k 0,1,2,, n 用Tn 表示简单梯形法所求得的积分值。 1、考察一个子段 [ xk , xk 1 ], 其中点为 xk 1
2
n
1 ( xk xk 1 ), 2
MATLAB复化梯形法及龙贝格法计算定积分
姓名:樊元君学号:2012200902 日期:2012.11.061.实验目的:掌握复化梯形法与龙贝格法计算定积分。
2.实验内容:分别写出变步长梯形法与龙贝格法计算定积分的算法,编写程序上机调试出结果,要求所编程序适用于任何类型的定积分,即能解决这一类问题,而不是某一个问题。
实验中以下列数据验证程序的正确性。
求。
3.程序流程图:●变步长梯形法流程图:●龙贝格法流程图:4.源程序:●变步长梯形法:function [ y ] =BTX(a,b,e) a=input('a=');b=input('b=');e=input('e=');h=(b-a);t1=((f(a)+f(b))*h)/2;t2=0; %准备初值%while abs(t2-t1)>e %while语句控制计算精度以及控制计算时长if t2~=0 %按照变步长梯形法h=h/2; %递推公式求二分后积分值t1=t2;ends=0;x=a+h/2;while x<bs=s+f(x);x=x+h;endt2=(t1/2)+(h/2)*s;enddisp('插值结果=');disp(t2);endfunction [ y ] =f(x) %被积分函数%if x~=0y=sin(x)/x;elsey=1;endend●龙贝格法程序:function [ y ] =LB(a,b,e)format longa=input('a=');b=input('b=');e=input('e=');h=(b-a);t1=((f(a)+f(b))*h)/2;k=1;s=0;s1=0;s2=0;c2=0;c1=0;r1=0;r2=0; %准备初值% while k==1||k==2||k==3||k>=4s=0;x=a+h/2;while x<bs=s+f(x);x=x+h;endt2=(t1/2)+(h/2)*s;s2=t2+(t2-t1)/3;if k==1k=k+1;h=h/2;t1=t2;s1=s2;continueendc2=s2+(s2-s1)/15;if k==2c1=c2; k=k+1;h=h/2;t1=t2;s1=s2;continueendr2=c2+(c2-c1)/63;if k==3r1=r2;c1=c2; k=k+1;h=h/2;t1=t2;s1=s2; continueendif abs(r2-r1)<ebreakelser1=r2;c1=c2; k=k+1;h=h/2;t1=t2;s1=s2;continueendenddisp('插值结果=');disp(r2);endfunction [ y ] =f(x) %被积分函数% if x~=0y=sin(x)/x;elsey=1;endend5.运行结果:6.实验小结:(1)刚开始没注意到积分中,被积函数在x=0点函数值为1,而编程中函数定义f(x)=sin(x)/x,当x=0时,程序只能得到结果0/0=NaN(无穷大),导致后面积分计算算法完全失去意义,后来采取if和else以特殊情况对待x=0,才解决问题;(2)龙贝格法是对变步长梯形法的升华,在对复合梯形法理解透彻,并且编程合理,再去解决龙贝格法编程,容易很多;(3)充分理解两个算法的内涵和推理过程,对于编程正确性有很大帮助,刚开始由于对变步长梯形法理解不到位,一处循环采用if语句(本应采用while)导致计算结果不受约束条件约束的错误;(4)由于龙贝格法至少要算4个T值后才有R值,但由于龙贝格法收敛快,导致第一个R值就已经达到相当位数的有效数字,而导ε≤约束条件根本起不到致检验数据中的0.00001应有的精度约束效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CENTRAL SOUTH UNIVERSITY 数值分析实验报告
变步长的梯形积分方法的应用
一、问题背景
实际问题当中常常需要计算积分,有些数值方法,如微分方程和积分方程的求解,也都和积分计算相关联。
依据人们所熟知的微积分基本定理,对于积分
()dx x f I a ⎰=b
, 只要找到被积分函数()x f 的原函数()x F ,便有下列牛顿-莱布尼茨(Newton-Leibniz )公式:
()()()a F b F dx x f b
-=⎰a . 但实际使用这种求积分方法往往有困难,因为大量的被积函数,诸如
()0sin ≠x x
x ,2x e -等,其原函数不能用初等函数表达,故不能用上述公式计算。
即使能求得原函数的积分,有时计算也十分困难。
例如对于被积函数
()6
11x x f +=,其原函数 ()C x x x x x x x x F ++-+++⎪⎭⎫ ⎝⎛-+=1
313ln 3411arctan 61arctan 3122, 计算()a F ,()b F 仍然很困难,另外,当()x f 是由测量或数值计算给出的一张数据表时,牛顿-莱布尼茨公式也不能直接运用。
因此有必要研究积分的数值计算问题。
二、数学模型
由于牛顿-科特斯积分公式在8≥n 时不具有稳定性,故不能通过提高阶数的方法来提高求积精度。
为了提高精度通常可以把积分区间划分成若干的子区间(通常是等分),再在每个子区间上用低阶求积公式。
这种方法称为复合求积法。
复合梯形法虽然方法简单,但是却不能估计积分精度,这有时候是很不方便的。
要想控制积分精度,可以采用如下的方法,设积分区间已经划分为n 个子区间,这时再把区间划分更细,给出新的积分结果,如果前后两次积分的差比给定的误差容限小的话,则停止细华否则继续增加积分区间。
这种方法原理很简单也 容易实现,但是实际计算中一般采用的比较少,因为这种方法比较机械效率不是太高,实际上采用比较多的通常是Romberg 方法。
三、算法及流程
给定义误差容限小量TOL ,对于()dx x f b
a ⎰,有复合梯形公式
()()()()⎥⎦
⎤⎢⎣⎡++≈∑⎰-=1122n k k b
a x f
b f a f h dx x f 如果前后两次的划分的积分计算结果大于给定的误差TOL ,则增加划分区间,如果满足精度,则停止细化,并输出结果。
MATLAB 实现过程:
%可控精度复合梯形法计算积分问题
function [jifen,num]=kong_tixing(a,b,tol)
%a,b 为积分区间
%tol 为积分精度,默认为10的-3次方
if (nargin==3)
eps=1.0e-3;
end
n=1;
h=(b-a)/2;
int_1=0;
%调用方程函数
int_2=(kong_t_f(a)+kong_t_f(b))/h;
% 如果前后两次误差小于给定的精度,则停止细化积分区间
while abs(int_2-int_1)>tol
n=n+1;
h=(b-a)/n;
int_1=int_2;
int_2=0;
for i=0:n-1
x=a+h*i;
x1=x+h;
int_2=int_2+(h/2)*(kong_t_f(x)+kong_t_f(x1));
end
end
% 积分结果
jifen=int_2;
%区间划分细度
num=n;
将文件以文件名kong_tixing.m 保存。
四、计算结果及分析
计算定积分
dx e T x ⎰-=102
要求输出精度为10-4。
打开Editor 编写如下程序,并将文件以文件名kong_t_f.m 保存。
function f=kong_t_f(x)
f=exp(-x^2);
打开Editor编写如下程序,并将文件以文件名kong_t_main.m保存。
% 可控精度的梯形积分方法
% 精度为0.1
[s_1,num_1]=kong_tixing(0,1,1e-1)
%精度为0.01
[s_2,num_2]=kong_tixing(0,1,1e-4)
% 精度为0.001
[s_1,num_3]=kong_tixing(0,1,1e-7)
% 画出积分图形
x=0:0.02:1;
y=exp(-x.^2);
area(x,y)
在MATLAB命令窗口输入输入
>>kong_t_main
点击Enter键后得到:
s_1 = 0.739986475276682
num_1 =3
s_2 =0.746398247893441
num_2 = 12
s_1 =0.746818876175303
num_3 =108
从输出的结果可以看出,要达到10-4精度,需要把区间划分为12个子区间,而要达到10-7精度,则要把区间划分为108个子区间。
事实上,函数的积分总区间跨度不是很大,所以在划分为108个子区间后已经是对函数取点很密集了。
下图给出了积分的几何意义,积分的结果即图中蓝色区域面积,从输出结果可以看出蓝色区域面积约为0.746818876175303。