辛普森积分法 - 维基百科,自由的百科全书

Simpson's rule - Wikipedia, the free encyclopedia

  利用这个公式,用二分的方法来计算积分。

1071 ( The area )

 #include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath> using namespace std; const double EPS = 1e-;
double A, B, C, P, Q; template<class T> T sqr(T x) { return x * x;}
inline double cal(double x) { return A * sqr(x) + (B - P) * x + C - Q;}
inline double sps(double l, double r) { return (cal(l) + cal(r) + * cal((l + r) / )) / * (r - l);} double work(double l, double r) {
//cout << l << ' ' << r << endl;
double ans = sps(l, r), m = (l + r) / ;
if (fabs(ans - sps(l, m) - sps(m, r)) < EPS) return ans;
else return work(l, m) + work(m, r);
} int main() {
int T;
double l, r;
double x[], y[];
cin >> T;
while (T--) {
for (int i = ; i < ; i++) cin >> x[i] >> y[i];
double p[], q[], d[];
for (int i = ; i < ; i++) p[i] = sqr(x[i]) - sqr(x[i + ]), q[i] = x[i] - x[i + ], d[i] = y[i] - y[i + ];
A = (q[] * d[] - q[] * d[]) / (p[] * q[] - p[] * q[]);
B = (p[] * d[] - p[] * d[]) / (p[] * q[] - p[] * q[]);
C = y[] - B * x[] - A * sqr(x[]);
//cout << A << ' ' << B << ' ' << C << endl;
P = (y[] - y[]) / (x[] - x[]);
Q = y[] - P * x[];
//cout << P << ' ' << Q << endl;
printf("%.2f\n", work(x[], x[]));
}
return ;
}

1724 ( Ellipse )

 #include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath> using namespace std; const double EPS = 1e-;
double A, B; template<class T> T sqr(T x) { return x * x;}
inline double cal(double x) { return * B * sqrt( - sqr(x) / sqr(A));}
inline double sps(double l, double r) { return (cal(l) + cal(r) + * cal((l + r) / )) / * (r - l);} double work(double l, double r) {
//cout << l << ' ' << r << endl;
double ans = sps(l, r), m = (l + r) / ;
if (fabs(ans - sps(l, m) - sps(m, r)) < EPS) return ans;
else return work(l, m) + work(m, r);
} int main() {
int T;
double l, r;
cin >> T;
while (T-- && cin >> A >> B >> l >> r) printf("%.3f\n", work(l, r));
return ;
}

  之后还有题会继续更新。

UPD:

  就是因为见过这题,所以才学这个公式的。1y~

ACM-ICPC Live Archive

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath> using namespace std; double coe[][];
const double EPS = 1e-; int k;
double cal(double x, double *c) {
double ret = c[];
for (int i = ; i <= k; i++) ret *= x, ret += c[i];
return ret;
} inline double cal(double x, double *p, double *q) { return cal(x, p) / cal(x, q);}
inline double cal(double x, double y, double *p, double *q) { return max(cal(x, p, q) - y, 0.0);}
inline double simpson(double y, double l, double r, double *p, double *q) { return (cal(l, y, p, q) + cal(r, y, p, q) + * cal((l + r) / , y, p, q)) * (r - l) / ;} inline double getpart(double y, double l, double r, double *p, double *q) {
double sum = simpson(y, l, r, p, q);
//cout << l << ' ' << r << ' ' << sum << endl;
if (fabs(sum - simpson(y, l, (l + r) / , p, q) - simpson(y, (l + r) / , r, p, q)) < EPS) return sum;
return getpart(y, l, (l + r) / , p, q) + getpart(y, (l + r) / , r, p, q);
} inline double getarea(double y, double l, double r, double *p, double *q) {
double ret = , d = (r - l) / ;
for (int i = ; i < ; i++) {
ret += getpart(y, l + d * i, l + d * (i + ), p, q);
}
return ret;
} double dc2(double l, double r, double a, double w) {
double m;
while (r - l > EPS) {
m = (l + r) / 2.0;
//cout << m << ' ' << getarea(m, 0, w, coe[0], coe[1]) - getarea(m, 0, w, coe[2], coe[3]) << endl;
if (getarea(m, , w, coe[], coe[]) - getarea(m, , w, coe[], coe[]) > a) l = m;
else r = m;
}
return l;
} int main() {
//freopen("in", "r", stdin);
//freopen("out", "w", stdout);
double w, d, a;
while (cin >> w >> d >> a >> k) {
for (int i = ; i < ; i++) for (int j = ; j <= k; j++) cin >> coe[i][j];
for (int i = ; i < ; i++) reverse(coe[i], coe[i] + k + );
//cout << getarea(-5.51389, 0, w, coe[0], coe[1]) - getarea(-5.51389, 0, w, coe[2], coe[3]) << endl;
//cout << cal(3, coe[0], coe[1]) << endl;
printf("%.5f\n", -dc2(-d, , a, w));
}
return ;
}

