Matlab使用带有结构参数的函数进行插值

时间:2019-04-18 19:37:27

标签: matlab structure interpolation

在MATLAB中,我想使用以参数输入为结构的函数对一组数据进行插值。但是,我收到一个错误。

我有一个结构:

fruit.apples = [3 4 2 3 4]
fruit.oranges = [1 0 0 0 0]
fruit.grapes = [2 3 2 2 1] 

所以我想将此水果结构插入到samples = 20;`

这是我的代码:

function [output] = fruitbasket (fruit, samples)
sampleLength = linspace(1, numel(data), samples + numel(data));
sampleLength = sampleLength';
output = interp1(data, sampleLength);

我的愿望输出是在水果篮结构中用25个苹果,25个橙子和25个葡萄对每个数组进行插值。如果将结构替换为变量,代码可以工作,但是我需要使用结构,以便可以将多个输入传递给函数。

1 个答案:

答案 0 :(得分:1)

您可以使用structfun将一个函数应用于struct数组的每个元素。在这种情况下,它将如下所示:

fruit.apples = [3 4 2 3 4];
fruit.oranges = [1 0 0 0 0];
fruit.grapes = [2 3 2 2 1];
samples = 20;

interp_data = @(d)interp1(d, linspace(1, numel(d), samples + numel(d)));
output = structfun(interp_data, fruit, 'UniformOutput',false);

structfun需要一个在输入结构的每个字段上调用的函数的句柄。我们创建一个匿名函数传递给它,然后在其中填充其他参数。如果结构中的元素都是不同大小,则OP中的sampleLength是在此匿名函数中计算的。最后,我们将'UniformOutput'设置为false,以告知structfun返回相同大小的结构,而不是返回每个输入字段一个值的普通数组。