• 托马斯微积分 从入门到失望


    决定把例题用程序都完成一遍。从最基本的开始:语言选择用python,vex,Houdini作图

    <1>

    a,求球的体积.半径为4,中心点为0,左断点为-4,右断点为4

    import math
    radius = 4.000
    diameter = radius *2
    # sphere r=4 R=8
    # this spere is y=sqrt(16-x*x)
    # per cylinder volume is PI*r*r*dtx
    def sphere_function(xpos,dtx):
        return math.sqrt(16.00-xpos*xpos) * math.sqrt(16.00-xpos*xpos)*dtx
    
    # @n is the is this sphere that will split to n piece along xpos
    # if sphere r=4, slice is 8, dtx= R/8 = 1
    def calculateVolume(n):
        v = 0
        dtx = diameter/n
        for j in range(0,n,1):
            xp = j*(diameter/n) - radius   #if sphere radius is 4,left plot is -4 ,right plot is 4
            v += sphere_function(xp,dtx)
        return v
    
    # sphere volume use base function : 3/4 * PI * (R*R*R)
    def ruleCacluateVolume(r):
        return 4/3.000 * r*r*r
    
    if __name__ == "__main__":
        #split a sphere to 20 cylinder
        print "use 4   slice :"  ,calculateVolume(4)
        print "use 8   slice :"  ,calculateVolume(8)
        print "use 20  slice :"  ,calculateVolume(20)
        print "use 120 slice :"  ,calculateVolume(120)
        print "use 200 slice :"  ,calculateVolume(200)
    View Code

    python volume.py

    use 4   slice : 80.0
    use 8   slice : 84.0
    use 20  slice : 85.12
    use 120 slice : 85.3274074074
    use 200 slice : 85.3312
    use sphere volume function : 85.3333333333

    可以看到和标准体积的球体不差多少。200个切片就很精确了 几乎一样

     b,半球体积:

    <2>求类似火箭头的曲线体积:

    import math
    
    #
    # curve function is y=sqrt(x)
    # x range->0-5
    #
    
    maxRange = 5.0
    
    def clinder_volume(xpos,dtx):
        return math.sqrt(xpos*xpos) * dtx
    
    def curve_volume(n):
        v = 0.0
        dtx = maxRange/n
        for x in range(0,n,1):
            xpos = x*(maxRange/n)
            v += clinder_volume(xpos,dtx)
        return v
    
    if __name__ == "__main__":
        print curve_volume(15)
    View Code


     

    <3> 求a和b为什么值,积分的值最大

     <4> 梯形法求积分,simpson法求积分

    # Trapezoidal
    # S = 1/2(y0+ 2y1 + 2y2 + 2y3+...+ 2yn-1 + yn)
    
    def Trapezoidal(down,up,n,func):
        if up==down:
            return 0.0
        h = float(up-down) / float(n)
        start = func(down)
        end = func(up)
    
        process = 0.0
        for dt in xrange(0,n+1,1):
            if dt == 0 or dt == n:
                continue
            process += 2 * func(down + dt * h)
        sum =  (start + end + process) * (h/2.0)
        return sum
    
    
    
    # Simpson
    # S = h/3(y0 + 4y1 + 2y2 + 4y3 + 2y4 + ... + 2yn-1 + yn)
    # func is f(x)
    def Simpson(down,up,n,func):
        if up==down:
            return 0.0
        h = float(up-down) / float(n)
        start = func(down)
        end = func(up)
        process = 0.0
        for dt in xrange(0,n+1,1):
            if dt == 0 or dt == n:
                continue
            # select the 1 3 5 7 9... index
            if dt%2 == 1:
                process += 4 * func(down + dt * h)
            # select the 2 4 6 8 10... index
            if dt%2 == 0:
                process += 2 * func(down + dt * h)
    
        sum =  (start + end + process) * (h/3.0)
        return sum
    
    
    
    if __name__ == "__main__":
    
        # part1
        # fx = 5x^4 [0,2]  n=4
        func = lambda x:5*x*x*x*x
        T = Simpson(0,2,4,func)
        print T
        # part2
        # fx = x [1,2] n=4
        func2 = lambda x:x
        T2 = Simpson(1,2,4,func2)
        print T2
    
        # part3
        # fx = x*x
        func3 = lambda x:x*x
        T3 = Trapezoidal(1,2,4,func3)
        print T3
    
        func4 = lambda x:x*x + 1
        T_T4 = Trapezoidal(-1,1,4,func4)
        S_T4 = Simpson(-1,1,4,func4)
        print T_T4,S_T4
    View Code

    <4> 复习黎曼和 和 定积分关系

    5,求椎体体积:

    Houdini求出-55

     fx = x^2;

    则积分为x^3 / 3

    上限为y最大值

    下限为y最小值

    float ptsx[];
    float ptsy[];
    float ptsz[];
    int npt = npoints(0);
    resize(ptsx,npt);
    resize(ptsy,npt);
    resize(ptsz,npt);
    
    for(int i=0;i<npt;i++)
    {
        vector pos = point(0,"P",i);
        ptsx[i] = pos.x;
        ptsy[i] = pos.y;
        ptsz[i] = pos.z;
    }
    
    float maxy = max(ptsy);
    float miny = min(ptsy);
    
    
    printf("%f,%f
    ",miny,maxy);
    
    
    float dttop = pow(maxy,3)  /  3.0;
    float dtbottom = pow(miny,3) / 3.0;
    
    float volume = dttop - dtbottom; 
    
    adddetailattrib(geoself(),"cvolume",volume);
    View Code

     6,一个立方体x=0 和 x=4 出垂直于x轴的两个平面之间,在0<= X <= 4 垂直于x横截面都是正方形,并且他们对角线都是从抛物线y = -sqrt(x) 和 y = sqrt(x)。

    如图:

     

     对角线长度则为2sqrt(x)

    对角线一半为d = sqrt(x)

    要求变长 h , 已知sina = d / h , 因为a = 45,所以 h =( 2sqrt(x) ) / sqrt(2)

    A(x) = h^2  = 2x

    求积分2x        0 <=x <= 4

    F(x) = x^2

    F(4) - F(0) = 16

     7,x = sqrt(5) y^2 的曲线(0<y<2),从曲线Y到这条曲线形成的立体,由圆盘组成。

    求这个形体体积.

     8,

     区域有y = x ^2  + 1,y = x+3围成的面积 沿着X轴向旋转,求旋转体体积,。

     

    两线交点:-1 , 2 

    PI * R(x) ^2 - PI * r(x)^2 的积分.

    PI(x+3)^2 - PI(x^2+1)^2 = PI[  (x+3)^2 -  (x^2+1)^2  ]  

    -1<x<2

     求积分.

     9,y=0与y=5 之间的y = x^2 / 2 

    a,图像绕Y旋转一周所形成的碗状体积。

    b,并且求如果每秒3立方单位的常数速率往碗里灌水,当水深为4个单位时,水面上升的速率。

     

     旋转法求体积,因为绕Y旋转,所以半径是x = sqrt(2y)

    面积:PI * r^2 = 2 *PI *y

    求积分0,5 区间 , 2*pi*y dy 的积分 是25PI

     v(h) = | A(h) dh

    则dv/dh = A(h) = 2 * PI * y

    dv/dt = (dv/dh) * (dh/dt)

    dh/dt 则是我们的速率。 dh/dt = (dv/dt) * (1 / 2*PI*y )

    则速率:dh/dt = 3 * (   1  /    2*PI*4 )

      5章 5.2 7题

    y=x, y=-x/2 , x=2  求两条曲线 和给定的范围 ,沿着Y旋转的体积。(圆柱薄壳法)

     

     圆柱薄壳法:

     

    微分:根据二阶导y''和一阶导y'大概画函数图像。

    <1>

    x<2                 y'<0 ,y'' <0 
    2           y=1     y'=0 ,y''<0
    2<x<4               y'>0 ,y''<0
    4           y=4
    4<x<6               y'>9,y''<0
    6           y=7
    x>6                 y'<0.y''<0

    。。

  • 相关阅读:
    700. Search in a Binary Search Tree
    100. Same Tree
    543. Diameter of Binary Tree
    257. Binary Tree Paths
    572. Subtree of Another Tree
    226. Invert Binary Tree
    104. Maximum Depth of Binary Tree
    1、解决sublime打开文档,出现中文乱码问题
    移植seetafaceengine-master、opencv到ARM板
    ubuntu16.04-交叉编译-SeetaFaceEngine-master
  • 原文地址:https://www.cnblogs.com/gearslogy/p/6831501.html
Copyright © 2020-2023  润新知