使用具有一般等级的N-D插值?

时间:2018-10-13 03:39:20

标签: arrays matlab multidimensional-array interpolation

我正在寻找一种以更“通用”的方式使用ndgridinterpn的优雅方法-基本上是针对任何给定的输入大小,而不是在单独的情况下对待每个等级。 / p>

给出具有匹配的ND网格的ND源数据,该ND网格在1D向量的像元数组中为每个坐标Mesh={[x1]; [x2]; ...; [xn]}和以相同方式给出的查询/输出坐标(QueryMesh)提供,我生成了ndgrid矩阵,并在interpn中使用了它们,而没有为每个维度设置大小写?

此外,如果有更好的方法来定义网格-我非常愿意更改。

如果不清楚,这是我想要得到的非常明显的,概念性的(并且不工作的)示意图

Mesh={linspace(0,1,10); linspace(0,4,20); ... linsapce(0,10,15)};
QueryMesh={linspace(0,1,20); linspace(0,4,40); ... linsapce(0,10,30)};
Data=... (whatever)
NewData=InterpolateGeneric(Mesh,QueryMesh,Data);


function NewData=InterpolateGeneric(Mesh,QueryMesh,Data)
    InGrid=ndgrid(Mesh{:});
    OutGrid=ndgrid(QueryMesh{:});
    NewData=interpn(InGrid{:},Data,OutGrid{:},'linear',0.0)
end

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是如何从此行获取多个输出:

OutGrid = ndgrid(QueryMesh{:});

由于ndgrid产生的输出数组与其接收的输入数组一样多,因此您可以通过以下方式创建一个空单元格数组:

OutGrid = cell(size(QueryMesh));

接下来,证明OutGrid的每个元素作为输出参数:

[OutGrid{:}] = ndgrid(QueryMesh{:});