simpson公式求定积分(模板)

 1 #include<cstdio>
 2 #include<cmath>
 3 #include <algorithm>
 4 using namespace std;
 5
 6 double r,R1;//公式需要用到的变量
 7
 8 // simpson公式用到的函数,就是待积分函数
 9 double F(double x)
10 {
11     //return sqrt(r*r-x*x)*sqrt(R1*R1-x*x);
12     return f(x);
13 }
14
15
16 // 三点simpson法。这里要求F是一个全局函数
17 double simpson(double a, double b)
18 {
19     double c = a + (b-a)/2;
20     return (F(a)+4*F(c)+F(b))*(b-a)/6;
21 }
22
23 // 自适应Simpson公式(递归过程)。已知整个区间[a,b]上的三点simpson值A
24 double asr(double a, double b, double eps, double A)
25 {
26     double c = a + (b-a)/2;
27     double L = simpson(a, c), R = simpson(c, b);
28     if(fabs(L+R-A) <= 15*eps) return L+R+(L+R-A)/15.0;
29     return asr(a, c, eps/2, L) + asr(c, b, eps/2, R);
30 }
31
32 // 自适应Simpson公式(主过程)
33 double asr(double a, double b, double eps)
34 {
35     return asr(a, b, eps, simpson(a, b));
36 }
37
38 // 用自适应Simpson公式计算积分数值
39 double getValue()
40 {
41     return asr(0, r, 1e-5)*8; // 第一第二个参数为积分区间,第三个参数为精度
42 }
43
44 int main()
45 {
46     while(~scanf("%lf%lf",&r,&R1))
47     {
48         if(r>R1)
49             swap(r,R1);
50         printf("%.10f\n",getValue());
51     }
52     return 0;
53 }
时间: 2024-12-28 04:32:15

simpson公式求定积分(模板)的相关文章

HDU 2.1.7 (求定积分公式)

The area Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1637 Accepted Submission(s): 1298   Problem Description Ignatius bought a land last week, but he didn't know the area of the land because t

【蓝桥杯】历届试题 公式求值

  历届试题 公式求值   时间限制:1.0s   内存限制:256.0MB 问题描述 输入n, m, k,输出下面公式的值. 其中C_n^m是组合数,表示在n个人的集合中选出m个人组成一个集合的方案数.组合数的计算公式如下. 输入格式 输入的第一行包含一个整数n:第二行包含一个整数m,第三行包含一个整数k. 输出格式 计算上面公式的值,由于答案非常大,请输出这个值除以999101的余数. 样例输入 313 样例输出 162 样例输入 201010 样例输出 359316 数据规模和约定 对于1

蓝桥杯-历届试题-公式求值

历届试题 公式求值 时间限制:1.0s   内存限制:256.0MB 问题描述 输入n, m, k,输出下面公式的值. 其中C_n^m是组合数,表示在n个人的集合中选出m个人组成一个集合的方案数.组合数的计算公式如下. 输入格式 输入的第一行包含一个整数n:第二行包含一个整数m,第三行包含一个整数k. 输出格式 计算上面公式的值,由于答案非常大,请输出这个值除以999101的余数. 样例输入 313 样例输出 162 样例输入 201010 样例输出 359316 数据规模和约定 对于10%的数

BZOJ 3000(Big Number-Stirling公式求n!近似值)

3000: Big Number Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 220  Solved: 62 [Submit][Status] Description 给你两个整数N和K,要求你输出N!的K进制的位数. Input 有多组输入数据,每组输入数据各一行,每行两个数--N,K Output 每行一个数为输出结果. Sample Input 2 5 2 10 10 10 100 200 Sample Output 1 1 7 69 对

求最小正整数x,A^x=1(mod M)求阶模板

整数的阶:设a和n是互素的正整数,使得a^x=1(mod n)成立的最小的正整数x称为a模n的阶 //求阶模板:A^x=1(mod M),调用GetJie(A,M) //输入:10^10>A,M>1 //输出:无解返回-1,有解返回最小正整数x //复杂度:O(M^(0.5)) long long gcd(long long a,long long b) { if(b==0) return a; return gcd(b,a%b); } //欧拉函数:复杂度O(n^(0.5)),返回[1,n-

复合梯形公式与复合辛普森公式求积分

一 实验目的 1. 掌握复合梯形公式与复合辛普森公式的基本思想.2. 编程实现用复合梯形公式与复合辛普森公式求积分.3. 熟悉matlab软件的使用. 二 实验内容1.用复合梯形公式计算积分 I=4/(1+x2)dx ,求它0到1的积分.精确度为10-5.(0.00001),精确到 ●1 计算公式 h=(b-a)/n h=h/2[(f(x0)+f(x1))+(f(x1)+f(x2))+(f(x2)+f(x3)+...+(f(xn-1)+f(xn)] l1 算法分析 En=h2/12[f'(b)-

Poj 1144 Zoj 1311 求割点 模板

写这个就是为了手写一份好用的求割点模板: 吐槽下,题目中的 Each of the next at most N lines contains the number of a place followed by the numbers of some places to which there is a direct line from this place.  这个at most是不可信的,应该是用大于n行的测试数据,因为这个我WA了... #include <cstdio> #includ

【c语言】用π/4 ≈ 1 - 1/3 + 1/5 - 1/7 +... 公式求π的近似值,直到发现某一项的绝对值小于10^6为止。

// 用π/4 ≈ 1 - 1/3 + 1/5 - 1/7 +... 公式求π的近似值,直到发现某一项的绝对值小于10^6为止. #include <stdio.h> #include <math.h> int main() { double sign = 1.0; int i; double sum = 0.0; for(i = 1;fabs(i) < pow( 10,6 ); i = i + 2) { sum = sum + sign / i; sign = ( -1 )

字符串_KMP算法(求next[]模板 hdu 1711)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 问题描述:给两个序列a,b,长度分别为n,m(1<=n<=1000000,1<=m<=10000),问序列b是否为序列a的子序列,若是:返回a中最左边的与b相等的子序列的首元素下标:若不是,输出-1. 目的:方便以后查看KMP算法中next[]的模板 Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory