【发布时间】:2018-05-19 17:26:22
【问题描述】:
我有一个 griddedInterpolant F 并且一些输入变量是一个元胞数组形式。例如,这就是我创建插值 F 的方式:
[x,y,z] = ndgrid(-5:1:5);
t = x+y+z;
mycell = {x,y};
F = griddedInterpolant(mycell{:},z,t);
实际上,每次运行代码时,元胞数组 mycell 的大小都会发生变化,这就是我认为必须使用元胞数组作为输入的原因。现在我想用相同的输入结构调用这个函数。当每个输入都有一行时,一切正常,如下例所示:
testcell = {1,3};
F(testcell{:},5)
ans =
9
但是,当我想要向量形式的输入时,插值不起作用,我收到以下错误:
testcell = {1,3; 2, 4};
F(testcell{:,:},[5;1])
使用 griddedInterpolant/subsref 时出错
计算插值时指定的参数无效。
因为我不知道实际单元格数组中的维度(列数),所以我无法将 testcell 分开。在这种情况下,使用插值 F 的正确方法是什么?当然,我可以使用 for 循环,但由于我拥有大量数据,这种方法可能非常耗时。
【问题讨论】:
-
你想在这里做什么?不知道可以创建函数而不是使用元胞数组的维度......
-
我该怎么做?
-
如果我明白你在这里想要做什么,我会试着回答。从“我想插入一个 3D 数据集......”开始......
-
让我更清楚。我不知道有多少变量进入 griddedInterpolant 作为输入来创建插值 F。这对我来说是一个黑盒。我有两个功能,第一个是创建插值,我对此没有任何问题,第二个是调用插值,这是我的问题所在。如果 F 由 3D 数据组成,则后一个函数确实知道它是 3D 数据,但我无法将其明确编码为 F(x1, x2, x3) 因为 I 不知道它是 3D。我只有一个包含 {x1, x2, x3} 的 x 单元格,其中每个单元格本身都是 nx1 向量。所以我想在没有 for 循环的情况下一次为 n 个案例调用 F。
-
我不认为你可以在没有循环的情况下做到这一点,我看不出你甚至不知道你想要提前插值的维度......(在你的例子中你做了使用 x,y,z=ndgrid...)
标签: matlab multidimensional-array cell interpolation cell-array