1
`2.4   2.34  2.21   1.90    1.4   0.83  0
 2.34  2.42  2.16   1.79    1.3   0.7   0
 2.21  2.16  1.99   1.64    1.16  0.51  0
 1.90  1.79  1.64   1.30    0.75   0    0
 1.4   1.34  1.16   0.75    0      0    0
 0.83  0.75  0.51   0       0      0    0
 0     0     0      0       0      0    0

`

在此处输入图像描述

这就是我的矩阵在某个时间点的样子,我想计算表面的平均斜率或梯度(陡度指标)。

似乎 MatLab 应该有一个内置函数来处理这类事情,但我可以找到一个。我也尝试过我编写的代码,但它不准确。最好的,阿比德

4

2 回答 2

2

渐变是矢量的,因此您可以分别处理两个维度。计算梯度包括计算函数每个参数的一阶导数。在离散域中,这可以通过采用有限差分来完成:http ://en.wikipedia.org/wiki/Finite_difference

如果你想要它精确并计算每个点的梯度,你不能只取前向或后向差异,因为在边缘,你并不总是有一个前向(或后向)点。

但我认为,如果您只想要梯度的平均值,则不必担心边缘,您可以使用diff计算原始点之间中心点的有限差:

dx = diff(data,1,1);
dy = diff(data,1,2);

mean_gradient = [mean(dx(:)) mean(dy(:))]

假设 cours 参数的间距相等,否则您必须将 dx 和 dy 除以步长。

对于您提供的数据,这将导致:

mean_gradient =

   -0.26381  -0.26381

它与您制作的图相匹配,表明该函数在参数中是单调递减且对称的。

于 2012-05-06T23:24:37.607 回答
0

一种方法是执行多元线性回归,例如使用regress

二维回归是一个最佳拟合平面,您可以从中计算斜率值。该链接有一个很好的示例,其中包含代码和结果图。

于 2012-05-06T20:29:29.423 回答