Численное приближение прямой разницы в интервале

#python #algorithm #math #difference #derivative

#python #алгоритм #математика #разница #производная

Вопрос:

Как можно использовать Python для численного вычисления конечных разностей без использования numpy? Например, я хочу численно найти значения нескольких функций в определенном интервале с шагом 0,05 для производных первого порядка и второго порядка.

Ответ №1:

Почему вы не хотите использовать Numpy? Это хорошая библиотека и очень быстрая для выполнения численных вычислений, потому что она написана на C (что, как правило, быстрее для числовых данных, чем чистый Python).

Если вам интересно, как работают эти методы и как они выглядят в коде, вот несколько примеров кода:

 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)
  

Примечание: при этом по-прежнему будут использоваться обычные числа с плавающей запятой, и поэтому все еще возникают нечетные ошибки округления, которые возникают из-за того, что некоторые числа не имеют точного двоично-десятичного представления.

Еще одна библиотека, которую стоит проверить, — это mpmath, в которой есть много интересных математических функций, таких как интеграция и специальные функции, и это позволяет вам указать, какую точность вы хотите. Конечно, использование точности в 100 цифр будет намного медленнее, чем обычные значения с плавающей запятой, но это все равно очень классная библиотека!