首页 > 编程笔记 > MATLAB笔记 阅读:19

MATLAB gradient()函数的用法(附带实例)

MATLAB 有专门求解梯度的函数 gradient(),可对实数矩阵求梯度。

gradient() 函数的调用格式及说明如下表所示:

表:gradient() 函数调用格式及说明
调用格式 说明
FX=gradient (F) 计算对水平方向的梯度
[FX,FY]=gradient (F) 计算矩阵 F 的三维数值梯度的 x 和 y 分量,其中 Fx 为 x 方向梯度,Fy 为 y 方向梯度。点之间的间距默认为 1
[FX,FY,FZ,…,FN] = gradient(F) 计算 F 的数值梯度的 N 个分量,F 是一个 N 维数组
[···]=gradient (F,h) 使用 h 作为每个方向上的点之间的均匀间距,可以指定上述语法中的任何输出参数
[···]=gradient (F,hx,hy,hz,…,hN) 为 F 的每个维度的间距指定 N 个间距参数

【实例 1】计算 xe^(-x^2-y^2) 的方向导数,绘制等值线和向量图。MATLAB 程序如下:
>> close all                     % 关闭当前已打开的文件
>> clear                         % 清除工作区的变量
>> x = -2:0.2:2;                 % 定义介于-2~2、间隔值为0.2的线性分隔值组成的向量x
>> y = x';                       % 将向量x转置并赋值给y
>> z = x .* exp(-x.^2 - y.^2);   % 定义表达式z
% 计算z的数值梯度,各个方向的间隔为1,并返回水平方向和垂直方向的梯度
>> [px,py] = gradient(z);
>> figure                        % 创建一个图窗
>> contour(x,y,z)                % 通过指定z中各值的x和y坐标,创建一个包含z的等值线的等值线图
>> hold on                       % 保留当前坐标区中的绘图
>> quiver(x,y,px,py)             % 在x和y中每个对应元素对组所指定的坐标处绘制向量px和py的箭头图
>> hold off                      % 关闭图窗保持命令
运行结果为:


图 1 等高线和箭头图

【实例 2】计算 z=xe^x+sin(y^2−x^2+5)的数值梯度,并绘制等值线和向量图。MATLAB 程序如下:
>> close all                % 关闭当前已打开的文件
>> clear                    % 清除工作区的变量
>> v = -10:0.5:10;          % 定义介于-10~10,间隔值为0.5的线性分隔值组成的向量v
>> [x,y] = meshgrid(v);     % 基于向量 v中包含的坐标返回二维网格坐标
>> z = x .*exp(x)+sin(y.^2-x.^2+5);                      % 定义表达式z
% 指定水平方向和垂直方向的求导间距均为0.2,计算z各个位置的梯度值
>> [px,py] = gradient(z,0.2,0.2);
>> contour(v,v,z), hold on, quiver(v,v,px,py), hold off  % 绘制等值线和向量图
最终绘制的等值线和向量图如下图所示:


图 2 数值梯度表

相关文章