数值分析龙贝格实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三 龙贝格方法

【实验类型】 验证性

【实验学时】 2学时

【实验内容】

1.理解龙贝格方法的基本思路

2.用龙贝格方法设计算法,编程求解一个数值积分的问题。

【实验前的预备知识】

1.计算机基础知识2.熟悉编程基本思想3.熟悉常见数学函数;

【实验方法或步骤】

龙贝格方法的基本思路龙贝格方法是在积分区间逐次二分的过程中,通

过对梯形之值进行加速处理,从而获得高精度的积分值。

1. 龙贝格方法的算法

步骤1 准备初值()f a 和()f b ,用梯形计算公式计算出积分近似值

()()12b a T f a f b -=+⎡⎤⎣

⎦ 步骤2 按区间逐次分半计算梯形公式的积分近似值令

2i b a h -=,0,1,2,...i =计算12102122n n n i i h T T f x -+=⎛⎫=+ ⎪⎝⎭

∑,2i n = 步骤3 按下面的公式积分梯形公式:()223n n n n T T S T -=+

辛普生公式:()2215n n n n S S C S -=+

龙贝格公式:()2263n n n n C C R C -=+

步骤4 精度控制 当2n n R R ε-<,(ε为精度)时,终止计算,并取2n R 为近似值否则将步长

折半,转步骤2。

[实验程序]

#include

#include

# define Precision 0.00001//积分精度要求

# define e 2.71828183

#define MAXRepeat 10 //最大允许重复

double function(double x)//被积函数

{

double s;

s=2*pow(e,-x)/sqrt(3.1415926);

return s;

}

double Romberg(double a,double b,double f(double x))

{

int m,n,k;

double y[MAXRepeat],h,ep,p,xk,s,q;

h=b-a;

y[0]=h*(f(a)+f(b))/2.0;//计算T`1`(h)=1/2(b-a)(f(a)+f(b)); m=1;

n=1;

ep=Precision+1;

while((ep>=Precision)&&(m

{

p=0.0;

for(k=0;k

{

xk=a+(k+0.5)*h; // n-1

p=p+f(xk); //计算∑f(xk+h/2),T

} // k=0

p=(y[0]+h*p)/2.0; //T`m`(h/2),变步长梯形求积公式

s=1.0;

for(k=1;k<=m;k++)

{

s=4.0*s;// pow(4,m)

q=(s*p-y[k-1])/(s-1.0);//[pow(4,m)T`m`(h/2)-T`m`(h)]/[pow(4,m )-1],2m阶牛顿柯斯特公式,即龙贝格公式

y[k-1]=p;

p=q;

}

ep=fabs(q-y[m-1]);//前后两步计算结果比较求精度

m=m+1;

y[m-1]=q;

n=n+n; // 2 4 8 16

h=h/2.0;//二倍分割区间

}

return q;

}

main()

{

double a,b,Result;

cout<<"请输入积分下限:"<

cin>>a;

cout<<"请输入积分上限:"<

cin>>b;

Result=Romberg( a, b, function);

cout<<"龙贝格积分结果:"<

}

相关文档
最新文档