python - 使用 autograd grad() 递归地找到 n 阶导数
问题描述
我正在尝试使用 autograd 库中的 grad 函数找到函数的 n 次导数。grad(x) 给出一阶导数,但它不允许变量找到让我们说三阶导数等。有没有办法我可以递归地执行此操作,以便用户可以提供他们想要的导数顺序查看?
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]
解决方案
这很简单。你应该嵌套你的 grad 函数
# 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)
推荐阅读
- git - 分布式版本控制系统中无可争议的代码时间戳
- javascript - 从谷歌电子表格中的单元格调用 showSidebar()
- javascript - Javascript 调整元素大小
- javascript - 异步等待调用
- bash - 在 Mac 上:我可以创建一个快捷键来根据剪贴板内容运行 bash 代码吗
- azure - 在 .Net Core 中将登录与 Azure Active Directory 集成
- java - Hibernate 在 Java Main Class 中工作,但如果通过 Managedbean 连接到 JSF 表单则不起作用
- wordpress - 有没有办法可以自定义一个 Electro 主题的 WordPress 网站标头?
- javascript - 在 v8 中实现无限列表
- qt - 尝试转换为 QWidget 的 Qt3DWindow 崩溃