重读微积分(七):方向导数

重读微积分(一):极限
重读微积分(二):三个极限常数的来源
重读微积分(三):洛必达法则
重读微积分(四):连续性和导数
重读微积分(五):数值导数
重读微积分(六):差商与牛顿插值
本系列所有代码皆用R语言完成。

5 方向导数

根据单变量函数的导数定义,可以类推出多变量函数的导数定义。唯一值得注意的地方是,多变量函数在求导时需要指明针对哪一个变量求导。例如,对于函数 f ( x , y ) f(x,y) f(x,y),在 ( x 0 , y 0 ) (x_0,y_0) (x0​,y0​)处对 x x x求导,可以写为

f x ′ ( x 0 , y 0 ) = lim ⁡ Δ x → 0 f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 ) Δ x f'_x(x_0,y_0)=\lim_{\Delta x\to0}\frac{f(x_0+\Delta x,y_0)-f(x_0,y_0)}{\Delta x} fx′​(x0​,y0​)=Δx→0lim​Δxf(x0​+Δx,y0​)−f(x0​,y0​)​

现有一函数 z = f ( x , y ) = 1 − ( x 2 + y 2 ) z=f(x,y)=1-(x^2+y^2) z=f(x,y)=1−(x2+y2),则 z x ′ = − 2 x z'_x=-2x zx′​=−2x。任取一点 ( x i , y i , z i ) (x_i,y_i,z_i) (xi​,yi​,zi​),以其导数的值为斜率,沿着 x x x方向做出一条切线,其方程为

y = y 0 z = − 2 x 0 ( x − x 0 ) + z 0 \begin{aligned} y&=y_0\\ z&=-2x_0(x-x_0)+z_0 \end{aligned} yz​=y0​=−2x0​(x−x0​)+z0​​

现绘制出100个随机点处 x x x方向的偏导数

x = matrix(data=seq(-5,4.95,0.05),nrow=200,ncol=200)
y = t(x)
z = 1-(x^2+y^2)
library(rgl)
persp3d(x,y,z,col="red")
N = 1000
x0 = rnorm(N)
y0 = rnorm(N)
z0 = 1-(x0^2+y0^2)
x1 = x0+3
z1 = -2*x0*3+z0
for(i in 1:N)
    lines3d(c(x0[i],x1[i]),c(y0[i],y0[i]),c(z0[i],z1[i]),col="green")

重读微积分(七):方向导数

从观感上来看,绿线的确是沿着 x x x方向。但是这个切线显然不是唯一的, y y y轴方向显然存在另一条切线。推而广之,一旦坐标系旋转,那么曲面上任意一点处的 x x x和 y y y方向均会发生变化。

那么曲面是否存在一个只和曲面特征有关,而与坐标系无关的参数?

在解决这个问题之前,最好先找到曲面某点沿着任意方向的导数。回顾 x x x方向偏导数的定义

f x ′ ( x 0 , y 0 ) = lim ⁡ Δ x → 0 f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 ) Δ x f'_x(x_0,y_0)=\lim_{\Delta x\to0}\frac{f(x_0+\Delta x,y_0)-f(x_0,y_0)}{\Delta x} fx′​(x0​,y0​)=Δx→0lim​Δxf(x0​+Δx,y0​)−f(x0​,y0​)​

如果把 x x x和 y y y这两个方向等同看待,则该式可以写成更加对偶的形式

f x ′ ( x 0 , y 0 ) = lim ⁡ Δ x → 0 f ( x 0 + 1 ⋅ Δ x , y 0 + 0 ⋅ Δ x ) − f ( x 0 , y 0 ) Δ x f'_x(x_0,y_0)=\lim_{\Delta x\to0}\frac{f(x_0+1\cdot\Delta x,y_0+0\cdot\Delta x)-f(x_0,y_0)}{\Delta x} fx′​(x0​,y0​)=Δx→0lim​Δxf(x0​+1⋅Δx,y0​+0⋅Δx)−f(x0​,y0​)​

f x ′ ( x 0 , y 0 ) = lim ⁡ δ x → 0 f ( x 0 + 1 ⋅ δ , y 0 + 0 ⋅ δ ) − f ( x 0 , y 0 ) δ f'_x(x_0,y_0)=\lim_{\delta x\to0}\frac{f(x_0+1\cdot\delta,y_0+0\cdot\delta)-f(x_0,y_0)}{\delta} fx′​(x0​,y0​)=δx→0lim​δf(x0​+1⋅δ,y0​+0⋅δ)−f(x0​,y0​)​

