4.3_复合函数的导数

4.3 复合函数的导数

我们在前面接触的是 y=x2y = x^2 这种简单的函数。接下来尝试对复合函数求导。下面求 y=(ex2)2y = (\mathrm{e}^{x^2})^2 的导数 dydx\frac{\mathrm{dy}}{\mathrm{dx}} 。代码如下所示。

steps/step04.py

def f(x):
    A = Square()
    B = Exp()
    C = Square()
    return C(B(A(x)))
x = Variable(np.array(0.5))
dy = numerical_diff(f, x)
print(dy)

运行结果

3.2974426293330694

上面的代码将一系列的计算组合成了一个名为f的函数。函数在Python中也是对象,所以可以作为参数传给其他函数。在上面的例子中,函数f作为参数传给了numerical_diff函数。

运行上面的代码,得到的导数是3.297...。这意味着,如果x从0.5变成一个微小的值,y值的变化幅度将是这个微小值的3.297...倍。

现在我们已经成功实现了“自动”求导。只要用代码来定义要完成的计算(前面的例子定义了函数f),程序就会自动求出导数。使用这种方法,无论多么复杂的函数组合,程序都能自动求出导数。今后函数的种类越来越多的话,不管是什么计算,只要是可微函数,程序就能求出它的导数。不过遗憾的是,数值微分的方法存在一些问题。