重读微积分(一):极限
重读微积分(二):三个极限常数的来源
重读微积分(三):洛必达法则
重读微积分(四):连续性和导数
重读微积分(五):数值导数
重读微积分(六):差商与牛顿插值
本系列所有代码皆用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θδ→0limcosθδf(x0+cosθ⋅δ,y0+sinθ⋅δ)−f(x0,y0+sinθ⋅δ)⋅cosθ+sinθδ→0limsinθδ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∂fv1+∂x2∂fv2+⋯+∂xn∂fvn
如果写成矢量形式,则定义梯度
∇ 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 DVf(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 −x0x−x0=x02+y02 −y0y−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+x0y=(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)+x0y=−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")
如图所示,像一顶漂亮的帽子,在某个投影方向看去,和我们熟知的切线如出一辙。