计算定积分,VBA竟然比Python更准?

标签:VBA,Python,微积分

这段时间,一直利用晚上的空余时间在学习微积分,想将研究微积分作为自己的一项业余爱好,就好比研究Excel一样,奇怪吧!我自己也觉得很奇怪,但自己就是这样,奇怪的爱好,一个奇怪的人!

学习过微积分的人都知道,下面的定积分:

可以这样手工计算:

也可以编程计算。下面我们分别使用Python和VBA来计算,基本算法就是利用定积分的定义。(注:有兴趣的朋友可以查阅相关资料,了解定积分的定义,从而更好地理解程序)

Python

编写的程序代码如下:

代码语言:javascript
复制
from numpy import *
a,b = 0, 1
def f(x):
    return x**2
def trape(n):
    h=(b-a)/n
    x1=a
    sum=0
    for i in range(1,n):
        x2=a+i*h
        sum=sum+(f(x1)+f(x2))*h/2
        x1=x2
    return sum

我们假设n=100000,得到的结果如下图1所示。

图1

VBA

下面我们看看VBA代码及其结果。代码如下:

代码语言:javascript
复制
Sub test()
    Debug.Print trape(0, 1, 100000)
End Sub
Function trape(a As Integer, b As Integer, n As Long)
    Dim h As Double
    Dim x1 As Double
    Dim x2 As Double
    Dim sum As Double
    Dim i As Long
    h = (b - a) / n
    x1 = a
    sum = 0
    For i = 1 To n
        x2 = a + i * h
        sum = sum + (f(x1) + f(x2)) * h / 2
        x1 = x2
    Next i
    trape = sum
End Function
Function f(x As Double)
    f = x * x
End Function

运行代码后的结果如下图2所示。

图2

竟然更精确些!

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。