数值分析之龙贝格求积法
2013-07-17 16:51
169 查看
花了一晚上的时间把数值分析里面定积分求解看懂了,累得早上头疼发烧。。。唉革命尚未成功啊!
利用Richardson外推算法,得到如下的求积方法,其只产生四个序列:
![](http://img.blog.csdn.net/20130717165220562?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhlbmduYW5sZWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
即:
![](http://img.blog.csdn.net/20130717165230343?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhlbmduYW5sZWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
其结束迭代准则为:
![](http://img.blog.csdn.net/20130717165251125?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhlbmduYW5sZWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
并认为
![](http://img.blog.csdn.net/20130717165314906?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhlbmduYW5sZWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
为所求积分近似值。
有一定数值分析基础,不难写出如下程序
其中,f(x)为想求积分的函数,Romberg函数传入第一个参数是积分下限,第二个参数是积分上限,第三个参数是迭代次数,第四个参数是等分次数,第五个参数是误差范围(迭代允许误差),第六个参数是f(x)函数。
利用Richardson外推算法,得到如下的求积方法,其只产生四个序列:
即:
其结束迭代准则为:
并认为
为所求积分近似值。
有一定数值分析基础,不难写出如下程序
#include <iostream> #include <stdlib.h> #include <math.h> #include <iomanip> using namespace std; ///#define f(x) (sin(x)) double f(double x) { return sin(x) / x; } double Romberg(double a, double b, int MAX_N, int DFS_N, double eps, double (*f)(double x)) { double n = DFS_N, h = (b-a) / n, s = 0; double t[MAX_N][MAX_N]; bool flag = false; for(int i = 1; i < n; i++) { s += f(a + i * h); } t[0][1] = h * (s + (f(a)+f(b))/2); n *= 2; for(int m = 1; m < MAX_N; m++) { for(int i = 0; i < m; i++) { t[i][0] = t[i][1]; } h = (b-a)/n; s = 0; for(int j = 1; j < n; j++) { s += f(a+j*h); } t[0][1] = h * (s + (f(a) + f(b))/2.0); n *= 2; for(int i = 1; i <= m; i++) { t[i][1] = t[i-1][1] + (t[i-1][1] - t[i-1][0])/(pow(2.0,2*m)-1); } if(abs(t[m][1] - t[m-1][1]) < eps) { cout << fixed << setprecision((int)(-log10(eps))) << t[m][1] << endl; flag = true; break; } } if(!flag) { cerr << "No solution!" << endl; } } int main() { Romberg(1,2,500,100,0.00000000001,f);///start integral from a to b }
其中,f(x)为想求积分的函数,Romberg函数传入第一个参数是积分下限,第二个参数是积分上限,第三个参数是迭代次数,第四个参数是等分次数,第五个参数是误差范围(迭代允许误差),第六个参数是f(x)函数。
相关文章推荐
- 【数值分析】微分求积:复化梯形、复化辛浦生
- 【数值分析】微分求积:复化梯形、复化辛浦生
- 龙贝格求积公式 c语言实现 数值积分
- Romberg(龙贝格)求积公式求解数值积分时的注意事项
- 8、数值分析与matlab
- php 二分法查找数组中某数值 案例分析
- 数值分析-拉格朗日插值法python3实现绘图
- 数值分析入门——三角函数的多项式逼近
- 数值分析学习(一)之交叉法(Bracketing Methods)求根
- 64位Win8环境的Python数值分析库安装(原创)
- 数值分析(一)拉格朗日插值法c++实现
- 使用VC++类库进行数值分析
- 研究生数值分析课后题(上机编程)-2
- 数值分析 反幂法求矩阵按模最小特征值 MATLAB实现
- Romberg(龙贝格求积)
- 龙贝格求积法
- 数值分析2.1 Gauss(高斯)消去法
- 数值分析读书笔记(3)求解线性代数方程组的迭代法
- 数值作业:变步长梯形求积算法计算积分C语言实现
- 数值分析 第一章 绪论