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

Using N-D interpolation with a generic rank?

我正在寻找一种以更 "general" 的方式使用 ndgridinterpn 的优雅方式 - 基本上是针对任何给定大小的输入,而不是在单独的案例。

给定一个 N-D 源数据,在每个坐标 Mesh={[x1]; [x2]; ...; [xn]} 的一维向量元胞数组中给出匹配的 N-D 网格,并且以相同方式给出 query/output 坐标(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

我想你正在寻找的是如何从这一行获得多个输出:

OutGrid = ndgrid(QueryMesh{:});

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

OutGrid = cell(size(QueryMesh));

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

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