【问题标题】:Matlab: gradient of a scalar fieldMatlab:标量场的梯度
【发布时间】:2017-01-03 06:06:50
【问题描述】:

我有以下格式的数据。

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

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

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

【问题讨论】:

  • 您的数据是否均匀分布?
  • 是的。它是均匀间隔的。 xy 的间距都是 1。
  • X 和 Y 是否也从 1 开始?
  • @SathishKrishnan 你到底试过什么? gradient 是正确的方法,但您需要查看输出参数:您需要两个来获得向量输出。
  • @Suever:没有。注意:边界点以浮点数结尾,因为它是裁剪数据。

标签: matlab vector gradient scalar


【解决方案1】:

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

% 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);

【讨论】:

  • 一个问题。我注意到有一些边界点,它们是floats,因为飞机被剪裁了。是否可以包括它们?否则,我将编写脚本以排除这些点并尝试您的解决方案。
  • @SathishKrishnan 这应该可以很好地处理浮点数。你是说它们在边界处间隔相等吗?
  • @SathishKrishnan 是的,所以这可能是你最好的选择,因为边界处的渐变无论如何都会被定义得很差。
  • 此外,我收到关于 reshape 操作的错误。 Error using reshape To RESHAPE the number of elements must not change
  • @SathishKrishnan 你确定你有等间距的数据吗?尝试使用plot(data(:,1), data(:,2), 'o') 绘制 x 和 y 点以确保。该错误意味着您没有完整的 x 和 y 点网格。
猜你喜欢
  • 1970-01-01
  • 2012-05-12
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
相关资源
最近更新 更多