使用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 =