Matlab Используйте функцию со структурным параметром для интерполяции - PullRequest
0 голосов
/ 18 апреля 2019

В MATLAB я хочу интерполировать набор данных, используя функцию с параметром input в качестве структуры.Тем не менее, я получаю сообщение об ошибке.

У меня есть структура:

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 Ответ

1 голос
/ 19 апреля 2019

Вы можете использовать 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 требует дескриптора функции, которую она вызывает в каждом из полей входной структуры. Мы создаем анонимную функцию для передачи ей, где мы заполняем другие параметры. sampleLength в OP вычисляется внутри этой анонимной функции, если все элементы в структуре имеют разные размеры. Наконец, мы устанавливаем 'UniformOutput' в false, чтобы сказать structfun, что нужно возвращать структуру того же размера, а не обычный массив с одним значением на поле ввода.

...