分享

使用gradient函数求解近似梯度

 绝地战士 2011-01-26
使用gradient函数求解近似梯度。使用格式如下。
[fx,fy]=gradient(f)命令返回矩阵f的数值梯度,fx相当于df/dx,即在x方向(列)的差分值。
fy相当于df/dy,即在y(列)的方向的差分值。各个方向的间隔设为1,当f是一个向量时,df=grandient(f)命令返回一个一维向量。
[fx,fy]=gradient(f,h)命令使用h作为各个方向的间隔点,这里h为一个数量。
[fx,fy]=gradient(f,hx,hy)命令使用hx和hy为指定间距,其中f为二维函数
而hx和hy可以为向量或者数量,但hx和hy为向量时,它们的维数必须和f的维数相匹配。
[x,y]=meshgrid([-5:0.5:5])
z=1./(x.^2-2*x+4)+1./(y.^3-2*y+4)
g=gradient(z)
subplot(1,2,1),surf(x,y,z)
subplot(1,2,2),surf(x,y,z,g) 



gradient()是求数值梯度函数的命令。[Fx,Fy]=gradient(x),其中Fx为其水平方向上的梯度,Fy为其垂直方向上的梯度,Fx的第一列元素为原矩阵第二列与第一列元素之差,Fx的第二列元素为原矩阵第三列与第一列元素之差除以2,以此类推:Fx(i,j)=(F(i,j+1)-F(i,j-1))/2。最后一列则为最后两列之差。同理,可以得到Fy。我是从其他的矩阵计算中突然想到的。希望以后不再出同样短路情况了。


>> x=[6,9,3,4,0;5,4,1,2,5;6,7,7,8,0;7,8,9,10,0]
x =
     6     9     3     4     0
     5     4     1     2     5
     6     7     7     8     0
     7     8     9    10     0
>> [Fx,Fy]=gradient(x)
Fx =
    3.0000   -1.5000   -2.5000   -1.5000   -4.0000
   -1.0000   -2.0000   -1.0000    2.0000    3.0000
    1.0000    0.5000    0.5000   -3.5000   -8.0000
    1.0000    1.0000    1.0000   -4.5000  -10.0000

Fy =
   -1.0000   -5.0000   -2.0000   -2.0000    5.0000
         0   -1.0000    2.0000    2.0000         0
    1.0000    2.0000    4.0000    4.0000   -2.5000
    1.0000    1.0000    2.0000    2.0000         0


关于MATLAB中的gradient函数2009-11-23 22:17示例:

>> a=[1 4 8 2;5 9 3 5;7 2 6 7;1 8 6 2]

a =

     1     4     8     2
     5     9     3     5
     7     2     6     7
     1     8     6     2

>> [c,d]=gradient(a)

c =

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多