Рекурсивно найти производную n-го порядка с помощью autograd grad () - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь найти n-ю производную функции, используя функцию grad из библиотеки autograd. grad (x) дает производную 1-го порядка, но не позволяет переменной найти, скажем, производную 3-го порядка et c. Есть ли способ, которым я мог бы сделать это рекурсивно, чтобы пользователь мог указать производный порядок, который он хочет видеть?

import matplotlib.pyplot as plt
from autograd import grad
import autograd.numpy as np


# a named Python function
g = lambda w: w**2

w_vals = np.linspace(-5,5,200)
nabla_g = grad(g)   #A function here that can find the nth derivative
# evaluate gradient over input range
g_vals = [g(v) for v in w_vals]
grad_vals = [nabla_g(v) for v in w_vals]

1 Ответ

0 голосов
/ 26 января 2020

Это довольно просто. Вы должны вложить вашу функцию града

# import matplotlib.pyplot as plt
from autograd import grad
import autograd.numpy as np

def my_grad(fun, ord):
    for i in range(ord):
        fun = grad(fun)
    return fun

# a named Python function
g = lambda w: w**3

# derivative x^3 = 3x^2
# derivative 3x^2 = 6x
# derivative 6x = 6
w_vals = np.linspace(-5,5,200)
nabla_g = my_grad(g, 3)   # recursive call to grad lead to 3° derivative
g_vals = [g(v) for v in w_vals]
grad_vals = [nabla_g(v) for v in w_vals]
print(grad_vals) #should output 6 for every input

Я также разработал рекурсивную версию my_grad:

def my_grad(fun, ord):
    if ord == 0:
       return fun
    return my_grad(grad(fun), ord-1)
...