数值分析与实验复化辛卜生公式龙贝格算法
- 格式:docx
- 大小:98.92 KB
- 文档页数:11
佛山科学技术学院实验报告课程名称_______________ 数值分析________________________实验项目_______________ 数值积分____________________专业班级机械工程姓名余红杰学号2111505010 指导教师陈剑成绩日期月日一、实验目的b1、理解如何在计算机上使用数值方法计算定积分 a f ""X的近似值;2、学会复合梯形、复合Simpson和龙贝格求积分公式的编程与应用。
3、探索二重积分.11 f (x, y)dxdy在矩形区域D = {( x, y) | a _ x _ b, c _ y _ d}的数值D积分方法。
二、实验要求(1)按照题目要求完成实验内容;(2)写出相应的Matlab程序;(3)给出实验结果(可以用表格展示实验结果);(4)分析和讨论实验结果并提出可能的优化实验。
(5)写出实验报告。
三、实验步骤1、用不同数值方法计算积xln xdx =-- 0 9(1)取不同的步长h,分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h的函数,并与积分精确值比较两公式的精度。
(2)用龙贝格求积计算完成问题(1 )。
2、给出一种求矩形区域上二重积分的复化求积方法,然后计算二重积分..e"y dxdy,其中积分区域D二{0乞x岂1,0岂y乞1}。
1.%lnt_t.m复化梯形:function F = Int_t(x1,x2,n)%复化梯形求积公式% x1,x2为积分起点和中点%分为n个区间,没选用步长可以防止区间数为非整数。
%样点矩阵及其函数值:x = lin space(x1,x2 ,n+1);y = f(x);m = len gth(x);%本题中用Matlab计算端点位置函数值为NaN,故化为零: y(1) = 0;y(m) = 0;%算岀区间长度,步长h:h = (x2 -x1)/n;a = [1 2*o nes(1,m-2) 1];%计算估计的积分值:F = h/2*sum(a.*y);%f.mfun cti on y = f(x)y = sqrt(x).*log(x);%run 11.mclc,clear;%分为10个区间,步长0.1的积分值:F = In t_t(0,1,10);F10 = F%分为100个区间F = In t_t(0,1,100);F100 = F%误差计算W10 = abs((-4/9)-F10);W100 = abs((-4/9)-F100);W = [W10 W100]%复化辛普森:%l nt_s.mfun cti on F = In t_s(x1,x2 ,n)%复化梯形求积公式% x1,x2区间,分为n个区间。
辛普森公式龙贝格算法辛普森公式与龙贝格算法 辛普森公式和龙贝格算法是数值计算中常用的数值积分方法。
它们可以用于计算函数的定积分,通过将复杂的定积分问题转化为更简单的求和问题来求解。
下面将介绍辛普森公式和龙贝格算法的原理和应用。
辛普森公式是一种通过将函数划分为多个小区间,并在每个区间内使用二次多项式逼近函数曲线的方法来求解定积分。
该公式的基本思想是将函数曲线近似看作是由一系列抛物线段组成的,然后通过对这些抛物线段的面积进行求和来获取整个函数曲线下的面积。
辛普森公式的推导基于牛顿-科特斯公式,通过将区间划分为偶数个小区间,并在每个小区间内使用二次多项式逼近函数曲线来计算定积分。
这种方法可以大大提高计算的精确性,尤其在对曲线进行高精度逼近时特别有效。
龙贝格算法是一种迭代方法,通过逐步细化区间格点来逼近定积分的方法。
它的基本思想是将区间进行二等分,然后通过递归地对子区间进行步长缩放和函数值计算,以获得更加精确的数值积分结果。
龙贝格算法的核心是通过不断加密区间格点和调整步长来逐渐提高计算精度,直到满足预设的误差要求。
这种方法在计算复杂函数的定积分时非常有用,它能够自适应地调整计算步长,并在迭代过程中逐渐收敛到期望的结果。
辛普森公式和龙贝格算法在数值计算中广泛应用于求解定积分问题。
它们适用于各种类型的函数,包括连续函数、平滑函数和非平滑函数。
通过适当选择区间划分和迭代次数,可以有效地控制计算误差,并获得满足要求的数值积分结果。
这种方法相对于传统的数值积分方法具有更高的精确性和可靠性,能够满足各种实际应用的计算需求。
总之,辛普森公式和龙贝格算法是数值计算中常用的数值积分方法。
它们通过将复杂的定积分问题转化为更简单的求和问题,并利用适当的逼近和迭代方法来提高计算精度。
这些方法在实际应用中具有很高的灵活性和可靠性,可以应对各种类型的函数和积分问题。
通过合理应用辛普森公式和龙贝格算法,我们能够更准确、更快速地求解定积分,为科学研究和工程计算提供有力的支持。
一、实验目的及题目1. 实验目的:(1) 学习用复化辛普森公式及龙贝格方法求解积分并掌握这种方法。
(2)了解这些辛普森公式及龙贝格方法的概念,参考课本写出用复化辛普森算法以及龙贝格方法计算目标题目的程序,在matlab 中实现,并用matlab 内置的函数计算出结果,并提出存在的问题。
2. 题目:利用复化辛普森公式和龙贝格方法计算下列积分:(1)dx e x ⎰-5.002(2)dx x x ⎰202sin )2sin(cos π二、实验用仪器设备、器材或软件环境计算机、matlab 软件。
三、实验原理、程序框图、程序代码1.实验原理:根据微积分学基本定理,若被积函数f(x)在区间[a,b]上连续,只要能找到f(x)的一个原函数F(x),便可利用牛顿-莱布尼茨公式求得积分值。
但会经常遇到如下问题:找不到用初等函数,找到了原函数,但因表达式过于复杂而不便计算等等。
此时则不能用牛顿-莱布尼茨公式,因此有必要研究如下公式。
1)复化求积公式及原理由于高阶插值的不稳定性,为了提高计算积分的精度,可把积分区间分为若干个小区间,将()I f 写成这些小区间上的积分之和,然后对每一个小区间上的积分应用到辛普森公式,或柯特斯公式,并把每个小区间上的结果累加,所得到的求积公式就称为复化求积公式。
辛普森公式的数值积分公式为:⎰+++-≈ba b f b a f a f a b dx x f )]()2(4)([6)(它的集合意义为用通过三点))(,()),2(,2()),(,(b f b b a f b a a f a =+的抛物线围城的曲边形面积来代替给定函数的积分。
同梯形公式一样,也有复化辛普森公式:)()(),()()]()(4)([6)(010121b f x f a f x f x f x x f h dx x f n n k k k k ba ==++≈∑⎰-=++ 其中 n ab h x x xk k k -=+=++,2121。
龙贝格积分#include <stdio.h>#include <math.h>double f(double x){return 4/(1+x*x);} //定义函数f(x)int main(){ printf("龙贝格积分法\n");int i,k,n;double a=0,b=1,h;double sum1,u,v;double R[100],C[100],S[1000],T[1000];// 定义数组double e=1e-12,ep=1; //ep是计算精度,e表示需求的精度值T[1]=(b-a)*(f(a)+f(b))/2; //求出T[1]k=1;do{n=pow(2,k);//将区间n等分h=(b-a)/n;//每个小区间的长度sum1=0;for(i=1;i<=n/2;i++)//计算新增加的分点处的函数值{u=a+h*(2*i-1);sum1=sum1+f(u);}T[n]=T[n/2]/2+sum1*h;//求出T[n]S[n/2]=(4*T[n]-T[n/2])/3;//求出S[n/2]if((k-2)>=0)C[n/4]=(16*S[n/2]-S[n/4])/15;//求出C[n/4] if((k-3)>=0)R[n/8]=(64*C[n/4]-C[n/8])/63;//求出R[n/8] if((k-4)>=0)ep=R[n/8]-R[n/16];//求出两次计算的差值k++;}while(ep>e);//循环条件v=R[n/8];printf("k=%d,v=%.12f\n",k-1,v);//输出结果return 0;}复化辛普森#include <stdio.h>#include <math.h>double f(double x){return 4/(1+x*x);}//定义函数f(x)int main(){printf("复化辛普森公式\n");int i,m=428;//将积分区间分成m个区间double u,v,w;double a=0,b=1,h;double sum1=0;h=(b-a)/(2*m);//计算每个相等区间的长度for(i=0;i<m;i++){u=a+2*i*h;//计算每个区间的起点,中点,终点坐标 v=a+(2*i+1)*h;w=a+(2*i+2)*h;sum1=sum1+h/3*(f(u)+4*f(v)+f(w));//复化辛普森公式}printf("sum1=%.12f\n",sum1);}。
佛山科学技术学院实 验 报 告课程名称 数值分析 实验项目 数值积分专业班级 机械工程 姓 名 余红杰 学 号 2111505010 指导教师 陈剑 成 绩 日 期 月 日一、实验目的1、理解如何在计算机上使用数值方法计算定积分⎰badxx f )(的近似值;2、学会复合梯形、复合Simpson 和龙贝格求积分公式的编程与应用。
3、探索二重积分⎰⎰Ddxdy y x f ),(在矩形区域},|),{(d y c b x a y x D ≤≤≤≤=的数值积分方法。
二、实验要求(1) 按照题目要求完成实验内容; (2) 写出相应的Matlab 程序;(3) 给出实验结果(可以用表格展示实验结果); (4) 分析和讨论实验结果并提出可能的优化实验。
(5) 写出实验报告。
三、实验步骤1、用不同数值方法计算积分149xdx =-(1)取不同的步长h ,分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h 的函数,并与积分精确值比较两公式的精度。
(2)用龙贝格求积计算完成问题(1)。
2、给出一种求矩形区域上二重积分的复化求积方法,然后计算二重积分xyDedxdy -⎰⎰,其中积分区域{01,01}D x y =≤≤≤≤。
1.%Int_t.m 复化梯形:function F = Int_t(x1,x2,n)% 复化梯形求积公式% x1,x2 为积分起点和中点%分为n个区间,没选用步长可以防止区间数为非整数。
%样点矩阵及其函数值:x = linspace(x1,x2,n+1);y = f(x);m = length(x);%本题中用Matlab计算端点位置函数值为NaN,故化为零:y(1) = 0;y(m) = 0;%算出区间长度,步长h:h = (x2 -x1)/n;a = [1 2*ones(1,m-2) 1];%计算估计的积分值:F = h/2*sum(a.*y);%f.mfunction y = f(x)y = sqrt(x).*log(x);%run11.mclc,clear;%分为10个区间,步长0.1的积分值:F = Int_t(0,1,10);F10 = F%分为100个区间F = Int_t(0,1,100);F100 = F%误差计算W10 = abs((-4/9)-F10);W100 = abs((-4/9)-F100);W = [W10 W100]%复化辛普森:%Int_s.mfunction F = Int_s(x1,x2,n)% 复化梯形求积公式% x1,x2 区间,分为n个区间。
数值分析实验报告指导老师:宛艳萍姓名:班级:学号:实验三 复化辛卜生法,龙贝格法1.实验名称:复化辛卜生法,龙贝格法2.实验目的1)通过实际计算体会各种方法的精确度。
2)会编写用复化辛卜生、龙贝格算法求定积分的程序。
3.算法描述1)用复化辛卜生法计算积分 dxx I ⎰+=12)1/(1算法:复化辛卜生公式为S n =h/6∑∑+-=+++)]()2/(4)([11k k kn k x f h x f xf ,计算过程为:1.令,/)(n a b h -= ),2/(1h a f s +=;02=s2.对1,,2,1-=n k计算),2/(11h kh a f s s +++=)(22kh a f s s ++=3.))(24)((6/21b f s s a f h s +++= 。
2)龙贝格算法计算dxxI ⎰+=102)1/(156e ε=-算法)((12/12∑-=++=n k k n n n x f h T T ;/)(n a b h n -= n k h k x )2/1(2/1+=+)(3/122n n n n T T T S -+= )_(15/122n n n n S S S C +=)(63/122n n n n C C C R -+=用事后估计法控制精度2|5e -6n n R R -< 。
4.源程序:1)/* 用复化辛卜生公式求积分 */ #include "stdio.h" float fx(float x){double f;f=1.0/(1.0+x*x); return f; } double fs(int n){double a=0.0,b=1.0,h,s,s1,s2=0; int i;h=(b-a)/n; s1=fx(a+h/2); for(i=1;i<n;i++){s1=s1+fx(a+i*h+h/2); s2=s2+fx(a+i*h);}s=(h/6.0)*(fx(a)+fx(b)+4*s1+2*s2);return s;}void main(){printf("实验三复化辛卜生法计算机112 耿向飞学号:112434\n");printf("s(2)=%lf\ns(4)=%lf\ns(8)= %lf",fs(2),fs(4),fs(8));}2)/* 龙贝格法 */#include "stdio.h"#include "math.h"#define E 2.71828182//被积函数f(x)double fx(double x){double f;f=1/(1+x*x);return f;}//梯形公式求tndouble tx(int n){double s3=0.0,h,t,b=1.0,a=0.0;int i;h=(b-a)/n;for(i=1;i<n;i++)s3=s3+fx(i*h);t=(h/2)*(fx(a)+fx(b)+2*s3);return t;} double s(int n){double s;s=tx(2*n)+(1.0/3.0)*(tx(2*n)-tx(n ));return s;}double c(int n){double c;c=s(2*n)+(1.0/15.0)*(s(2*n)-s(n)) ;return c;}double r(int n){double r;r=c(2*n)+(1.0/63.0)*(c(2*n)-c(n)) ;return r;}void main(){double rr,pp;int n=1;rr=r(n);pp=r(2*n)-r(n);printf("实验三龙贝格法计算机112 耿向飞学号:112434\n");printf("结果为:%.15lf 误差小于等于: %.15lf",rr,pp);}5.运行结果1)复化辛卜生公式2)龙贝格算法6.对算法的理解与分析:复化辛卜生公式和龙贝格算法适用于求数值积分,而且都能提高计算积分的精度龙贝格算法其实是在复化辛卜生公式递推的基础之上生成的一种精度高,而且收敛速度也较快的一种算法。
数值分析实验 三班级:10信计2班 学号:59 姓名:王志桃 分数一·问题提出:选用复合梯形公式,复合Simpson 公式,计算(1) I =dx x ⎰-4102sin 4 ()5343916.1≈I(2) I = dx x x⎰1sin ()9460831.0,1)0(≈=I f(3) I = dx xe x⎰+1024(4) I = ()dx x x ⎰++10211ln二·实验要求:1.编制数值积分算法的程序2.分别用两种算法计算同一个积分,并比较计算结果3.分别取不同步长()/ a b h -=n ,试比较计算结果(如n = 10, 20等)4.给定精度要求ε,试用变步长算法,确定最佳步长三·实验流程图:复化梯形公式:输入 端点 a , b 正整数 n直接计算TN=h/2*[f(a)+2∑f(x k )+f(b)] k=1,2…,n-1输出 定积分近似值TN复化Simpson 公式输入 端点 a , b 正整数 n输出 定积分近似值SN(1) 置h=(b-a)/(2n)(2) F0=f(a)+f(b) , F1=0 , F2=0(3) 对j=1,2,…,2n-1循环执行步4到步5(4) 置x=a+jh(5) 如果j 是偶数,则F2=F2+f(x),否则F1=F1+f(x)(6) 置SN=h(F0+4F1+2F2)/3(7) 输出SN,停机四·源程序:#include<iostream>#include<math.h>using namespace std;#define n 20//此为步长double f1(double x){double y;y=sqrt(4-sin(x)*sin(x));return y;}double f2(double x){if(x==0)return 1;double y;y=sin(x)/x;return y;}double f3(double x){double y;y=exp(x)/(4+x*x);return y;}double f4(double x){double y;y=log(1+x)/(1+x*x);return y;}int main(){int j;double e=0.000001,h,F0,F1,F2,a,b,x,S;cout<<"利用复化Simpson公式求积分"<<endl;//1a=0;b=0.25*3.141592;h=(b-a)/(2*n);F0=f1(a)+f1(b);F1=F2=0;for(j=1;j<2*n;j++){x=a+j*h;if(j%2==0)F2=F2+f1(x);elseF1=F1+f1(x);}S=((F0+F1*4+F2*2)*h)/3;cout<<"第一个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl;//2a=0;b=1;h=(b-a)/(2*n);F0=f2(a)+f2(b);F1=F2=0;for(j=1;j<2*n;j++){x=a+j*h;if(j%2==0)F2=F2+f2(x);elseF1=F1+f2(x);}S=(F0+F1*4+F2*2)*h/3;cout<<"第二个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl;//3a=0;b=1;h=(b-a)/(2*n);F0=f3(a)+f3(b);F1=F2=0;for(j=1;j<2*n;j++){x=a+j*h;if(j%2==0)F2=F2+f3(x);elseF1=F1+f3(x);}S=(F0+F1*4+F2*2)*h/3;cout<<"第三个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl;//4a=0;b=1;h=(b-a)/(2*n);F0=f4(a)+f4(b);F1=F2=0;for(j=1;j<2*n;j++){x=a+j*h;if(j%2==0)F2=F2+f4(x);elseF1=F1+f4(x);}S=(F0+F1*4+F2*2)*h/3;cout<<"第四个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl<<endl;cout<<"利用复化梯形公式求积分"<<endl;//1a=0;b=0.25*3.141592;h=(b-a)/n;F0=f1(a)+f1(b);F1=0;for(j=1;j<n;j++){x=a+j*h;F1=F1+f1(x);}S=((F0+F1*2)*h)/2;cout<<"第一个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl;//2a=0;b=1;h=(b-a)/n;F0=f2(a)+f2(b);F1=0;for(j=1;j<n;j++){x=a+j*h;F1=F1+f2(x);}S=((F0+F1*2)*h)/2;cout<<"第二个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl;//3a=0;b=1;h=(b-a)/n;F0=f3(a)+f3(b);F1=0;for(j=1;j<n;j++){x=a+j*h;F1=F1+f3(x);}S=((F0+F1*2)*h)/2;cout<<"第三个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl;//4a=0;b=1;h=(b-a)/n;F0=f4(a)+f4(b);F1=0;for(j=1;j<n;j++){x=a+j*h;F1=F1+f4(x);}S=((F0+F1*2)*h)/2;cout<<"第四个积分公式:端点a为"<<a<<"、b为"<<b<<",n为"<<n<<endl<<"结果为"<<S<<endl;return 0;}五.实验结果六.实验心得:通过本次实验,我掌握了求数值积分的各种方法。
数值分析与实验课程设计班级:姓名:学号:08级应用数学《数值分析与实验(实践)》任务书一、设计目的通过《数值分析与实验(实践)》实践环节,掌握本门课程的众多数值解法和原理,并通过编写C语言或matlab程序,掌握各种基本算法在计算机中的具体表达方法,并逐一了解它们的优劣、稳定性以及收敛性。
在熟练掌握C语言或matlab语言编程的基础上,编写算法和稳定性均佳、通用性强、可读性好,输入输出方便的程序,以解决实际中的一些科学计算问题。
二、设计教学内容1、数值方法的稳定性;2、禾U用牛顿法和割线法程序求出非线性方程的解,并比较它们之间的优劣;3、高斯消去法和列主元高斯消去法求解线性方程组;雅克比法和高斯-赛德尔迭代法解方程组;4、利用Lagrange插值多项式求未知点的近似值;5、利用所给数据进行数据的多项式和可转化成多项式形式的函数拟合;6、编写复化辛卜生公式和龙贝格算法,通过实际计算体会各种方法的精确\ 度;7、利用改进Euler方法和四阶Runge-Kutta方法求解初值问题的微分方程组;&利用幕法求矩阵按模最大的特征值及对应特征向量;\ (8个中选取1个)二、设计时间2011 —2012学年第1学期:第16周共计一周教师签名:2011年12月12日、八刖数值计算方法是一种利用计算机解决数学.言问题的数值近似解方法,特别是无法用人工过计算器计算的数学问题。
数值计算方法常用于矩阵高次代数方程矩阵特征值与特征向量的数值解法,插值法,线性方程组迭代法,函数逼近,数值积分与微分,常微分方程初值问题数值解等。
作为数学与计算机之间的一条通道,数值计算的应用范围已十分广泛,作为用计算机解决实际问题的纽带,数值算法在求解线性方程组,曲线拟合、数值积分、数值微分,迭代方法、插值法、拟合法、最小二乘法等应用广泛。
数值计算方法是和计算机紧密相连的,现代计算机的出现为大规模的数值计算创造了条件,集中而系统的研究适用于计算机的数值方法是十分必要的。
数值计算方法是在数值计算实践和理论分析的基础上发展起来的。
通过数值计算方法与实验将有助于我们理解和掌握数值计算方法基本理论和相关软件的掌握,熟练求解一些数学模和运算,并提高我们的编程能力来解决实际问题。
摘要、随着计算机的迅速发展和广泛应用,在众多的领域内,人们越来越认识到科学计算是科学研究的新方法,当今理学学生更应具备这方面的知识与能力,计算方法作为科学计算的一门主干课程又是我们的必修课,我们要认真学习,数值计算方法不只注重理论分析还要求实验和实践,这样才能使我们更灵活地掌握数值计算方法,所以我们也要认真做好数值分析与实验实践环节。
/复化辛卜生公式可以算是公路线行坐标计算的万能公式,不仅对直线、圆曲线都能用一套公式进行计算,而且它的精度可以人为判断。
对于不易直接用积分公式计算的原函数,通常用复合梯形求积公式或复合抛物线求积公式等方法,但这些方法精度不高,收敛的速度缓慢。
为了提高收敛速度,减少计算量,人们寻求其他方法。
[关键字]:计算方法;复化辛卜生公式;龙贝格算法/ 目录\前言 (3)摘要 (4)实验设计内容 (6)一、复化辛普森求积公式求解定积分 (6)1实验目的 (6)2实验内容 (6)3.算法 (6)程序 (6)4运行结果 (7)二、用龙贝格求积公式求解定积分 (7)1实验目的 (7)2实验内容 (7)算法 (7)程序 (8)3.4运行结果 (8)三、结果分析 (9)四、参考文献 (9)实验设计内容一、复化辛普森求积公式求解定积分1. 实验目的:通过实际计算体会各种方法的精确度;会编写用复化辛卜生求定积分的程序;\^2. 实验内容:用复化辛普森求积公式计算积分0.8e x2dx的近似值,自己设/ 0置不同精度要求,对结果进行比较分析。
Z \3. 算法:将区间a,b二等分,用3个插值节点构造抛物线,并以此抛物线为顶的曲边梯形面积近似以曲线y f(x)为顶的曲边梯形面积。
b其中A o称式()f (x)dxaba f(x)dxa b4f(j f(b)2A o f (x o) A i f (Xi) A>f(X2),A o(b或()为求积公式。
\a) 2(b a)()() 可以证明:若函数f(x)在a,b上有连续的4阶导数,Simpson公式的截断误差bR2(f) a f(x)dx旦f(a) 4咛)f(b)百度文库-让每个人平等地提升自我程序如下:function fsimpson(a,b,n) /*调用 matlab 的函数 */ h = (b-a)/n; /*定义自变量*/ t = h*(f(a)+f(b))/6; for i = 0:( n-1)t = t+h*(4*f(a+(i+1/2)*h)+2*f(a+i*h))/6; /* 定义函数 */ end /*结束函数*/ I = t在 Matlab 中输入命令:fsimpson(0,1,1000)则输出结果为:I 0.759262(b a)5f ⑷2880记 a = 0,b = 1,f(x) = e x, b则(x)ef (x) e xf (x)()因此,利用Simpson 公式计算得S(f)晋 f(a) 4f(a -b ) f(b)6 2 10/0 .0.5(e 4e6 e 1)0.6323由 1(f) S(f)(b a) (b a.得截断误差估计为:180'2)f ()1 I(f) S(f)⑷X(x) e(0,1)1 J\4面(/ e (}丄180 2 28800.0003472二、用龙贝格求积公式求解定积分1.实验目的:通过实际计算体会各种方法的精确度;会编写用复化龙贝格求定积分的程序;2实验内容:用龙贝格求积公式计算积分 08e x2dx 的近似值,自己设 0 \置不同精度要求,对结果进行比较分析。
3.算法:(1) 置N 〔,精度要求,h 1b a(2) 计算T 1(0)=hH f (a )f(b )(4) 置 M N ,N 2N ,k 1 (5) 计算4k T (k 1)2M_ k 4 1(k ),则停止计算(输出T 1),否则转(3)如此加工数据的过程叫龙贝格算法,如下图所示:(6) M若M 1,转⑺;否则,置 2,k k 1,转(5)(3)置h 2N =2hN,并计算(k) IM(k 1) IM(7)Nh2Nf (a (2k 1)h 2N )k 1若聲程序如下:fun cti on z=romberg(a,b,e) h=(b-a);f=exp(-x.A 2);TT(1,1)=h.*(f(b)+f(a))/2;k=2;TT(1,2)=TT(1,1)./2+h/2.*f(a+h/2);TT(2,1)=TT(1,2).*4/3-TT(1,1)./3; z=TT(2,1); while abs((TT (k,1)-TT(k-1,1))./TT(k,1))>=ek=k+1;h=h./2;for j2=1:2.A(k-2) ff(1,j2)=f(a+h*(j2-1/2)); endfff=sum(ff).*h/2;TT(1,k)=TT(1,k-1)./2+fff for j1=2:kTT(j1,k-j1 + 1)=4A(j1-1).*TT(j1-1,k-j1+2)./(4A(j1-1)-1)-TT(j1-1,k-j1+1)/( 4A(j1-1)-1);z=TT(j1,k-j1+1); end end/*结束函数*/ fun cti on r=f() r=exp(-x.A2)运算结果>> z=romberg(0,1,10e-2)X Rumbei-g 齐法w G Gq (©⑨03)\\\ X 瓦E% ③⑤®防\\\\ 妤心门% G ①<2)④⑦tv61 J - o o 7"孑 2 8 4/*调用matlab 的函数*/ /*定义自变量*/ /*定义函数*/z =>> vpa(z,7)ans =.>> z=romberg(0,1,10e-5)TT =0 0TT =0 00 0 0 z =>> vpa(z,7)ans =.>> z=romberg(0,1,10e-10)TT =\ 0 0TT =0 00 0 0TT =0 0百度文库-让每个人平等地提升自我11110TT =z =>> vpa(z,7)ans =.三、结果分析龙贝格算法其实是在复化辛卜生公式递推的基础之上生成的一种精度高,而且收敛速度也较快的一种算法。
对于复化辛卜生算法来说,程序比较容易编写,而龙贝格算法,程序中需要注意用龙贝格算法加速收敛的时候如何处理判断以后生成的返回值才能使程序正常运行,龙贝格算法可以达到预期目的,求得所需要的结果。
四、参考文献[1] .孙志终吴宏伟闻震初•计算方法与实验•南京:东南大学出版社2005[2] .孙志忠.数值分析全真试题试题解析.南京:东南大学出版社2004[3] . Sorer K,Bulirsch R.数值分析引论孙文渝南京:南京大学出版社1995[4] 王能超.数值分析简明教程.北京:高等教育出版社,1984⑸袁慰平,孙志忠,吴宏伟.计算方法与实习.南京:东南大学出版社,2005。