2016-10-16 4 views
0

Ich habe eine SchleifeHinzufügen von anonymen Funktionen Matlab

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

Ist es posible all diese Funktionen in einer einzigen anonymen Funktion zu addieren ??

Danke.

+0

Ich bin nicht sicher, dass die Funktion überhaupt Sinn macht, können Sie versuchen zu erklären, was Sie summieren möchten? Die ersten 'n' Elemente von' vec' sollten um 'x' erhöht werden? Oder wollen Sie 'n' getrennte Funktionen, die jeweils' vec (i) 'um' x' erhöhen. – mpaskov

+0

so an jeder Schleife der Funktion x + 1, x + 4, x + 3, x + 56, Was würde Ich mag eine Funktion ist, die (x + 1) + (x + 4) + (x + 3) + (x + 56) + ... – user3532764

+0

Sie wollen also 'n' verschiedene Funktionen, die jeweils eine andere Zahl (vordefiniert aus' vec') zu 'x' hinzufügen. Und nachdem Sie Ihre 'n' Funktion haben, möchten Sie gleichzeitig etwas mit ihnen machen. – mpaskov

Antwort

0

Das Beste, was ich vorschlagen kann, ist inkrementell Ihre Funktionen wie folgt hinzu:

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 

Wenn Sie jede Funktion separat und Summe anschließend speichern müssen, können Sie eine cell array Funktionsgriffe erstellen und cellfun verwenden, um zu bewerten alle von ihnen für einen bestimmten Wert von 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 

eine weitere Möglichkeit dies mit Symbolic Math zu tun wäre, obwohl dies sehr ineffizient sein kann je nach ac tual Funktionen:

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 

Es ist unmöglich zu wissen, was Ihre eigentliche Problem ist, und wenn überhaupt diese ohne eine detailliertere Frage für Sie arbeiten, so müssen Sie können sie für Ihre Anwendung erheblich verändern.

Verwandte Themen