MATLAB: функции суммирования - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь автоматически создать дескриптор функции, который является суммой дескрипторов функций.Когда я попытался сделать это вручную, это сработало:

f1 = @(x) x(1);  
f2 = @(x) x(2);   
f3 = @(x) x(3);  
f = @(x) f1(x)+f2(x)+f3(x);  

Но когда я попытался сделать это автоматически (используя цикл for):

aux = {f1,f2,f3};  
f = @(x) 0;
for i=1:3    
   f = @(x) f(x) + cell2mat(aux(i));
end

я получаю следующую ошибку:

Неопределенный оператор '+' для входных аргументов типа 'function_handle'.

Моя цель - использовать этот дескриптор функции с функцией fmincon.

Так что альтернативное решение также поможет.

1 Ответ

0 голосов
/ 21 мая 2018

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

Обходным путем будет использование cellfun для оценки ваших функций, а затем сложение результатов вместе:

f = @(x)sum(cellfun(@(c)feval(c,x),aux));

Выше предполагается, что все ваши функции возвращают скалярное число.Если это не так в вашем реальном приложении, вам нужно соответствующим образом изменить использование cellfun.

...