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


    决定把例题用程序都完成一遍。从最基本的开始:语言选择用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

    。。

  • 相关阅读:
    JAVA 正则表达式 (超详细)
    Windows命令-route
    Spring3 MVC请求参数获取的几种方法[转]
    Linux-支持中文
    Linux-Tmux使用初体验
    Linux命令-工作管理命令:&,ctrl+z,jobs,fg,bg
    Linux命令-服务管理命令:chkconfig
    Linux命令-文件系统常用命令:df,du,fsck,dumpe2fs
    Linux命令-用户管理:useradd,userdel,usermod,id,su,env,exit
    Linux命令-某个用户组下面的所有用户
  • 原文地址:https://www.cnblogs.com/gearslogy/p/6831501.html
Copyright © 2020-2023  润新知