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

Matlab Use function with structure parameter to interpolate

在 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 个葡萄插入每个数组。如果将结构替换为变量,则代码可以正常工作,但我需要使用结构,以便可以将多个输入传递给函数。

您可以使用 structfun 将函数应用于结构数组的每个元素。在这种情况下,它看起来像这样:

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 到 return 一个相同大小的结构,而不是每个输入字段一个值的普通数组。