§4.3 Romberg算法
- 格式:ppt
- 大小:2.92 MB
- 文档页数:20


龙贝格算法11医软2班刘名奎简介:龙贝格求积公式也称为逐次分半加速法。
它是在梯形公式、辛卜生公式和柯特斯公式之间的关系的基础上,构造出一种加速计算积分的方法。
作为一种外推算法, 它在不增加计算量的前提下提高了误差的精度.在等距基点的情况下,用计算机计算积分值通常都采用把区间逐次分半的方法进行。
这样,前一次分割得到的函数值在分半以后仍可被利用,且易于编程。
解题思路:步骤一:先确定积分上下限a、b,精度值e,再定义函数f(x),取n=1,h=(b-a)/2,=h*(f(a)+f(b))/2。
步骤二:根据求出……,再根据公式Simpson公式=-,Cotes公式=-,Romberg公式R n=-分别求出,,。
步骤三:数值积分近似值,根据Romberg公式求出函数I=。
代码:#include"iostream.h"#include"math.h"#define e 0.0000000001double f(double x){double y;if(x==0)return y=1.0;else y=sin(x)/x;return y;}void romberg(double a,double b){int i,n=1;double h,T2,S2=0,C2=0,R2=0,T1,C1,S1,R1;h=(b-a)/2;T2=h*(f(a)+f(b));while(fabs(R2-R1)>e){R1=R2;T1=T2;S1=S2;C1=C2;double sum=0;for(i=1;i<=n;i++)sum=sum+f(a+(2*i-1)*h);T2=T1/2+sum*h;S2=(4*T2-T1)/3;C2=(16*S2-S1)/15;R2=(64*C2-C1)/63;n=n*2;h=h/2;}cout<<"最后结果为:"<<"I="<<R2<<endl;}void main(){double a,b;cout<<"请输入积分上下限a,b的值并用空格隔开:"<<endl;cin>>a>>b;cout<<"积分下限a="<<a<<endl; cout<<"积分上限b="<<b<<endl;cout<<"被积函数为:y=sin(x)/x"<<endl; cout<<"结果如下"<<endl;romberg(a,b);}当I=10sin()x dx x⎰,调试结果为:当I=221x dx ⎰时,调试结果为:当I=212xdx ⎰时,调试结果为:。
龙贝格算法1.通过二分次数,确定精度 #include #include double f(double x) { return exp(x); } void Romberg(double a, double b, double e) { double h = b - a; int k = 0, j=0; double T[10][10]; T[0][0] = ( f(a) + f(b) ) * h / 2; cout<<'\t'<<"k\t"<<"T\t"<<"S\t"<<"C\t"<<"R\n"; cout<<'\t'<>b; cout<<"输入下限:"; cin>>a; cout<<"输入二分次数:"; cin>>e; Romberg(a, b, e); } 2.通过指定误差,确定精度 #include #include
double f(double x) { return sqrt(x); }
void Romberg(double a, double b, double e) { double h = b - a; int k = 0, j; double T[10][10]; T[0][0] = ( f(a) + f(b) ) * h / 2; cout<<'\t'<<"k\t"<<"T\t"<<"S\t"<<"C\t"<<"R\n"; cout<<'\t'