#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 цифр будет намного медленнее, чем обычные значения с плавающей запятой, но это все равно очень классная библиотека!