换手机号微信还能用吗:romberg积分 c++程序

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 10:33:21
里面有一个错误 望高手更正
#include <iostream>
#include <cmath>

using namespace std;

const double E = 2.718281828;
const double PI = 3.1415926;
const double EPS = 1e-5;
const int ROW_COL = 100;

double matrix[ROW_COL][ROW_COL];

void InitialMatrix()
{
int i;
for (i=0; i<ROW_COL; i++)
{
int j;
for (j=0; j<ROW_COL; j++) matrix[i][j] = 0.0;
}
return;
}

inline double function(double x) //此处修改被积函数
{
// return 2 / sqrt(PI) * (pow(E, -x));
return x * sqrt(1 + pow(x, 2));
}

void PrintMatrix(int x)
{
int i;
for (i=0; i<x; i++)
{
int j;
for (j=0; j<x; j++) cout << matrix[i][j] << " ";
cout << endl;
}
return;
}

int Romberg(double a, double b) // a为积分下界, b为上界
{
double h = b - a;
matrix[0][0] = (h / 2) * (function(b) + function(a));

int k = 0;
int divideNum = 2;
int i;
do
{
k++;
double sum = 0;

double stepLen = h / (divideNum);
double temp = a;
for (i=0; i<divideNum - 1; i++)
{
temp += stepLen;
sum += function(temp);
}
divideNum *= 2;

matrix[k][0] = stepLen / 2 * (function(a) + function(b) + 2 * sum);

for (i=0; i<k; i++)
{
double reserve = pow(4, (i + 1));
matrix[k][i + 1] = (reserve / (reserve - 1)) * matrix[k][i] - (1 / (reserve - 1)) * matrix[k - 1][i];
}

} while (fabs(matrix[k][k] - matrix[k - 1][k - 1]) > EPS);
return k;
}

int main()
{
cout.setf(ios::fixed,ios::floatfield);
cout.precision(7);

InitialMatrix();
int x = Romberg(0, 3);
PrintMatrix(x + 1);
return 0;
}

没问题!编译通过!看看你的编译配置环境是不是哪里不对啊?

运行结果
14.2302495 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
11.1713699 10.1517434 0.0000000 0.0000000 0.0000000 0.0000000
10.4437968 10.2012725 10.2045744 0.0000000 0.0000000 0.0000000
10.2663672 10.2072240 10.2076207 10.2076691 0.0000000 0.0000000
10.2222702 10.2075712 10.2075943 10.2075939 10.2075936 0.0000000
10.2112607 10.2075909 10.2075922 10.2075922 10.2075922 10.2075922
Press any key to continue