——written by Lyon

Simpson公式的应用(HDU 1724/ HDU 1071)的更多相关文章

  1. HDU 1724 Ellipse 【自适应Simpson积分】

    Ellipse Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  2. hdu 1724 Ellipse simpson积分

    /* hdu 1724 Ellipse simpson积分 求椭圆的部分面积 simpson积分法 http://zh.wikipedia.org/zh-tw/%E8%BE%9B%E6%99%AE%E ...

  3. HDU 1724 Ellipse 自适应simpson积分

    simpson公式是用于积分求解的比较简单的方法(有模板都简单…… 下面是simpson公式(很明显 这个公式的证明我并不会…… (盗图…… 因为一段函数基本不可能很规则 所以我们要用自适应积分的方法 ...

  4. HDU 1724 Ellipse (自适应辛普森积分)

    题目链接:HDU 1724 Problem Description Math is important!! Many students failed in 2+2's mathematical tes ...

  5. HDU 1724:Ellipse(自适应辛普森积分)

    题目链接 题意 给出一个椭圆,问一个[l, r] 区间(蓝色区域)的面积是多少. 思路 自适应辛普森积分 具体一些分析如上. 很方便,套上公式就可以用了. 注意 eps 的取值影响了跑的时间,因为决定 ...

  6. HDU 1724 自适应辛普森法

    //很裸的积分题,直接上模板 #include<stdio.h> #include<math.h> int aa, bb; //函数 double F(double x){ - ...

  7. csu 1806 & csu 1742 (simpson公式+最短路)

    1806: Toll Time Limit: 5 Sec  Memory Limit: 128 MB  Special JudgeSubmit: 256  Solved: 74[Submit][Sta ...

  8. simpson公式求定积分(模板)

    #include<cstdio> #include<cmath> #include <algorithm> using namespace std; double ...

  9. HDU - 2222,HDU - 2896,HDU - 3065,ZOJ - 3430 AC自动机求文本串和模式串信息(模板题)

    最近正在学AC自动机,按照惯例需要刷一套kuangbin的AC自动机专题巩固 在网上看过很多模板,感觉kuangbin大神的模板最为简洁,于是就选择了用kuangbin大神的模板. AC自动机其实就是 ...

随机推荐

  1. CSS:你真的懂margin吗?

    你真的了解margin吗?你知道margin有什么特性吗?你知道什么是垂直外边距合并? margin在块元素.内联元素中的区别?什么时候该用padding而不是margin?你知道负margin吗?你 ...

  2. 猜数字游戏_Python

    预先设置数字变量 age_of_test = 25 #这里设置为25,也可随意 guess_age = int (input("guess age:")) if guess_age ...

  3. java-多线程的入门_进阶总结

    多线程 概述图 1.概述 进程:正在执行中的程序,其实时应用程序在内存中运行的那片空间. 线程:进程中的一个执行单元,负责进程中的程序的运行,一个进程中至少要有一个线程. (进程可以理解为是一个QQ程 ...

  4. linux升级或安装程序后无法进入图形界面

    报错如下: Failed to start the X server (your graphical interface). lt is likely that it is not set up co ...

  5. 【并查集模板】 【洛谷P2978】 【USACO10JAN】下午茶时间

    P2978 [USACO10JAN]下午茶时间Tea Time 题目描述 N (1 <= N <= 1000) cows, conveniently numbered 1..N all a ...

  6. JavaScript Libraries In A TypeScript Application, Revisited

    If you haven’t already gotten involved with it, you’ll probably know that TypeScript is becoming inc ...

  7. Python中的进程池与线程池(包含代码)

    Python中的进程池与线程池 引入进程池与线程池 使用ProcessPoolExecutor进程池,使用ThreadPoolExecutor 使用shutdown 使用submit同步调用 使用su ...

  8. 从零起步 系统入门Python爬虫工程师

    从零起步 系统入门Python爬虫工程师 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的 ...

  9. Leetcode836.Rectangle Overlap矩阵重叠

    矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标. 如果相交的面积为正,则称两矩形重叠.需要明确的是,只在角或边接触的 ...

  10. PHP-xdebug+PHPStorm的debug安装(未完)

    PHP的xdebug安装 一.首先去phpinfo()查看自己的php是32还是64位的,再根据php版本在下面的网站https://xdebug.org/download.php选择xdebug插件 ...