数值积分之龙贝格积分
2012-04-24 17:49
316 查看
除了复化求积外,这里用龙贝格积分法进行近似求积,其原理与埃特金插值有些类似,进行线性整合后使结果具有高精度的求积效果。在实际过程中,由于对于评判合理步长的困难,我们常采取变步长的办法进行计算,使结果满足精度要求。龙贝格运算过程:梯形公式装载数据→辛甫生化→柯特斯化→龙贝格高精度化。
对于梯形公式,我们知道T1=[F(Xk)+F(Xk+1)]*h/2,T2=[F(Xk)+2*F(Xk+1/2)+F(Xk+1)]*h/4,显然得出T2=T1/2+∑F(Xk+1/2)*h/2的关系。其中的h=(b-a)/N,在下一步计算时,要进行步长二分。当取得一定的梯形公式数据点后,就可以直接进行数据高精度化了。
辛甫生化:Sn=(4*T2n-Tn)/3;
柯特斯化:Cn=(16*S2n-Sn)/15;
龙贝格化:Rn=(64*C2n-Cn)/63。
建立数组T[]、S[]、C[]、R[]分别存放各自的数据,用函数F(x)=Sin(x)/x在区间[0,1]上进行检验,F(0)=1。
最后,当然是验证输出结果了:
在VS2010下运行的结果,看来龙贝格公式果然高精度啊!
对于梯形公式,我们知道T1=[F(Xk)+F(Xk+1)]*h/2,T2=[F(Xk)+2*F(Xk+1/2)+F(Xk+1)]*h/4,显然得出T2=T1/2+∑F(Xk+1/2)*h/2的关系。其中的h=(b-a)/N,在下一步计算时,要进行步长二分。当取得一定的梯形公式数据点后,就可以直接进行数据高精度化了。
辛甫生化:Sn=(4*T2n-Tn)/3;
柯特斯化:Cn=(16*S2n-Sn)/15;
龙贝格化:Rn=(64*C2n-Cn)/63。
建立数组T[]、S[]、C[]、R[]分别存放各自的数据,用函数F(x)=Sin(x)/x在区间[0,1]上进行检验,F(0)=1。
h=b-a; T2=T1=(F(a)+F(b))*h/2; //进行梯形公式数据装载 for(int i=0;i<N+3;i++)//N为龙贝格数据个数 { T[i]=T2; sum=0; x=a+h/2; while(x<b) { sum=F(x)+sum; x+=h; } T2=(T1+h*sum)/2; h=h/2; T1=T2; } //进行梯形公式到辛甫生的转化 for(int i=0;i<N+2;i++) S[i]=(4*T[i+1]-T[i])/3; //进行辛甫生到柯特斯的转化 for(int i=0;i<N+1;i++) C[i]=(16*S[i+1]-S[i])/15; //进行柯特斯到龙贝格的转化 for(int i=0;i<N;i++) R[i]=(64*C[i+1]-C[i])/63;
最后,当然是验证输出结果了:
在VS2010下运行的结果,看来龙贝格公式果然高精度啊!
相关文章推荐
- Romberg(龙贝格)求积公式求解数值积分时的注意事项
- 龙贝格求积公式 c语言实现 数值积分
- 数值作业:龙贝格算法计算积分C语言实现
- 数值积分-龙贝格(Romberg)积分
- 不论求数值积分还是RungeKutta解ODE算法都很深奥
- 玩无限消乐的设计示例(高级篇)积分与特效的数值加载
- 数值计算:一重积分计算的C++实现
- 数值积分_自适应辛普森法
- matlab数值积分中函数积分的4种方法
- hdu4498Function Curve(数值积分)
- 数值积分(函数指针的运用)
- java 多线程并行求数值积分(πPI) 之 join() 方法应用
- Apache Commons Math3学习之数值积分实例代码
- 使用MATLABD数值法计算定积分或反常积分
- POJ 2098 数值积分
- 数值积分中的辛普森方法及其误差估计
- 数值积分C语言算法
- C++实现龙贝格计算积分
- 挑战程序竞赛系列(95):3.6数值积分(1)
- python实现数值积分的Simpson方法实例分析