月度归档: 2007 年 7 月

  • 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里面用积分求出来的所求体积的精确结果。