zoukankan      html  css  js  c++  java
  • HDU1724 Ellipse(数值积分)

    补一下一些小盲区,譬如simpson这种数值积分的方法虽然一直知道,但是从未实现过,做一道例题存一个模板。

    #pragma warning(disable:4996)
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<cstdio>
    #include<vector>
    #include<cmath>
    using namespace std;
    
    double a, b, l, r;
    
    double sqr(double x){
    	return x*x;
    }
    
    double f(double x){
    	return b / a*sqrt(sqr(a) - sqr(x));
    }
    
    double simpson(double l, double r)
    {
    	return (f(l) + 4 * f((l + r) / 2) + f(r))*(r - l) / 6;
    }
    
    double simpson(double l, double r, double all, double eps){
    	double m = (l + r) / 2;
    	double L = simpson(l, m), R = simpson(m, r);
    	if (fabs(L + R - all) <= 15 * eps) return L + R + (L + R - all) / 15;
    	return simpson(l, m, L, eps / 2.0) + simpson(m, r, R, eps / 2.0);
    }
    
    double simpson(double l, double r, double eps){
    	return simpson(l, r, simpson(l, r), eps);
    }
    
    int main()
    {
    	int T; cin >> T;
    	while (T--){
    		cin >> a >> b >> l >> r;
    		printf("%.3lf
    ", 2*simpson(l, r, 1e-4));
    	}
    	return 0;
    }
    
  • 相关阅读:
    最简单的UDP程序
    最简单的TCP程序
    一道面试题的分析
    JDK5新特性:可变参数方法
    文件IO流总结
    集合使用的总结
    双列集合Map的嵌套遍历
    集合HashSet的使用
    集合TreeSet的使用
    用LinkedList模拟Stack功能
  • 原文地址:https://www.cnblogs.com/chanme/p/3659616.html
Copyright © 2011-2022 走看看