【问题标题】:Using Cell Arrays in Interpolants in Matlab在 Matlab 的插值中使用元胞数组
【发布时间】: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


【解决方案1】:

我在另一个论坛上得到了我的问题的答案。显然,只需稍微修正一下 testcell 在末尾的定义方式,就可以解决这个问题:

testcell = {[1;2]; [3; 4]};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2017-05-29
    • 2016-04-13
    • 2013-08-09
    • 2014-10-26
    • 1970-01-01
    相关资源
    最近更新 更多