如果导数的方向发生旋转,则可以写为

f x ′ ( x 0 , y 0 ) = lim ⁡ δ → 0 f ( x 0 + cos ⁡ θ ⋅ δ , y 0 + sin ⁡ θ ⋅ δ ) − f ( x 0 , y 0 ) δ = lim ⁡ δ → 0 f ( x 0 + cos ⁡ θ ⋅ δ , y 0 + sin ⁡ θ ⋅ δ ) − f ( x 0 , y 0 + sin ⁡ θ ⋅ δ ) + f ( x 0 , y 0 + sin ⁡ θ ⋅ δ ) − f ( x 0 , y 0 ) δ = lim ⁡ cos ⁡ θ δ → 0 f ( x 0 + cos ⁡ θ ⋅ δ , y 0 + sin ⁡ θ ⋅ δ ) − f ( x 0 , y 0 + sin ⁡ θ ⋅ δ ) cos ⁡ θ δ ⋅ cos ⁡ θ + lim ⁡ sin ⁡ θ δ → 0 f ( x 0 , y 0 + sin ⁡ θ ⋅ δ ) − f ( x 0 , y 0 ) sin ⁡ θ δ ⋅ sin ⁡ θ = f x ′ ( x 0 , y 0 ) sin ⁡ θ + f y ′ ( x 0 , y 0 ) cos ⁡ θ \begin{aligned} f'_x(x_0,y_0)=&\lim_{\delta\to0}\frac{f(x_0+\cos\theta\cdot\delta,y_0+\sin\theta\cdot\delta)-f(x_0,y_0)}{\delta}\\ =&\lim_{\delta\to0}\frac{f(x_0+\cos\theta\cdot\delta,y_0+\sin\theta\cdot\delta)-f(x_0,y_0+\sin\theta\cdot\delta)+f(x_0,y_0+\sin\theta\cdot\delta)-f(x_0,y_0)}{\delta}\\ =&\lim_{\cos\theta\delta\to0}\frac{f(x_0+\cos\theta\cdot\delta,y_0+\sin\theta\cdot\delta)-f(x_0,y_0+\sin\theta\cdot\delta)}{\cos\theta\delta}\cdot\cos\theta\\ &+\lim_{\sin\theta\delta\to0}\frac{f(x_0,y_0+\sin\theta\cdot\delta)-f(x_0,y_0)}{\sin\theta\delta}\cdot\sin\theta\\ =&f'_x(x_0,y_0)\sin\theta+f'_y(x_0,y_0)\cos\theta \end{aligned} fx′​(x0​,y0​)====​δ→0lim​δf(x0​+cosθ⋅δ,y0​+sinθ⋅δ)−f(x0​,y0​)​δ→0lim​δf(x0​+cosθ⋅δ,y0​+sinθ⋅δ)−f(x0​,y0​+sinθ⋅δ)+f(x0​,y0​+sinθ⋅δ)−f(x0​,y0​)​cosθδ→0lim​cosθδf(x0​+cosθ⋅δ,y0​+sinθ⋅δ)−f(x0​,y0​+sinθ⋅δ)​⋅cosθ+sinθδ→0lim​sinθδf(x0​,y0​+sinθ⋅δ)−f(x0​,y0​)​⋅sinθfx′​(x0​,y0​)sinθ+fy′​(x0​,y0​)cosθ​

其中 ( cos ⁡ θ , sin ⁡ θ ) (\cos\theta,\sin\theta) (cosθ,sinθ)表示当前点的方向。受此启发,对于更多自变量的函数 y = f ( x 0 , x 1 , . . . x ) n y=f(x_0,x_1,...x)_n y=f(x0​,x1​,...x)n​,其在 V ⃗ = ( v 0 , v 1 , . . . v n ) \vec V=(v_0,v_1,...v_n) V =(v0​,v1​,...vn​)方向的导数可以写为

∂ f ∂ x 1 v 1 + ∂ f ∂ x 2 v 2 + ⋯ + ∂ f ∂ x n v n \frac{\partial f}{\partial x_1}v_1+ \frac{\partial f}{\partial x_2}v_2+\cdots+ \frac{\partial f}{\partial x_n}v_n ∂x1​∂f​v1​+∂x2​∂f​v2​+⋯+∂xn​∂f​vn​

