博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python求向量函数的雅可比矩阵_[数学] 向量函数的雅可比矩阵与链式法则
阅读量:5254 次
发布时间:2019-06-14

本文共 4012 字,大约阅读时间需要 13 分钟。

复习一下我的数学知识T_T

1. 回顾高等数学:多元数量函数的梯度

回想高等数学中常见的多元数量函数$f:\mathbb{R}^{n}\rightarrow \mathbb{R}^{1}$,我们可以把他的输入当作一个向量 $\bf{x}\in \mathbb{R}^{n}$,输出$y=f(\bf{x})\in \mathbb{R}^{1}$是一个数字。那么由高数的知识我们知道$f$的梯度定义为

$$

\nabla f_{\boldsymbol{x}} \overset{\underset{\mathrm{def}}{}}{=} \left[ \frac{\partial f }{\partial x_1}, \frac{\partial f }{\partial x_2},\cdots,\frac{\partial f }{\partial x_n} \right]=\frac{\partial f }{\partial \boldsymbol{x}}

$$

有了上式,我们还可以写出全微分的向量化表示

\[

\begin{aligned}

df &= \frac{\partial f}{\partial x_1}dx_1+\frac{\partial f}{\partial x_2}dx_2+\cdots+\frac{\partial f}{\partial x_n}dx_n \\

&=\left[ \frac{\partial f }{\partial x_1}, \frac{\partial f }{\partial x_2},\cdots,\frac{\partial f }{\partial x_n} \right] \left[dx_1, dx_2,\cdots,dx_n \right]^T \\

&=\frac{\partial f }{\partial \boldsymbol{x}} d\boldsymbol{x}

\end{aligned}

\]

接下来我们将其推广到向量函数。向量函数的“梯度”其实就是雅可比矩阵。

2. 向量函数求导:雅可比矩阵

设$f:\mathbb{R}^{n}\rightarrow \mathbb{R}^{m}$是一个从映射到的函数,它的输入是一个向量 $\bf{x}\in \mathbb{R}^{n}$,输出是向量$\bf{y}=f(\bf{x})\in \mathbb{R}^{m}$。

如果我们将输出向量$\bf{y}$的每个分量$\bf{y_i}$看作一个独立的多元数量函数,那么我们可以写出每个$\bf{y_i}$对每个$\bf{x_j}$的偏导数(也就是梯度)

$$

\left[ \frac{\partial y_i }{\partial x_1}, \frac{\partial y_i }{\partial x_2},\cdots,\frac{\partial y_i }{\partial x_n} \right]

$$

将每个$\bf{y_i}$的梯度组合起来就得到了雅可比矩阵

\[

\begin{aligned}J=\left(\begin{array}{ccc}

\frac{\partial y_{1}}{\partial x_{1}} & \cdots & \frac{\partial y_{1}}{\partial x_{n}}\\

\vdots & \ddots & \vdots\\

\frac{\partial y_{m}}{\partial x_{1}} & \cdots & \frac{\partial y_{m}}{\partial x_{n}}

\end{array}\right)\end{aligned}

\]

也常写作:

$$

J=\frac{\partial(y_1,…,y_m)}{\partial(x_1,…,x_n)}

$$

