首页 > 解决方案 > Numerical approximation of forward difference in an interval

问题描述

How can python be used for numerical finite difference calculation without using numpy? For example I want to find multiple function values numerically in a certain interval with a step size 0.05 for a first order and second order derivatives.

标签: pythonalgorithmmathdifferencederivative

解决方案


Why don't you want to use Numpy? It's a good library and very fast for doing numerical computations because it's written in C (which is generally faster for numerical stuff than pure Python).

If you're curious how these methods work and how they look in code here's some sample code:

def linspace(a, b, step):
    if a > b:
        # see if going backwards?
        if step < 0:
            return linspace(b, a, -1*step)[::-1]
        # step isn't negative so no points
        return []
    pt = a
    res = [pt]
    while pt <= b:
            pt += step
            res.append(pt)
    return res

def forward(data, step):
    if not data:
        return []
    res = []
    i = 0
    while i+1 < len(data):
        delta = (data[i+1] - data[i])/step
        res.append(delta)
        i += 1
    return res

# example usage
size = 0.1
ts = linspace(0, 1, size)
y = [t*t for t in ts]
dydt = forward(y, size)
d2ydt2 = forward(dydt, size)

Note: this will still use normal floating point numbers and so there are still odd rounding errors that happen because some numbers don't have an exact binary decimal representation.

Another library to check out is mpmath which has a lot of cool math functions like integration and special functions AND it allows you to specify how much precision you want. Of course using 100 digits of precision is going to be a lot slower than normal floats, but it is still a very cool library!


推荐阅读