Есть ли способ дифференцировать функцию? - PullRequest
0 голосов
/ 20 октября 2018

Предположим, я определил функцию

def func(x):
    return x**2;

Есть ли метод XXX, который принимает "func" в качестве аргумента и возвращает другую функцию, которая является производной?Например,

dfunc = XXX(func);

print(dfunc(3))

дает мне 6.

Мне нужна функция, которая возвращает производную функции Бесселя первого порядка первого порядка для моей домашней работы>

1 Ответ

0 голосов
/ 21 октября 2018

Это можно сделать двумя способами:

  1. Использование символьной математики, которая в основном подобна кодированию алгебраического выражения, а затем позволяет компьютеру вычислить аналитическое выражение производной;они могут быть довольно мощными, но ограничены определенными типами проблем: https://www.sympy.org/en/index.html

  2. Использование конечных разностей.Это очень распространенная и мощная концепция, основанная на идее использования определения производной с малым и конечным значением delta_x вместо стремления к нулю: https://en.wikipedia.org/wiki/Finite_difference

Для вашей конкретной проблемы это можетбыть сделано, например:

import numpy as np
import matplotlib.pyplot as plt

def func(x):
    return x**2

def finiteDifference(f, limits, deltaX):
    # create values of the function at specific locations
    x = np.arange(limits[0], limits[1]+deltaX, deltaX)
    y = np.zeros(len(x))
    for i in range(len(x)):
        y[i] = f(x[i])
    # construct the derivative
    dydx = np.zeros(len(x))
    # first order at the ends
    dydx[0] = (y[1]-y[0]) / deltaX
    dydx[-1] = (y[-1]-y[-2]) / deltaX
    # central 2nd order elsewhere
    for i in range(1, len(x)-1):
        dydx[i] = (y[i+1] - y[i-1]) / (2.*deltaX)

    return x, y, dydx

x, y, dydx = finiteDifference(func, (-2, 2), 0.1)
plt.plot(x, y, "r-", x, dydx, "b-", lw=2)
# compare with analytical f'=2x
plt.plot(x, 2.*x, "gx", ms=5, mew=2)
plt.show()
...