【问题标题】:2D interpolation in matlabmatlab中的二维插值
【发布时间】:2015-05-27 09:13:58
【问题描述】:

我有一个 360*3 矩阵,第 1 列具有纬度值,第 2 列具有经度值,第 3 列具有重力值。

问题是,当我使用 meshgrid 创建纬度和经度网格时,网格间距不是常数,这会产生问题。

我尝试创建一个新的 360 * 360 等距网格,最小最大与最初提供的纬度和经度相同。现在我需要在新形成的网格中插入重力值。

请帮忙。我正在使用 interp2 但它显示错误。

dt1
x = D(:,1);
y = D(:,2);
g = D(:,3);
xg = linspace(min(x),max(x),360);
yg = linspace(min(x),max(x),360);
[X,Y] = meshgrid(xg,yg);
[xx,yy] = meshgrid(x,y,);
G = interp2(xx,yy,g,X,Y);`

请帮忙

【问题讨论】:

  • 您可能应该提供一些示例数据并显示错误。
  • 不幸的是,interp2 无法满足您的需求,因为它还要求输入数据等间距。 scatteredinterpolant 类是您需要的。

标签: matlab 2d interpolation


【解决方案1】:

关于您的代码的几件事:

  • g 的大小似乎是错误的,即它应该是大小为 x/y 的矩阵。
  • yg = linspace(min(x),max(x),360); --> yg = linspace(min(y),max(y),360);
  • 您的代码中有错字 [xx,yy] = meshgrid(x,y,);,meshgrid 函数中的第二个逗号会产生错误

然后,我尝试了以下,它似乎工作得很好

x=sort(rand(10,1));
y=sort(rand(10,1));
[xx,yy] = meshgrid(x,y);
g=peaks(xx,yy); % the gravity values have to be matrix form
xg=linspace(min(x), max(x), 360);
yg=linspace(min(y), max(y), 360);
[X,Y]=meshgrid(xg,yg);
G=interp2(xx,yy,g,X,Y);
figure
mesh(G)
figure
mesh(g)

提供 D(..) 中的数据以获得更多帮助。

【讨论】:

  • 感谢 g 解决问题的帮助。
  • 没问题,如果你喜欢这个答案,可以点赞
猜你喜欢
  • 1970-01-01
  • 2020-01-29
  • 2015-08-31
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 2019-06-02
  • 2016-06-22
  • 2014-09-06
相关资源
最近更新 更多