数值梯度运算

二变量函数F(x,y)的梯度被定义为

\[\nabla F=\frac{\partial F}{\partial y}\hat{i}+\frac{\partial F}{\partial y}\hat{j}\]

并且可以认为它是指向F值增大方向的所有向量构成的集合。在MATLAB中,可以计算任意个变量的函数的数值梯度(差分)。对于有N个变量的函数F(x,y,z,…)有

\[\nabla F=\frac{\partial F}{\partial x}\hat{i}+\frac{\partial F}{\partial y}\hat{j}+\frac{\partial F}{\partial z}\hat{k}+...\]

用gradient函数可以进行数值梯度运算。该函数的语法格式如下。

FX=gradient(F):F为返回一维数值梯度的向量。FX对应于\(\partial F/\partial x\),即x方向上的差值。

[FX,FY] = gradient (F):返回矩阵F的数值梯度。其中,FX相当于\(\partial F/\partial x\),为x方向的差分值。FY相当于\(\partial F/\partial y\),为y方向的差分值。每个方向的点间隔假设为1。

[FX,FY,FZ,…]=gradient(F):F有N维,返回F的N个梯度组分。有两种方法可以控制F中值的间隔。其一是用单个间隔值h指定每个方向上的点间隔,其二是用N个间隔值(h1,h2,…)指定F的每个维的间隔。标量间隔参数指定每个维的间隔为常数。向量参数指定沿F对应维的值的坐标。此时,向量的长度必须与对应维的大小相匹配。

[...] = gradient (F,h):这里的h为标量,它作为各个方向的点间隔值。

[…] = gradient (F,h1,h2):用N个间隔参数指定F每个维的间隔。

Inline ImageInline Image图6-1 梯度函数矢量图图6-1 梯度函数矢量图 […] = gradient (F,h1,h2):用N个间隔参数指定F每个维的间隔。

【例19】

code.matlab
>> v = -2:0.2:2;
>> [x,y] = meshgrid(v);
>> z = x .* exp(-x.^2 - y.^2);
>> [px,py] = gradient(z,.2,.2);
>> contour(v,v,z), hold on, quiver(v,v,px,py), hold off

结果如图6-1所示。