2016-08-26 23 views
0

我有以下格式的数据。Matlab:标量字段的梯度

x y density 
. . . 
. . . 
. . . 

这里,density是标量。如何对这个数据集执行渐变?我在Matlab中尝试了gradient运算符。但是,它只返回一个标量。

注:xy均匀间隔单位间距。边界点以浮点数结束,因为它是剪切数据。

+0

您的数据是否均匀分布? – Suever

+0

是的。它是均匀间隔的。 X和Y的间距都是1. –

+0

X和Y是否也以'1开头? – Suever

回答

2

您可以对数据行进行排序,以便数据点可以重新整形为2D矩阵。然后可以计算的梯度

% Sort so that we get the density into column-major ordering 
[~, inds] = sortrows(data(:,[1 2])); 

% Reshape the density data so it's [numel(Y) x numel(X)] 
density = reshape(data(inds,3), numel(unique(data(:,2))), numel(unique(data(:,1)))); 

% Compute the X and Y gradients 
[FX, FY] = gradient(density); 
+0

有一个问题。我注意到有一些边界点,因为飞机被剪断,所以是“浮动”。它可能包含它们吗?否则,我会制作脚本来排除这些点并尝试您的解决方案。 –

+0

@SathishKrishnan这应该处理浮动就好了。你是说他们*不是在边界等距吗? – Suever

+0

是的。边界点不等距。 –