【问题标题】:Interpolate gridded climate data in MATLAB在 MATLAB 中插值网格化气候数据
【发布时间】:2015-10-02 19:16:11
【问题描述】:

我有一些气候数据集,一个具有 0.05 度的空间分辨率,另一个具有 0.75 度的空间分辨率。我想对第二个数据集进行插值,使其与第一个数据位于同一网格空间,即 0.05 度。

所以,我的数据集有以下维度:

>> size(data1)

ans =

    10     8    12

>> size(data2)

ans =

    66    74    12

其中第一个维度是指经度,第二个维度是指纬度,第三个维度是指该网格(由经度和纬度值定义的网格)处的温度。

鉴于这些具有相同数量的温度(即 12),是否可以在 MATLAB 中对数据进行插值以使 data1 的维度为

>> size(new_data2)

ans =

    66    74    12

这在matlab中可能吗?

我这样做的原因是我试图与两个数据集进行比较,这两个数据集是在不同大小的网格上生成的,因此我首先需要将它们转换为同一个网格。

感谢任何建议。

例子:

b = rand(5,7,12);
lon = 30:0.75:33;
lat = 50:0.75:55;

lon_needed = 30:0.05:33;
lat_needed = 50:0.05:52;

我希望 b 被线性积分以具有等于

的维度
(length(lon_needed),length(lat_needed),12)

我试过了:

Vq = interpn(lon,lat,1:12,b,lon_needed,lat_needed,'linear',-1);

但这会返回错误。我仍在尝试一些事情以使其发挥作用,但是朝着正确的方向前进会很棒。

【问题讨论】:

  • 你看过Interpolating Gridded Data的文档吗?
  • 你有没有尝试过? interpn 对于初学者...
  • 这个区域的经纬度有多大?如果区域太大,线性插值可能效果不佳。如果没有,请参阅@Dan 评论
  • 我在我的 OP 中添加了一个示例。

标签: matlab


【解决方案1】:

1) 您为原始网格定义了三个变量(lon、lat 和 1:12),但您没有为目标网格指定第三个变量(您只有 lon_needed 和 lat_needed),所以您最好这样做:

Vq = interpn(lon',lat',(1:12)',b,lon_needed',lat_needed',(1:12)','linear',-1);

2) 你的纬度和经度范围会很宽吗?这可能会影响线性插值的精度(地球是一个球体)。

【讨论】:

  • 使用我在 OP 中显示的确切示例,我收到错误 Error using griddedInterpolant/subsref The input data has not compatible size。 interpn 中的错误(第 178 行)Vq = F(Xq{:});
  • 不,这里的数据范围不会太宽,但很高兴知道以备将来参考
  • 输入变量需要转置,然后才能工作
猜你喜欢
  • 1970-01-01
  • 2017-01-18
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 2020-08-16
  • 2018-08-09
相关资源
最近更新 更多