自适应复化辛普森公式求积算法(C语言实现)

自适应复化辛普森公式求积算法(C语言实现)

利用复化辛普森公式求积分自适应步骤

h为步长,a为积分下限,b为积分上限,f为积分函数,n为划分的积分次数,ε为允许误差限(若要求精度为10的负n次方,则误差限为0.5乘以10的负n次方)
步骤来自《数值与计算方法》黄云清著

基于C语言实现的代码

代码中积分函数f(x)为1/(1+x^2)(在step2中的for循环中可以看到,如需改变函数则改变这里的值)

#include "stdio.h"

void step2(double *h, int *n, double *S, double *S1, double *S2)
{
	int i = 0;
	*S = 0;
	for(i = 0; i < *n; i++)
	{
		*S += ( 2.0/(1 + ((i+0.25)*(*h) - 4) * ((i+0.25)*(*h) - 4) ) - 1/(1 + ((i+0.5)*(*h) - 4) * ((i+0.5)*(*h) - 4) ) + 2.0/(1 + ((i+0.75)*(*h) - 4) * ((i+0.75)*(*h) - 4) ));
	}
	*S2 = 0.5 * (*S1) + (*h)/6.0 * (*S);
}

int step3(double *S1, double *S2)//判断精度是否满足 
{
	if((*S1 - *S2)>0)
	{
		if((*S1 - *S2) < 0.0000005)//0.0000005为10的负6次方精确度 
			return 1;
		else
			return 0;
	}
	else 
	{
		if((*S2 - *S1) < 0.0000005)
			return 1;
		else
			return 0;
	}
}

main()
{
	double h = 8;
	int n = 1;
	int j = 0;
	double S = 0;
	double S1 = 280.0/51.0; 
	double S2 = 0;
	step2(&h, &n, &S, &S1, &S2);
	while(!step3(&S1, &S2))
	{
		h /= 2.0;
		n *= 2;
		S1 = S2;
		step2(&h, &n, &S, &S1, &S2);
	}
	printf("%.10f",S2);
}
  • 5
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值