acdream1234(Simpson积分)

来源:互联网 发布:淘宝客单品怎么推广? 编辑:程序博客网 时间:2024/05/18 03:40

链接:点击打开链接

题意:给出两个圆柱体的底面半径,一个垂直放置一个水平放置,求相交部分的体积

代码:

#include <math.h>#include <stdio.h>#include <iostream>#include <stdlib.h>#include <algorithm>using namespace std;const double eps=1e-10;double r,R;double f(double x){    return sqrt(r*r-x*x)*sqrt(R*R-x*x);}double simpson(double le,double re){    return (re-le)/6*(f(le)+4*f((le+re)/2)+f(re));}double cal(double le,double re){                //simpson求定积分    double ans,mid;    mid=(le+re)/2;    ans=simpson(le,re);    if(fabs(ans-simpson(le,mid)-simpson(mid,re))<eps)    return ans;    return cal(le,mid)+cal(mid,re);}int main(){                                     //从侧视图来分析,可以得出两个圆柱的相交    while(scanf("%lf%lf",&r,&R)!=EOF){          //的截面为矩形,那么就是平行截面面积为已知        if(r>R)                                 //的立体的体积,所以可以直接定积分求解        swap(r,R);                              //求∫2*√(R^2-x^2)*2*√(r^2-x^2)积分区间为-r到r        printf("%.5lf\n",8*cal(0,r));           //化简就是8*∫√(R^2-x^2)*√(r^2-x^2)积分区间为0到r    }    return 0;}


P.s二重积分直接求出公式V=16/3*min(r,R)^3.....但是为什么过不了......

0 0
原创粉丝点击