如何找到三维表面的平均斜率? MatLab的

时间:2012-05-06 20:12:30

标签: matlab for-loop gradient geometry-surface

`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

`

enter image description here

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

似乎MatLab应该有这种东西的内置函数,但我可以找到一个。我也尝试过我写的代码,但这不准确。 最好, 阿比德

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

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

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