1. matlab如何对一个矩阵 求导而且不降维
gradient
计算数值梯度。
函数F(x,y,。)在(x0,y0,。)的梯度就是函数在该点的导数,通常在数学上记作▽F(x0,y0,。)或gradF(x0,y0,。)。
梯度是一个向量, 它的方向是函数在一点变化率最快的方向,而它的模就是函数沿这个方向的变化率。
在MATLAB中利用gradient计算梯度,将得到若干向量,它们指出了F的值增大的方向。
语法格式:
FX = gradient(F)
其中F是一个向量。该格式返回F的一维数值梯度。FX即∂F/∂x,即沿着x轴(水平轴)方向的导数。
[FX,FY] = gradient(F)
其中F是一个矩阵。该调用返回二维数值梯度的x、y部分。FX对应∂F/∂x, FY对应于∂F/∂y。
[FX,FY,FZ,。] = gradient(F)
这里,F是一个含有N个自变量的多元函数。
[。] = gradient(F,h)
这里的h指定了沿着梯度的方向取点的间隔。
[。] = gradient(F,h1,h2,。)
以x,y方向分别为间隔0.2求取矩阵Z的数值梯度,dZ/dx和dZ/dy分别返回到DX,DY中。
2. Matlab 二维数组Z字形降维操作
假设 data 是8*8数据矩阵
order = [
0 1 5 6 14 15 27 28
2 4 7 13 16 26 29 42
3 8 12 17 25 30 41 43
9 11 18 24 31 40 44 53
10 19 23 32 39 45 52 54
20 22 33 38 46 51 55 60
21 34 37 47 50 56 59 61
35 36 48 49 57 58 62 63
]
当然也可以把 order就建成一个向量, 这样下面就不用reshape它了
result = sortrows( [reshape(data, [], 1) reshape(order, [], 1)], 2);
结果取 result(:, 1) 是个列向量