雅可比矩阵表示了函数 $\bf{f}$ 在每一处可导点的导数。具体地说,设 $\Delta \bf{x}$ 为一在 $\bf{x}$ 处的位移向量(假设为列向量),则 $J(\bf{x}) \cdot \Delta \bf{x}$ 就是函数值的位移向量(类似一元数值函数里 $\Delta y=y'(x)*\Delta x$),该函数值的位移向量即为 $\bf{x}$ 处的$\bf{f}(\bf{x})$增量的最佳线性逼近(更熟悉点的词叫全微分)。类似于导数,雅可比矩阵是函数局部的线性化,使用矩阵形式来表示微分(线性逼近)这个线性变换。

提一点雅可比行列式有关的:当上述$m=n$时,$\bf{f}$是一个从$\mathbb{R}^n$到$\mathbb{R}^n$的映射,因此雅可比矩阵是一个方阵,我们可以求出来这个方阵的行列式,常称雅可比行列式。对高等数学(下)有印象的人应该可以记得起这个名字,雅可比行列式常用在多元微积分中,尤其是在在换元积分时,需要用它作为乘子。为什么要作为乘子出现?感性的理解,这还是因为在积分中空间转换带来的面积/体积变化,而众所周知行列式就是体积/面积,雅可比矩阵作为导数就表现了局部的线性变化比例。

3. 向量函数求导:链式法则

一般来说我们最常见的是标量函数的链式法则,类似这样:

设$f$和$g$为两个关于$x$可导函数,则复合函数$(f\circ g)(x)$的导数$(f\circ g)'(x)$为:$(f\circ g)'(x)=f'(g(x))g'(x)$.

那么向量函数的链式法则又是什么样的?

考虑可微函数 $f:\mathbb{R}^m \rightarrow \mathbb{R}^k$ 和 $g:\mathbb{R}^n \rightarrow \mathbb{R}^m$,以及$\mathbb{R}^n$上一点 $\bf{x}$。令 $D_{\bf{x}}g$ 表示$g$在$\bf{x}$处的全微分,$D_{g(\bf{x})}f$ 表示$f$在$g(\bf{x})$处的全微分,则复合函数$(f\circ g)(\bf{x})$的全微分可表示为:

$$

D_{\bf{x}}(f\circ g)(\bf{x})=D_{g(\bf{x})}f\circ D_{\bf{x}}g

$$

相应的,用雅可比矩阵表示的形式为:

$$

J_{f \circ g}=(J_f \circ g)J_{g}

$$

或者用变量名表示的话写成

$$

\frac{\partial(y_1,…,y_k)}{\partial(x_1,…,x_n)}=\frac{\partial(y_1,…,y_k)}{\partial(u_1,…,u_m)}\frac{\partial(u_1,…,u_m)}{\partial(x_1,…,x_n)}

$$

上式中右边意为两个矩阵相乘。

严谨的数学证明是比较技术性的,本文不予讨论(wobuhui)。我们来从直观上理解一下这个等式。首先,我们知道雅可比矩阵的“成因”是用矩阵来表示一阶微分的,也就是把一阶微分的算子当成一个线性变换,而复合函数等于是一个嵌套,也就是函数的函数,对应到线性变换里,也就是线性变换的线性变换,而我们又知道用矩阵表示线性变换时这种“线性变换的线性变换”,就是相当于两个矩阵的乘积。到这里。我们把微积分和线性代数两种工具结合到了一起,就得到了这个结果。

4. 例子

举一个具体的算例来说明今天所讲的内容吧。

设有函数 $g:\mathbb{R} \rightarrow \mathbb{R}^3$为

$$

g(t)=

\left(

\begin{array}{c}

t \

t^2\

t^3

\end{array}

\right)

$$

和 $f:\mathbb{R}^3 \rightarrow \mathbb{R}$为

$$

f

\left(

\begin{array}{c}

x \

y\

z

\end{array}

\right)=x^2+xyz+5y

$$

现在要求求出$(f \circ g)'(t)$

首先我们使用暴力算的方法,全部带入之后计算一下看看

\[

\begin{aligned}

(f \circ g)'(t)&=f(g(t))=f(t,t^2,t^3)\\

&=t^2+t^6+5t^2\\

&=6t^2+t^6

\end{aligned}

\]

这个函数就很简单了,我们可以直接求导得到

$$

(f \circ g)'(t)=12t+6t^5 \qquad (1)

$$

然后我们再用雅可比矩阵和链式法则来求一下

由上可知,

$$

J_{f}(x,y,z)=\left[2x+yz,xz+5,xy \right]

$$

代入$g(t)$可得

$$

J_{f}(g(t))=\left[2t+t^5,t^4+5,t^3 \right]

$$

对于$g$,有

$$

J_{g}(t)=\left[\begin{array}{c}

1\

2t\

3t^2

\end{array}\right]

$$

运用链式法则我们可以得到

\[

\begin{aligned}

(f \circ g)'(t)&=J_{f}(g(t))\cdot J_{g}(t)\\

&=\left[2t+t^5,t^4+5,t^3 \right]

\left[\begin{array}{c}

1\\

2t\\

3t^2

\end{array}\right]\\

&=2t+t^5+2t^5+10t+3t^5\\

&=12t+6t^2

\end{aligned} \qquad (2)

\]

这与(1)的结果一致,说明我们使用链式法则

计算的正确性是有保证的。

转载地址:http://ngeav.baihongyu.com/

你可能感兴趣的文章
关于zipfile解压出现的字符编码问题
查看>>
Windows API 弹出文本框输入的内容
查看>>
UVALive - 6571 It Can Be Arranged 最大流
查看>>
Javascript学习笔记(二)在HTML中使用Javascript
查看>>
完全背包
查看>>
Cookie、 LocalStorage 与 SessionStorage详解
查看>>
Thuwc2018 游记
查看>>
R语言输入与输出
查看>>
国土档案管理信息系统【档案著录】-他项权利类档案著录
查看>>
P3366 【模板】最小生成树
查看>>
一个屌丝程序猿的人生(六十九)
查看>>
(二)代理模式详解(包含原理详解)
查看>>
webgame(php+flex) 的优化方案。
查看>>
Xamarin Studio –Project not built in active configuration
查看>>
Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论
查看>>
Pandas模块
查看>>
为程序申请管理员权限
查看>>
day6——is,==,编码和解码
查看>>
mybatis学习(三)——接口式编程
查看>>
Leetcode 74 Search a 2D matrix
查看>>