详解方向导数
flyfish
方向导数是描述了函数在某一特定方向上的变化率。具体来说,给定一个多元函数 f ( x , y , z , … ) f(x, y, z, \ldots) f(x,y,z,…) 和一个方向向量 v \mathbf{v} v,方向导数表示函数 f f f 沿着向量 v \mathbf{v} v 方向的瞬时变化率。
方向导数的说明:
设 f : R n → R f: \mathbb{R}^n \to \mathbb{R} f:Rn→R 是一个在点 a = ( a 1 , a 2 , … , a n ) \mathbf{a} = (a_1, a_2, \ldots, a_n) a=(a1,a2,…,an) 处可微的函数, v = ( v 1 , v 2 , … , v n ) \mathbf{v} = (v_1, v_2, \ldots, v_n) v=(v1,v2,…,vn) 是一个单位向量,即 ∥ v ∥ = 1 \|\mathbf{v}\| = 1 ∥v∥=1。函数 f f f 在点 a \mathbf{a} a 处沿方向 v \mathbf{v} v 的方向导数记为 D v f ( a ) D_{\mathbf{v}} f(\mathbf{a}) Dvf(a),其定义为: D v f ( a ) = ∇ f ( a ) ⋅ v D_{\mathbf{v}} f(\mathbf{a}) = \nabla f(\mathbf{a}) \cdot \mathbf{v} Dvf(a)=∇f(a)⋅v其中, ∇ f ( a ) \nabla f(\mathbf{a}) ∇f(a) 是 f f f 在点 a \mathbf{a} a 处的梯度向量, ⋅ \cdot ⋅ 表示向量的点积运算。
方向导数的详细解释
-
多元函数 f : R n → R f: \mathbb{R}^n \to \mathbb{R} f:Rn→R
f : R n → R f: \mathbb{R}^n \to \mathbb{R} f:Rn→R 表示的是一个从 n n n 维实数空间到实数的函数。
R \mathbb{R} R 是表示实数集合的符号。
R n \mathbb{R}^n Rn 表示 n n n 维实数向量空间。即, f f f 的输入是一个包含 n n n 个实数的向量,输出是一个实数。 -
单位向量 v \mathbf{v} v
v = ( v 1 , v 2 , … , v n ) \mathbf{v} = (v_1, v_2, \ldots, v_n) v=(v1,v2,…,vn) 是一个单位向量,表示某一特定方向。
单位向量的定义是其长度为1,即 ∥ v ∥ = 1 \|\mathbf{v}\| = 1 ∥v∥=1 。 -
梯度向量 ∇ f ( a ) \nabla f(\mathbf{a}) ∇f(a)
∇ f ( a ) \nabla f(\mathbf{a}) ∇f(a) 是函数 f f f 在点 a \mathbf{a} a 处的梯度向量。
梯度向量 ∇ f ( a ) \nabla f(\mathbf{a}) ∇f(a) 是由 f f f 在点 a \mathbf{a} a 处的各个偏导数组成的向量,即: ∇ f ( a ) = ( ∂ f ∂ x 1 ( a ) , ∂ f ∂ x 2 ( a ) , … , ∂ f ∂ x n ( a ) ) \nabla f(\mathbf{a}) = \left( \frac{\partial f}{\partial x_1}(\mathbf{a}), \frac{\partial f}{\partial x_2}(\mathbf{a}), \ldots, \frac{\partial f}{\partial x_n}(\mathbf{a}) \right) ∇f(a)=(∂x1∂f(a),∂x2∂f(a),…,∂xn∂f(a)) -
可微
函数 f f f 在点 a \mathbf{a} a 处可微表示函数 f f f 在该点处是平滑的,并且有定义良好的导数。
可微函数在小范围内可以被线性函数很好地近似。 -
方向导数 D v f ( a ) D_{\mathbf{v}} f(\mathbf{a}) Dvf(a)
D v f ( a ) D_{\mathbf{v}} f(\mathbf{a}) Dvf(a) 表示函数 f f f 在点 a \mathbf{a} a 处沿方向 v \mathbf{v} v 的变化率。
它的定义是: D v f ( a ) = ∇ f ( a ) ⋅ v D_{\mathbf{v}} f(\mathbf{a}) = \nabla f(\mathbf{a}) \cdot \mathbf{v} Dvf(a)=∇f(a)⋅v 。 -
点积运算(内积)
向量的点积表示为 ⋅ \cdot ⋅,是两个向量对应分量乘积的和。
对于两个向量 a = ( a 1 , a 2 , … , a n ) \mathbf{a} = (a_1, a_2, \ldots, a_n) a=(a1,a2,…,an) 和 b = ( b 1 , b 2 , … , b n ) \mathbf{b} = (b_1, b_2, \ldots, b_n) b=(b1,b2,…,bn),它们的点积 a ⋅ b \mathbf{a} \cdot \mathbf{b} a⋅b 计算如下: a ⋅ b = a 1 b 1 + a 2 b 2 + ⋯ + a n b n \mathbf{a} \cdot \mathbf{b} = a_1 b_1 + a_2 b_2 + \cdots + a_n b_n a⋅b=a1b1+a2b2+⋯+anbn
梯度向量和偏导数
-
偏导数 :偏导数 ∂ f ∂ x i \frac{\partial f}{\partial x_i} ∂xi∂f 表示当所有其他变量保持不变时,函数 f f f 相对于变量 x i x_i xi 的变化率。也就是说,偏导数是函数在各个坐标轴方向上的变化率。
-
梯度向量 :梯度向量 ∇ f ( a ) \nabla f(\mathbf{a}) ∇f(a) 是由所有偏导数组成的向量: ∇ f ( a ) = ( ∂ f ∂ x 1 ( a ) , ∂ f ∂ x 2 ( a ) , … , ∂ f ∂ x n ( a ) ) \nabla f(\mathbf{a}) = \left( \frac{\partial f}{\partial x_1}(\mathbf{a}), \frac{\partial f}{\partial x_2}(\mathbf{a}), \ldots, \frac{\partial f}{\partial x_n}(\mathbf{a}) \right) ∇f(a)=(∂x1∂f(a),∂x2∂f(a),…,∂xn∂f(a))
梯度向量和方向导数的关系
首先,需要理解梯度向量和方向导数的关系。
给定一个函数 f ( x ) f(\mathbf{x}) f(x),其梯度向量 ∇ f ( x ) \nabla f(\mathbf{x}) ∇f(x) 在点 x \mathbf{x} x 处定义为:
∇ f ( x ) = ( ∂ f ∂ x 1 , ∂ f ∂ x 2 , … , ∂ f ∂ x n ) \nabla f(\mathbf{x}) = \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \ldots, \frac{\partial f}{\partial x_n} \right) ∇f(x)=(∂x1∂f,∂x2∂f,…,∂xn∂f)方向导数 D v f ( x ) D_{\mathbf{v}} f(\mathbf{x}) Dvf(x) 是函数 f f f 在点 x \mathbf{x} x 处沿着单位方向向量 v \mathbf{v} v 的变化率。它可以表示为梯度向量和方向向量的点积:
D v f ( x ) = ∇ f ( x ) ⋅ v = ∑ i = 1 n ∂ f ∂ x i v i D_{\mathbf{v}} f(\mathbf{x}) = \nabla f(\mathbf{x}) \cdot \mathbf{v} = \sum_{i=1}^n \frac{\partial f}{\partial x_i} v_i Dvf(x)=∇f(x)⋅v=∑i=1n∂xi∂fvi
梯度向量指向函数值增加最快的方向的原因
梯度向量指向的是函数值增加最快的方向原因如下:
-
方向导数的最大值 :考虑单位向量 v \mathbf{v} v 与梯度向量 ∇ f ( x ) \nabla f(\mathbf{x}) ∇f(x) 的点积。根据点积的定义:
∇ f ( x ) ⋅ v = ∥ ∇ f ( x ) ∥ ∥ v ∥ cos θ \nabla f(\mathbf{x}) \cdot \mathbf{v} = \|\nabla f(\mathbf{x})\| \|\mathbf{v}\| \cos \theta ∇f(x)⋅v=∥∇f(x)∥∥v∥cosθ其中, θ \theta θ 是梯度向量 ∇ f ( x ) \nabla f(\mathbf{x}) ∇f(x) 和单位向量 v \mathbf{v} v 之间的夹角。由于 v \mathbf{v} v 是单位向量,即 ∥ v ∥ = 1 \|\mathbf{v}\| = 1 ∥v∥=1,上式可以简化为:
∇ f ( x ) ⋅ v = ∥ ∇ f ( x ) ∥ cos θ \nabla f(\mathbf{x}) \cdot \mathbf{v} = \|\nabla f(\mathbf{x})\| \cos \theta ∇f(x)⋅v=∥∇f(x)∥cosθ因此,方向导数 D v f ( x ) D_{\mathbf{v}} f(\mathbf{x}) Dvf(x) 为:
D v f ( x ) = ∥ ∇ f ( x ) ∥ cos θ D_{\mathbf{v}} f(\mathbf{x}) = \|\nabla f(\mathbf{x})\| \cos \theta Dvf(x)=∥∇f(x)∥cosθ -
方向导数的最大值分析 :因为 cos θ \cos \theta cosθ 的最大值为 1,当且仅当 θ = 0 \theta = 0 θ=0 度时,即 v \mathbf{v} v 与 ∇ f ( x ) \nabla f(\mathbf{x}) ∇f(x) 同方向时,方向导数 D v f ( x ) D_{\mathbf{v}} f(\mathbf{x}) Dvf(x) 取得最大值:
D v f ( x ) = ∥ ∇ f ( x ) ∥ D_{\mathbf{v}} f(\mathbf{x}) = \|\nabla f(\mathbf{x})\| Dvf(x)=∥∇f(x)∥这意味着,当单位向量 v \mathbf{v} v 与梯度向量 ∇ f ( x ) \nabla f(\mathbf{x}) ∇f(x) 同方向时,方向导数取得最大值。因此,梯度向量 ∇ f ( x ) \nabla f(\mathbf{x}) ∇f(x) 指向的是函数值增加最快的方向。
概括的说
梯度向量 ∇ f ( x ) \nabla f(\mathbf{x}) ∇f(x) 是由函数在各个坐标轴方向上的偏导数组成的向量。
方向导数 D v f ( x ) D_{\mathbf{v}} f(\mathbf{x}) Dvf(x) 表示函数在点 x \mathbf{x} x 处沿单位方向向量 v \mathbf{v} v 的变化率,通过梯度向量和方向向量的点积计算。
根据点积公式 ∇ f ( x ) ⋅ v = ∥ ∇ f ( x ) ∥ cos θ \nabla f(\mathbf{x}) \cdot \mathbf{v} = \|\nabla f(\mathbf{x})\| \cos \theta ∇f(x)⋅v=∥∇f(x)∥cosθ,当 cos θ \cos \theta cosθ 取最大值 1 时,方向导数 D v f ( x ) D_{\mathbf{v}} f(\mathbf{x}) Dvf(x) 取得最大值。
当单位向量 v \mathbf{v} v 与梯度向量 ∇ f ( x ) \nabla f(\mathbf{x}) ∇f(x) 同方向时,方向导数最大,梯度向量指向函数值增加最快的方向。
示例:计算方向导数
假设有一个函数 f ( x , y ) = x 2 + y 2 f(x, y) = x^2 + y^2 f(x,y)=x2+y2,要计算在点 ( 1 , 1 ) (1, 1) (1,1) 处沿方向 v = ( 1 2 , 1 2 ) \mathbf{v} = \left( \frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}} \right) v=(21,21) 的方向导数。
-
计算梯度向量 :
∇ f ( x , y ) = ( ∂ f ∂ x , ∂ f ∂ y ) = ( 2 x , 2 y ) \nabla f(x, y) = \left( \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y} \right) = \left( 2x, 2y \right) ∇f(x,y)=(∂x∂f,∂y∂f)=(2x,2y)
在点 ( 1 , 1 ) (1, 1) (1,1) 处: ∇ f ( 1 , 1 ) = ( 2 × 1 , 2 × 1 ) = ( 2 , 2 ) \nabla f(1, 1) = \left( 2 \times 1, 2 \times 1 \right) = (2, 2) ∇f(1,1)=(2×1,2×1)=(2,2) -
计算方向导数 :
D v f ( 1 , 1 ) = ∇ f ( 1 , 1 ) ⋅ v = ( 2 , 2 ) ⋅ ( 1 2 , 1 2 ) D_{\mathbf{v}} f(1, 1) = \nabla f(1, 1) \cdot \mathbf{v} = (2, 2) \cdot \left( \frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}} \right) Dvf(1,1)=∇f(1,1)⋅v=(2,2)⋅(21,21)
= 2 × 1 2 + 2 × 1 2 = 2 2 + 2 2 = 2 2 = 2 \times \frac{1}{\sqrt{2}} + 2 \times \frac{1}{\sqrt{2}} = \frac{2}{\sqrt{2}} + \frac{2}{\sqrt{2}} = 2\sqrt{2} =2×21+2×21=22+22=22
Python 示例代码
以下是一个用 Python 计算并验证方向导数的代码示例:
import numpy as npdef f(x, y):return x**2 + y**2def grad_f(x, y):return np.array([2*x, 2*y])# 给定点和方向向量
point = np.array([1, 1])
direction = np.array([1/np.sqrt(2), 1/np.sqrt(2)]) # 单位向量# 计算梯度
gradient = grad_f(point[0], point[1])# 计算方向导数
directional_derivative = np.dot(gradient, direction)print("梯度向量:", gradient)
print("方向向量:", direction)
print("方向导数:", directional_derivative)
输出
梯度向量: [2 2]
方向向量: [0.70710678 0.70710678]
方向导数: 2.82842712474619