2016-10-16 3 views
0

У меня есть циклДобавление анонимных функций MATLAB

for i = 1: n 
f = @(x) x + vec(i) 
end 

ли это Возможное сложить все эти функции в одну анонимную функцию ??

Спасибо.

+0

Я не уверен, что функция имеет смысл вообще, можете ли вы попытаться объяснить, что именно вы хотели бы суммировать? Первые 'n' элементы' vec' должны быть увеличены на 'x'? Или вам нужны 'n' отдельные функции, каждая из которых увеличит' vec (i) 'на' x'. – mpaskov

+0

так что в каждом цикле функция х + 1, х + 4, х + 3, х + 56, Я хотел бы это функция, которая представляет собой (х + 1) + (х + 4) + (x + 3) + (x + 56) + ... – user3532764

+0

Итак, вы хотите, чтобы 'n' выполняли разные функции, каждый из которых добавлял другое значение (предварительно заданное с' vec') в 'x'. И после того, как у вас есть функция 'n', вы хотите сделать что-то с ними все одновременно. – mpaskov

ответ

0

Лучшее, что я могу предложить, чтобы постепенно добавлять свои функции, как это:

n = 10; 
vec = rand(1,n); % Random data 
f = @(x)x + vec(1); % Initial function 
for i = 2:n 
    f = @(x)x + vec(i) + f(x); % Add previous sum to next 
end 
x = 2; 
s = f(x) % Evaluate 

Если вам нужно сохранить каждую функцию отдельно и сумма впоследствии, вы можете создать cell array функциональных ручек и использовать cellfun для оценки все из них для определенного значения x:

n = 10; 
vec = rand(1,n); % Random data 
f = cell(1,n); % Pre-allocate cell 
for i = 1:n 
    f{i} = @(x)x + vec(i) % Save a handle to each function in cell array 
end 
x = 2; 
s = sum(cellfun(@(c)c(x),f)) % Evaluate each function at x and sum 

Другим вариантом было бы сделать это с помощью Symbolic Math, хотя это может быть очень неэффективным в зависимости от вашего переменного тока Tual функции:

n = 10; 
vec = rand(1,n); % Random data 
syms x; 
f(x) = x+vec; % Create vector function 
x = 2; 
s = double(sum(f(x))); % Evaluate and convert to floating point 

Это невозможно знать, что ваша текущая проблема, и если они будут работать для вас без более подробного вопроса, так что вы, возможно, потребуется изменить их значительно для вашего конкретного применения.