【精品】Richardson外推加速算法在数值公式中的应用要点解析.docVIP

  • 420
  • 0
  • 约7.2千字
  • 约 14页
  • 2016-04-28 发布于湖北
  • 举报

【精品】Richardson外推加速算法在数值公式中的应用要点解析.doc

Richardson外推加速法在数值微分与积分 中的应用 信息与计算科学专业学生:XX 指导老师:XX [摘要]:本文介绍了数值微分与数值积分的Richardson外推加速算法,基于Euler-Maclaurin公式给出了算法的推导过程,再根据Richardson外推方法推导出了收敛更快的数值微分与积分公式,经数值实验验证该公式有良好的计算效果. 关键词:Richardson外推法,Romberg算法,Euler-Maclaurin公式 Abstract: the paper gives a introduction of Richardson’s Extrapolation Method, then, listing the derivation and proof of Richardson’s Extrapolation depending on Euler-Maclaurin. According to the Richardson’s Extrapolaton,this paper got the faster numerical differentiation and integral formula.The formula is prove to be efficient by numerical experiment. Keyword: Richardson抯 Extrapolation, Romberg抯 Algoritm, Euler-Maclaurin Algoritm la0 引言: 外推法用以低阶公式产生高精度收敛效果进而改善序列收敛效率,它是在20世纪前期由英国数学家,物理学家,气象学家Lewis Fry 提出的.在数值分析领域,外推法有很多实际应用,如隆贝格积分方法,是在梯形公式的基础上应用外推法导出的;还有用于求解常微分方程的Bulirsch–Stoer算法. 1 Richardson外推加速算法 1.1 Richardson外推加速算法 李查逊外推加速法基于如下原理 定理 设 ,则成立 式中系数 与无关 这里的与将要出现的等均为与无关的系数. 将以上两个式子做线性组合: 则: 若令 则可以从余项展开式中消去误差的主要部分项,从而得到 这样构造出的 ,其实就是柯特斯公式序列,它与积分值I的逼近阶为六阶如此继续下去,每加速一次,误差的量级便提高2阶按公式 经过次加速后,余项便取下列形式: 这就是外推加速法. 1.2 算法程序 #includeiostream #includeiomanip #includecmath using namespace std; double f(double x); double cal(int k, double h, int c); double a,b,T[100][100]; // 存放数据,为一个下三角矩阵int main() { a = 0; b = 1; //积分的上、下限double e , n, h = b-a; // e 为所设的精度,可以用输入来指定cout请输入控制精度eendl;cine; int i, m, k=0,c=1; T[0][0] = h*(f(a)+f(b))/2; // 算出第一个梯形解do{ k++; T[k][0] = cal(k,h,c); // h = (b-a)/c ; c是分区间的段数,h 是步长m = 1; while(m = k ){ //向后递推,核心算法n = pow(4.0, m); // n = 4^m T[k][m] = n*T[k][m-1]/(n-1) - T[k-1][m-1]/(n-1); m++; }//while h /= 2; c *=2; }while(fabs(T[k][k] - T[k-1][k-1]) e); //没达到设定精度则继续向下算,否则出// coutleftsetw(8)Ksetw(8)Tsetw(9)Ssetw(10)Csetw(10)Rendl for(i = 0; i = k; i++){ //数据输出couti ; for(int j=0; j=i; j++) coutleftfixedsetw(10)setprecision(6)T[i][j]; //设制了输出数据的度,小数点后6位coutendl; } cinn; return 0; } double cal(int k, double h, int c){ //复化梯形公式的递推关系double t = 0; int i; for(i = 0; i c; i++) t += f(a+(i+0.5)*h); return T[k-1][0]/2 +

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档