2015-11-03 4 views
1

Возможно ли передать функцию суммы и объявить, как суммировать значения? Столбец или ряд мудрый? Как я вызываю функцию без прохождения:Передача функции суммы matlab и добавление столбца мудрой суммы

y = sum(x,2); 

Я хочу, чтобы вызвать функцию агрегации, как это, но работают в строках:

Output = Aggregate(Input,@sum); 

ответ

1

Зависит немного о том, как Aggregate использует функцию обрабатывать это время прошло, но должно работать

Output = Aggregate(Input,@(x)sum(x,2));

+0

работает для меня, как я р поместите дескриптор функции через структуру ввода. вот что я искал. –

2

Чтобы применить проход Функция ред по второму измерению:

Aggregate = @(x,fun) fun(x,2); 

Как вы видите, это вызывает переданную функцию (fun) на входе (x), с фиксированным дополнительным аргументом 2, чтобы указать размер, по которому функция будет работать , Это будет работать для любой функции, которая, как и sum, принимает измерение как второй аргумент.

Примеры:

>> Aggregate([1 2; 3 4], @sum) 
ans = 
    3 
    7 
>> Aggregate([1 2; 3 4], @prod) 
ans = 
    2 
    12 

Чтобы применить переданную функцию по заданной размерности:

Aggregate = @(x,fun,dim) fun(x,dim); 

Пример:

>> Aggregate([1 2; 3 4], @sum, 2) 
ans = 
    3 
    7 
+0

В совокупной функции я выполняю множество других вычислений, и я хочу передать функцию sum в качестве входного параметра, который я хочу использовать в агрегированной функции. Сама функция Aggregate не должна быть функцией для подведения итогов моих значений. –

+0

Ну, это именно то, что делает мой код, не так ли? См. Мои примеры выше с функциями 'sum' и' prod', переданными как входы –

+0

. Я понимаю ваш код таким образом, что вы определяете функцию 'Aggregate' в рабочей области, а функция' Aggregate' выполняет вычисления со значениями и функцией например 'sum' или' prod'. Но мое намерение - передать входной параметр (в моем случае 'sum' function) другой функции, которая определена в другом скрипте. В части другой функции я хочу использовать входной параметр - функцию 'sum', чтобы выполнить некоторые вычисления. Сама функция агрегации должна не только возвращать сумму или произведение моего массива. Поэтому решение 'output = Aggregate (Input, @ (x) sum (x, 2)' работает для меня. –