自适应辛普森积分

问题:求 ∫ a b f ( x ) d x \int_a^b {f(x)}dx abf(x)dx
辛普森积分的本质思想是将 f ( x ) f(x) f(x)看作一个二次函数来简化问题
∫ a b f ( x ) d x ≈ ∫ a b ( A x 2 + B x + C ) d x \int_a^b f(x)dx\approx\int_a^b(Ax^2 + Bx + C)dx abf(x)dxab(Ax2+Bx+C)dx
即: f ( x ) ≈ A x 2 + B x + C f(x)\approx Ax^2+Bx+C f(x)Ax2+Bx+C
可以解得: ∫ a b f ( x ) d x ≈ ( b − a ) 6 ∗ [ f ( a ) + 4 ∗ f ( a + b 2 ) + f ( b ) ] \int_a^bf(x)dx\approx \frac{(b - a)}{6} *[f(a)+4*f(\frac{a+b}{2})+f(b)] abf(x)dx6(ba)[f(a)+4f(2a+b)+f(b)]

因为 ∣ b − a ∣ |b-a| ba越小,误差越小,所以可以递归处理该问题
因为: ∫ a b f ( x ) d x = ∫ a c f ( x ) d x + ∫ c b f ( x ) d x \int_a^b f(x)dx=\int_a^cf(x)dx + \int_c^bf(x)dx abf(x)dx=acf(x)dx+cbf(x)dx

至于精度问题,由误差分析的知识可得:( ε \varepsilon ε为精度误差)
c = a + b 2 c=\frac{a+b}{2} c=2a+b ∣ ∫ a c f ( x ) d x + ∫ c b f ( x ) d x − ∫ a b f ( x ) d x ∣ < = 15 ε |\int_a^cf(x)dx+\int_c^bf(x)dx-\int_a^bf(x)dx| <= 15\varepsilon acf(x)dx+cbf(x)dxabf(x)dx<=15ε
时即可返回;
注意: 每次递归的时候由于误差的相加性,误差设置必须变为原来的一半

C o d e Code Code

inline double f(double x){
	//...
}

inline double simpson(double a, double b){
	return (f(a) + f(b) + 4 * f((a + b) / 2) ) * (b - a) / 6;
}
double asr(double a, double b, double eps, double A){ //A为a,b区间的积分
	double c = (a + b) / 2;
	double l = simpson(a, c), r = simpson(c, b);
	if (fabs(l + r - A) <= 15 * eps)	return l + r + (l + r - A) / 15.0;
	return asr(a, c, eps / 2.0, l) + asr(c, b, eps / 2.0, r);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值