辛普森公式

自适应辛普森法

≯℡__Kan透↙ 提交于 2020-01-22 22:12:01
自适应辛普森法通过 \(Simpson\) 公式,用二次函数来拟合,实现时用二分递归来自动控制区间分割的大小,既保证精度,又保证速度 \(Simpson\) 公式推导 \[\int_a^bf(x)dx\] \[\approx\int_a^bAx^2+Bx+C\] \[=\frac{A}{3}(b^3-a^3)+\frac{B}{2}(b^2-a^2)+C(b-a)\] \[=\frac{(b-a)}{6}(2Ab^2+2Aab+2Aa^2+3Bb+3Ba+6C)\] \[=\frac{(b-a)}{6}(Aa^2+Ba+C+Ab^2+Bb+C+4A(\frac{a+b}{2})^2+4B(\frac{a+b}{2})+4C)\] \[=\frac{(b-a)}{6}(f(a)+f(b)+4f(\frac{a+b}{2}))\] 求 \(\displaystyle{\int_l^r\frac{cx+d}{ax+b}\mathrm{d}x}\) \(code:\) double f(double x) { return (c*x+d)/(a*x+b); } double simpson(double l,double r) { double mid=(l+r)/2; return (r-l)*(f(l)+f(r)+4*f(mid))/6; } double sol(double l

算法学习:自适应辛普森

主宰稳场 提交于 2019-12-01 07:15:14
【定义】 【定积分】 【解决问题】 在计算机中计算出定积分的值,有可能有直接的数学题,也有可能应用到其他方面 主要就是算定积分的值(摊手) 【算法分析】 实际上就是尝试得到一个 定积分 f(x)函数约等于 定积分 g(x) 函数 而令g(x)为一个二项式 Ax^2 +Bx + c ,然后我们直接对他进行定积分得到公式 这个对这个函数在区间【a,b】区间上的积分,不断细分最终会得到一个无限接近答案的值 而在题目中,往往会有最后输出的精度要求 所以我们只需要让最终的结果满足这个精度要求即可 有点问题,就是这个精度的要求最后会不会不断的累加最后输出又有问题 【题目】 【luogu 4525】 求 【代码】 1 #include<cstdio> 2 #include<cstdlib> 3 #include<algorithm> 4 #include<iostream> 5 using namespace std; 6 const double eps = 1e-9; 7 double a, b, c, d, l, r; 8 double f(double x) 9 { 10 return (c*x + d) / (a*x + b); 11 } 12 double simp(double l, double r) 13 { 14 double mid = (l + r) / 2; 15