西安电子科技大学出版的《VB常用算法大全》第三章介绍了数值积分的几种算法

解决方案 »

  1.   

    能帮助贴出一些程序代码吗??
      

  2.   

    我从一本C++书上“翻译”过来的,用的是“变步长的辛普森递推公式”求积分。
    1、用梯形公式计算面积近似值。
       I1n=T1n=h*(f(a)+f(b))/2
    2、用变步长梯形法计算面积近似值。
       T2n=T1n/2+h*A/2   <--A代表求和公式,即程序中的for循环部分
    3、用辛普森公式计算积分近似值。
       I2n=(4*T2n-T1n)/3
    4、当|I2n-I1n|<eps则得到所求。Option ExplicitPrivate Sub Form_Load()
        Dim n As Integer
        Dim a As Double, b As Double
        Dim h As Double, T1n As Double, T2n As Double, I1n As Double, I2n As Double
        n = 1           '初值
        a = 0: b = 4    '积分区间
        
        Const eps = 0.00000001      '积分精度
        
        h = b - a
        T2n = h * (f(a) + f(b)) / 2 '梯形公式计算面积近似值
        I2n = h * (f(a) + f(b)) / 2
        I1n = 0
        
        Do While Abs(I2n - I1n) >= eps  '求积分,当上次积分值I1n与本次积分值I2n之差小于esp时,
                                        '则认为所求积分的近似度已达到要求
            T1n = T2n
            I1n = I2n
            
            Dim sigma As Double
            sigma = 0
            Dim k As Integer
            For k = 0 To n - 1              '求变步长梯形的和部分
                Dim x As Double
                x = a + (k + 0.5) * h
                sigma = sigma + f(x)
            Next k
                        
            T2n = (T1n + h * sigma) / 2     '变步长梯形
            I2n = (4 * T2n - T1n) / 3       '辛普森公式
            
            n = n * 2                       '划分
            h = h / 2
        Loop
        
        Form1.AutoRedraw = True
        Print I2n
    End SubFunction f(x As Double) As Double
        f = (x + 2) / Sqr(2 * x + 1)
        'f = x * x
        'f = Exp(x) / (1 + x * x)
    End Function