Romberg Integration (statement only)
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define F(x) 1.0/x
int main (void)
{
int i,j,k,m,n;
float a,b,h,sum,x,r[10][10];
printf("End points of the interval:\n");
scanf("%f%f",&a,&b);
printf("Maximum number of times the sub interval bisected: ");
scanf("%d",&n);
/* compute area :: trapezoidal */
h=b-a;
r[1][1]=h*(F(a)+F(b))/2.0;
printf("\n%f\n",r[1][1]);
/* Start ROMBERG integration */
for(i=2;i<=n+1;i++)
{
m=pow(2,(i-2));
h=h/2;
/* use RECURSIVE trpezoidal rule */
sum=0.0;
for(k=1;k<=m;k++)
{
x=a+(2*k-1)*h;
sum=sum+F(x);
}
r[i][1]=r[i-1][1]/2.0+h*sum;
/* Compute Richardson improvement */
for(j=2;j<=i;j++)
{
r[i][j]=r[i][j-1]+(r[i][j-1]-r[i-1][j-1])/(pow(4,j-1)-1);
}
/* Write result of improvment for ith refinement */
for(j=1;j<=i;j++)
printf("\n%f",r[i][j]);
printf("\n");
/* Test for accuracy */
if(fabs(r[i-1][i-1]-r[i][i])<0.000001)
/* Stop further refinement */
{
printf("\n ROMBERG INTEGRATION: %f\n",r[i][i]);
goto stop;
}
else
{
continue;
}
}
/* Write final RESULT */
printf("\n\tROMBERG INTEGRATION = %f \n",r[n+1][n+1]);
stop:
printf("\tEnd!");
getch();
}
