3.2 导数与微分
导数又名微商,是微积分中重要的基本概念。一个函数在某一点的导数描述了这个函数在这一点附近的变化率。导数被用在许多人工智能算法中,特别是在基于导数的参数优化方法中,其应用更广泛。
3.2.1 导数
1.导数的定义
设函数在点的某个邻域内有定义,给一改变量,函数的改变量,若极限存在,则称函数在点处可导,并称此极限值为函数在点处的导数,记为,即
(3-1)
也常记为、或等。
在式(3-1)中,若令,则式(3-1)可改写为
(3-2)
式(3-2)也可以作为导数的定义公式。
若函数在内的每点都可导,则称在区间内可导。显然,对于内的每个确定的值,函数都对应一个确定的导数,这就构成了一个新的函数,这个函数叫作原来函数的导函数,记为、、或。
如果函数在包含点的某个区间内可导,函数在点处的导数就是导函数在处的函数值,即。在不会发生混淆的情况下,导函数也简称导数。
根据左右侧导数情况,在点处可导的充分必要条件是左导数和右导数都存在且相等。
2.可导与连续的关系
若函数在点处可导,则在点处一定连续;反之,则不然。
例如:在处不可导,但由于,所以在处连续。
3.复合函数求导
对于复合函数,其导数的计算要遵从链式法则,即令,则
(3-3)
4.隐函数求导
设是某个定义域上的函数,若存在定义域上的子集,使得对每个属于,存在相应的满足方程,则称方程确定了一个隐函数,记为。
在隐函数已经确定存在且可导的情况下,可以用复合函数求导的链式法则来对其求导。方程左右两边都对求导,由于其实是的一个函数,所以可以直接得到一个带有的方程,化简后可得到的表达式。
例3-2 求函数的导函数和在处的导数。
解:可利用Python包SymPy中的函数diff求函数的导函数,也可以求具体点的导数值。具体程序如下:
输出结果如下:
令,根据函数乘积的求导公式,也可以手动计算得出上面的结果,其中的导数用复合函数的链式法则来求。
例3-3 已知,求。
解:方程两边对求导,解得,然后利用Python包SymPy中的函数idiff求隐函数的导数。具体程序如下:
输出结果如下:
5.级数
设数列:,把表达式简记为,称其为常数项无穷级数,简称数项级数,在不引起混淆的情况下,也可以直接称为级数。其中,叫作数项级数的通项或一般项。若令
则称其为数项级数的部分和数列。若级数的部分和数列的极限存在,并设,则称级数收敛于,称为此级数的和,记作。若的极限不存在(包括极限为),则称级数发散。
例3-4 计算级数。
解:可利用Python包SymPy中的函数Sum求级数和。具体程序如下:
输出结果如下:
6.幂级数
给定区间I上的函数列,称式子
为函数项无穷级数,简称函数项级数,简写为,I称为它的定义域。
对于,若级数收敛,则称为级数的一个收敛点,收敛点的全体叫作收敛域。若级数发散,则称为级数的一个发散点,发散点的全体称为发散域。称
为级数的前n项和或部分和。
在收敛域内,若,则称为级数的和函数。记为
在级数的收敛域内,和函数一定存在。
形如
或
的函数项级数称为幂级数。其中,常数叫作幂级数的系数。
下面给出幂级数的收敛半径的计算方法。
定理3-1 对于幂级数,设(或),,则:
(1)若为常数且,则;
(2)若,则;
(3)若,则。
例3-5 求幂级数的收敛域。
解:根据上面的定理,利用Python包SymPy中的函数limit计算收敛半径,并用函数Sum判定在两端点是否收敛。具体程序如下:
计算结果如下:
所以幂级数的收敛域为。
7.泰勒级数
泰勒级数是特殊的幂级数。如果函数在处具有阶导数,那么可利用关于的次多项式来构建幂级数的部分和,从而逼近原函数。
若函数在包含的某个闭区间上具有阶导数,且在开区间上具有阶导数,则对闭区间上的任意一点x,得
其中,表示的阶导数,等号后的多项式称为函数在处的泰勒展开式,是泰勒级数的余项,表示为的高阶无穷小。
例3-6 求函数在处的3阶泰勒级数。
解:可利用Python包SymPy中的函数series进行泰勒级数展开。具体程序如下:
输出结果如下:
3.2.2 偏导数
对于多元函数求导,可仿照一元函数导数的定义方式进行定义。但是,多元函数具有多个自变量,且各自独立变化,定义时,可先让其他自变量保持不变,仅让其中一个自变量变化,研究相应的因变量关于这个自变量的变化率问题,这样就可以归结为一元函数的求导问题。若进一步研究多个自变量同时变化时的求导问题,则产生了偏导数及全微分的概念。
设函数在内有定义,若固定,则函数变为关于x的一元函数,此时给自变量x在点一个改变量,则函数相应地有改变量
称其为函数在点处关于x的偏改变量。类似地,函数在点处关于y的偏改变量为
1.偏导数
设二元函数在内有定义,若极限
存在,则称函数在点关于x可偏导,并且称该极限值为函数在处对x的偏导数,通常采用下列记号来表示:
如可以写。
同样地,可以定义函数在处对y的偏导数,通常采用下列记号来表示:
若函数在某区域内的每点处都有偏导数,则偏导数、也是二元函数,叫作函数的偏导函数。通常采用下列记号来表示:
及
偏导数的计算方法同一元函数导数的计算方法。
2.全微分
如果函数在处的全改变量
可表示为,其中,是只与有关而与无关的量,,则称函数在点处可微分,而称为函数在点处的全微分,记作
其中,偏导数,,如记,则全微分的形式为
(3-4)
若函数在区域内各点处都可微,则称函数在内可微。函数在区域内的全微分记为
例3-7 求函数的偏导数。
解:可利用Python包SymPy中的函数diff求偏导数。具体程序如下:
输出结果如下:
3.2.3 梯度和方向导数
1.梯度
设函数在平面区域内具有一阶连续偏导数,则对于每点,都可确定一个向量:
该向量称为函数在点处的梯度,记作,即
梯度的几何意义:梯度为等高线上点处的法向量,且从数值较低的等高线指向数值较高的等高线。
2.方向导数
设函数在点的某一邻域内有定义,自点引射线,设x轴正向到射线的转角为(逆时针方向:;顺时针方向:),并设为上的另一点且,考虑函数的增量与、两点间的距离的比值。当沿着趋于时,若这个比的极限存在,则称该极限为函数在点处沿方向的方向导数,记作,即
若函数在点处是可微分的,则函数在该点沿任一方向的方向导数都存在,且有
(3-5)
可以看出,函数在某点的梯度是这样一个向量:它的方向与函数取得最大方向导数的方向一致,而它的模为方向导数的最大值。
例3-8 计算函数的梯度。
解:首先使用Python中的函数CoordSys3D构造笛卡儿坐标系,然后利用函数gradient求梯度。具体程序如下:
输出结果如下: