数值分析--龙贝格算法

数值分析--龙贝格算法

#include"iostream.h"
#include"math.h"

double f(double x)
{
   return pow(x,3.0/2.0);
}
double T(double n,double a,double b)
{
  double sum=0;
  for(int i=0;2*i+1<=n;i++)
  {
    sum+=f(a+double(2*i+1)/n);
  }
  if(n==1) return 0.5*(f(a)+f(b));
  return 0.5*T(n/2,a,b)+sum*(1.0/n);
}
void Romberg(double a,double b,double e)
{
  double Old[10]={0.0},New[10]={0.0};
  double h=b-a;
  New[0]=h*(f(a)+f(b))/2.0;
  int j;
  for(int i=1;;i++)
  {
    for(j=0;j<i;j++) Old[j]=New[j];
 New[0]=T(pow(2,i),a,b);
 for(j=1;j<=i;j++)
  New[j]=(pow(4,j)*New[j-1]/(pow(4,j)-1)-Old[j-1]/(pow(4,j)-1));
 if(fabs(New[i]-Old[i-1])<e) break;
  }
  cout<<New[i];
}

void main()
{
  double a,b; 
  double e;
  cout<<"请输入积分的下、上限:";
  cin>>a>>b;
  cout<<"输入你要的精度:";
  cin>>e;
  Romberg(a,b,e);
}

你可能感兴趣的:(数值分析--龙贝格算法)