⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 auto_romberg.c

📁 我自己写的数值分析课程设计的源代码
💻 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 + -