📄 auto_romberg.c
字号:
#include<stdio.h>
#include<math.h>
#define MAX 100
double f(double x)
{
return (1+x*x)/(1+pow(x,4));
}
double g(double x)
{
return log(1+sqrt(x));
}
double p(double x)
{
return 1/(pow(cos(x),2)+4*pow(sin(x),2));
}
double (*Select) (double);
void main()
{
FILE *file;
double a=0;
double b=0;
double h;
double R[MAX][MAX]={0};
double ERR=0;
int i,j,k;
int n = 2;
double r = 0.0;
int num;
double A = 0.0;
if(file=fopen("Auto_Romberg.txt","a+"))
{
fprintf(file,"Enter a,b:\n");
printf("Enter a,b:\n");
scanf("%lf%lf",&a,&b);
fprintf(file,"%lf %f\n",a,b);
fprintf(file,"Enter the number to decide which foudation to be used:\n");
printf("Enter the number to decide which foudation to be used:\n");
scanf("%d",&num);
fprintf(file,"%d\n",num);
switch (num)
{
case 1:
*Select = f;
break;
case 2:
*Select = g;
break;
case 3:
*Select = p;
break;
}
h=b-a;
R[1][1]=0.5* h* (Select(a)+Select(b));
fprintf(file,"%9f\n",R[1][1]);
i=2;
do
{
A=0.0;
for(k=1;k<=pow(2,i-2);k++)
A += Select(a+(k-0.5)*h);
R[2][1] = 0.5*(R[1][1]+h*A);
fprintf(file,"%9lf ",R[2][1]);
for(j=2;j<=i;j++)
{
R[2][j] = R[2][j-1]+(R[2][j-1]-R[1][j-1])/(pow(4,(j-1))-1);
fprintf(file,"%9f ",R[2][j]);
}
fprintf(file,"\n");
h /= 2;
i++;
r = R[1][i-2];
for(j=1;j<i;j++)
R[1][j] = R[2][j];
ERR = fabs(R[1][j-1]-r);
}while(ERR*1000000>1);
i-=1;
fprintf(file,"加速次数 n = %d\n",i);
}
else
printf("file can't open!");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -