2007-07-12-三个圆柱体相交部分的体积

三个圆柱体相交部分的体积 2007-07-12 22:30:50
分类:
下午和一个兄弟一起做了这个题目。

就是求三个轴心分别沿正交XYZ轴的半径为一的圆柱体相交部分的体积。

下面是用Matlab编程的源程序和结果:

clear();
for i=1:10
    N=1000000;
    n=0;
    x=0;y=0;z=0;
    for j=1:N
        x=rand;
        y=rand;
        z=rand;
        if x*x+y*y<=1
            if y*y+z*z<=1
                if x*x+z*z<=1
                    n=n+1;
                end
            end
        end
    end
    v(i)=8*n/N;
end
v
mean(v)

结果:

v =
  Columns 1 through 7
    4.6910    4.6828    4.6829    4.6895    4.6921    4.6810    4.6913
  Columns 8 through 10
    4.6886    4.6881    4.6866

ans =
4.6874

基本思想就是在第一象限0<=x<=1,0<=y<=1,0<=z<=1的一个正方体里面投点,然后判断所投的点是不是在三个圆柱所围个的体积里面,如果在,则计数器n数值加1。总共投N个点。这样根据大数定理,点落在所求体积内的概率为第一象限内所求体积与正方体体积之比。n/N=V1/1*1*1.
所求的体积为第一象限体积V1的8倍。所以V=8*n/N.(N=1000000)
所得结果为4.6874.

现在我们来求该部分的精确结果:

求该体积的积分比较麻烦:
我们可以看到所求体积在8个象限里面是对称的,所以先求出在第一象限里面的体积。
联立x^2+y^2=1,y^2+z^2=1,x^2+z^2=1三个圆柱方程,我们可以得到三个圆柱的交点为
(sqrt(2)/2,sqrt(2)/2,sqrt(2)/2).再分析第一象限里面体积,我们可以知道该部分的体积又可以分成三部分。每一部分为交点与xyz坐标轴上单位1的点所夹的部分。该部分又可分为对称的两部分。
第一部分为0<=y<=sqrt(2)/2,0<=z<=y,y<=x<=sqrt(1-y^2)围成的体积。
该部分体积可以积分:
Integrate[y*(Sqrt[1 – y^2] – y), {y, 0, Sqrt[2]/2}]
所以所求体积为:
Integrate[y*(Sqrt[1 – y^2] – y), {y, 0, Sqrt[2]/2}]*6*8=8(2-sqrt(2))=4.68629.

以上为在Mathmatics里面用积分求出来的所求体积的精确结果。