您的位置:首页 > 其它

zoj 2369 Two Cylinders 辛普森积分 几何

2013-07-22 21:53 148 查看
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1345

题意:给两个无限高的圆柱的半径,它们垂直放置,坐标轴相交,求相交部分的体积。

思路:数值积分,用辛普森公式来算。把三重积分转化为一重的。

假设半径为r1的圆柱沿y轴,r2的圆柱沿z轴,那么从x轴看过去,相交部分在yoz平面的切面是个矩形。

矩形在y轴方向的长度为2*y=sqrt(r12 -x2),在z轴方向上的长度为2*sqrt(r22 - x2),这样积分算出来的体积是yoz平面上半部分的体积,还有下半部分的,总的体积要乘以2.

如果是从z方向看过去,则平行于xOy平面所做的切面都是一个矩形,x方向长2*sqrt(r1*r1-z*z),y方向长2*sqrt(r2*r2-z*z),同样总体积需要乘以2.

由高数知识可知: 有下面的三重积分成立

∫∫∫dxdydz =|Ω| (Ω为积分区域,|Ω|为区域Ω的体积) 。所以关键在于把Ω表示出来。参考下面的图形:

double f(double x)
{
...
}

double simpson(double a, doubleb) {
return (b-a)*(f(a) + 4.*f((a+b)/2.) + f(b)) / 6.;
}

double calc(double a, double b, int depth) {
double total = simpson(a, b), mid = (a+b) / 2.;
double tmp = simpson(a, mid) + simpson(mid, b);
if(fabs(total-tmp)<eps && depth > 3) return total;
return calc(a, mid, depth + 1) + calc(mid, b, depth + 1);
}


View Code

同样可以就几分的还有龙贝格求积分,勒让德-高斯求积分法,以后再去看看这两个。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: