【定义】
【定积分】
【解决问题】
在计算机中计算出定积分的值,有可能有直接的数学题,也有可能应用到其他方面
主要就是算定积分的值(摊手)
【算法分析】
实际上就是尝试得到一个
定积分 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 return (r - l)*(f(l) + f(r) + 4 * (f(mid))) / 6;
16 }
17 double ans(double l, double r,double ret)
18 {
19 double mid = (l + r) / 2;
20 double l1 = simp(l, mid), l2 = simp(mid, r);
21 if (l1 + l2 - ret > eps || l1+l2-ret < -eps) return ans(l, mid,l1) + ans(mid , r,l2);
22 return l1 + l2;
23 }
24 int main()
25 {
26 scanf("%lf %lf %lf %lf %lf %lf", &a, &b, &c, &d, &l, &r);
27 printf("%.6f", ans(l,r,simp(l,r)));
28 }
【luogu 4526】
求

【思路分析】
用数学分析函数发散时,a的情况hu
然后在用打表或者验算的方式找到,x>10之后,函数的值小于eps
可以忽略不计
【代码】

1 #include<cstdio>
2 #include<cstdlib>
3 #include<cmath>
4 #include<algorithm>
5 #include<iostream>
6 using namespace std;
7 const double eps = 1e-9;
8 double a, b, c, d, l, r;
9 double f(double x)
10 {
11 return pow(x, (a / x) - x);
12 }
13 double simp(double l, double r)
14 {
15 double mid = (l + r) / 2;
16 return (r - l)*(f(l) + f(r) + 4 * (f(mid))) / 6;
17 }
18 double ans(double l, double r,double ret)
19 {
20 double mid = (l + r) / 2;
21 double l1 = simp(l, mid), l2 = simp(mid, r);
22 if (l1 + l2 - ret > eps || l1+l2-ret < -eps) return ans(l, mid,l1) + ans(mid , r,l2);
23 return l1 + l2;
24 }
25 int main()
26 {
27 scanf("%lf", &a);
28 if (a < 0)
29 printf("orz");
30 else
31 {
32 printf("%.5f", ans(eps, 12.0, simp(eps, 12)));
33
34 }
35 }
【代码】
