2016-08-26 12 views
0

私は次の形式のデータを持っています。Matlab:スカラーフィールドの勾配

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

ここで、densityはスカラーです。このデータセットでグラデーションを実行する方法は?私はMatlabのgradient演算子を試しました。ただし、スカラーのみを返します。

注:xyの両方は、単位スペーシングで均一な間隔になっています。境界点は、クリップされたデータであるため、浮動小数点数として終了します。

+0

データは均一な間隔で配置されていますか? – Suever

+0

はい。それは均一に間隔を置いています。 'x'と' y'の間隔は共に1です。 –

+0

XとYは '1'でも始まりますか? – Suever

答えて

2

データポイントを2次元マトリックスに再構成できるように、データの行を並べ替えることができます。 のグラデーションは、です。

% 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

1つの問題。境界点がいくつかあることに気が付いています。境界点は、飛行機がクリップされるときに浮かびます。それらを含めることは可能ですか?さもなければ、私はそれらのポイントを除外し、あなたの解決策を試すためのスクリプトを作成します。 –

+0

@SathishKrishnanこれは浮動小数点をうまく処理する必要があります。あなたは彼らが*境界に等間隔ではないと言っていますか? – Suever

+0

はい。境界点は等間隔ではありません。 –