如果写成矢量形式,则定义梯度

∇ f = [ ∂ f ∂ x 1 , ∂ f ∂ x 2 , ⋯   , ∂ f ∂ x n ] T \nabla f=[\frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2},\cdots, \frac{\partial f}{\partial x_n}]^T ∇f=[∂x1​∂f​,∂x2​∂f​,⋯,∂xn​∂f​]T

则在 V ⃗ \vec V V 方向的导数可以写为

D V f ( x ⃗ ) = ( ∇ f ) T ⋅ V ⃗ D_Vf(\vec x)=(\nabla f)^T\cdot\vec V DV​f(x )=(∇f)T⋅V

而今通过方向导数去考察 z = 1 − ( x 2 + y 2 ) z=1-(x^2+y^2) z=1−(x2+y2)这个函数,其梯度为 ( z x ′ , z y ′ ) = ( − 2 x , − 2 y ) (z'_x,z'_y)=(-2x,-2y) (zx′​,zy′​)=(−2x,−2y)。则该点处最大方向导数必与梯度方向相同,即 ( − 2 x 4 x 2 + 4 y 2 , − 2 y 4 x 2 + 4 y 2 ) (\frac{-2x}{\sqrt{4x^2+4y^2}},\frac{-2y}{\sqrt{4x^2+4y^2}}) (4x2+4y2 ​−2x​,4x2+4y2 ​−2y​),其方向导数为 2 x 2 + y 2 2\sqrt{x^2+y^2} 2x2+y2 ​。

任取一点 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0​,y0​,z0​),以其最大方向导数的方向为斜率做出一条直线,其方程为

x − x 0 − x 0 x 0 2 + y 0 2 = y − y 0 − y 0 x 0 2 + y 0 2 = z − z 0 2 x 0 2 + y 0 2 \frac{x-x_0}{\frac{-x_0}{\sqrt{x_0^2+y_0^2}}}=\frac{y-y_0}{\frac{-y_0}{\sqrt{x_0^2+y_0^2}}}=\frac{z-z_0}{2\sqrt{x_0^2+y_0^2}} x02​+y02​ ​−x0​​x−x0​​=x02​+y02​ ​−y0​​y−y0​​=2x02​+y02​ ​z−z0​​

x = ( z − z 0 ) − x 0 2 ( x 0 2 + y 0 2 ) + x 0 y = ( z − z 0 ) − y 0 2 ( x 0 2 + y 0 2 ) + y 0 \begin{aligned} x=(z-z_0)\frac{-x_0}{2(x_0^2+y_0^2)}+x_0\\ y=(z-z_0)\frac{-y_0}{2(x_0^2+y_0^2)}+y_0\\ \end{aligned} x=(z−z0​)2(x02​+y02​)−x0​​+x0​y=(z−z0​)2(x02​+y02​)−y0​​+y0​​

简单起见,在距离 x = 0 , y = 0 x=0,y=0 x=0,y=0的直线为 1 1 1处等间隔选取一些点,则 x 0 2 + y 0 2 = 1 \sqrt{x_0^2+y_0^2}=1 x02​+y02​ ​=1,上式简化为

x = − x 0 2 ( z − z 0 ) + x 0 y = − y 0 2 ( z − z 0 ) + y 0 \begin{aligned} x=-\frac{x_0}{2}(z-z_0)+x_0\\ y=-\frac{y_0}{2}(z-z_0)+y_0\\ \end{aligned} x=−2x0​​(z−z0​)+x0​y=−2y0​​(z−z0​)+y0​​

沿这些点梯度方向做一些直线,看看效果如何

x = matrix(data=seq(-5,4.95,0.05),nrow=200,ncol=200)
y = t(x)
z = -(x^2+y^2)
library(rgl)
persp3d(x,y,z,col="red")
theta = seq(-pi,pi,0.01)
x0 = cos(theta)
y0 = sin(theta)
z0 = 1-(x0^2+y0^2)
x1 = x0*0
y1 = y0*0
z1 = z0+2
for(i in 1:N)
    lines3d(c(x0[i],x1[i]),c(y0[i],y1[i]),c(z0[i],z1[i]),col="green")

如图所示,像一顶漂亮的帽子,在某个投影方向看去,和我们熟知的切线如出一辙。

重读微积分(七):方向导数

上一篇:读代码:geo_prior(2)


下一篇:Linux ebtable