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

📄 jifen.c

📁 数值积分梯形simpson
💻 C
字号:
#include <math.h>
#include <stdio.h>
double trapezia(double a,double b,double (*fun)(double),int n)
{
	double Tn=0.0;
	double h;
	int k;
	h=(b-a)/n;
	for(k=1;k<n;k++)
		Tn+=(*fun)(a+k*h);
	Tn=(*fun)(a)+(*fun)(b)+2*Tn;
	Tn=h*Tn/2;
	return Tn;
}
double simpson(double a, double b, double (*fun)(double), int n)
{
	double T2n,Tn;
	Tn=trapezia(a,b,fun,n);
	T2n=trapezia(a,b,fun,2*n);
	return (4*T2n-Tn)/3;
}

double fun1(double x)
{
	return sqrt(4-sin(x)*sin(x));
}
double fun2(double x)
{
	if (x==0)
		return 1;
	else
		return sin(x)/x;
}
double fun3(double x)
{
	return	exp(x)/(4+x*x);
}
double fun4(double x)
{
	return log(1+x)/(1+x*x);
}
main()
{
	double a=0,b=1,c,c2,precision;
	int i,n;
	double (* p[5])(double);
	p[1]=fun1;
	p[2]=fun2;
	p[3]=fun3;
	p[4]=fun4;
	printf("请输入要分的区间数:");
	scanf("%d",&n);
	for(i=1;i<=4;i++)
	{  
		printf("   第%d个函数积分,步长为:%g\n",i,(b-a)/n);
		printf("用复化simpson公式积分得: ");
		c=simpson(a,b,p[i],n);
	    printf("%f\n",c);
		printf("用复化梯形公式积分得: ");
	    c=trapezia(a,b,p[i],n);
        printf("%f\n",c);
	}
	printf("*****************给定精度的情况********************\n",i);
		printf("请输入精度要求");
		scanf("%lf",&precision);  
		for(i=1;i<=4;i++)
	{   
		printf("   第%d个函数:\n",i);
		n=1;
		printf("用复化simpson公式积分得:");
		while(1)
		{   
			c=simpson(a,b,p[i],n);
			c2=simpson(a,b,p[i],2*n);
			if(fabs(c-c2)<precision)
				break;
			n=2*n;
		}
		printf("%f    步长为:%f\n",c2,(b-a)/(2*n));
		n=1;
		printf("用复化梯形公式积分得:");
		while(1)
		{   
				c=trapezia(a,b,p[i],n);
				c2=trapezia(a,b,p[i],2*n);
			if(fabs(c-c2)<precision)
				break;
			else
				n=2*n;
		}
	printf("%f    步长为:%f\n",c2,(b-a)/(2*n));
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -