How to fill a cell with function handles using iteration numbers?

I am trying to create N functions that are all extremely similar, except they use different constants from an N sized array.
I have a cell G = {}, but I'm not sure how to create a for loop that would set G{1} = @(x) c(1)*x (this is an example, not the actual function), where c is an array containing the constants cooresponding to each function.
I tried placing G{k} = @(x) c(k)*x and iterating k from 1 to N, but that creates functions that contain k, and not the actual iteration number 1, 2,...N.

1 Comment

you should check out cellfun, it can run functions on cells using cells as inputs.

Sign in to comment.

 Accepted Answer

c = (1:10).^2;
G = cell(size(c));
for whichElement = 1:numel(c)
G{whichElement} = @(x) c(whichElement)*x;
end
Yes, when you display each element of G the expression that gets displayed will include whichElement. But the anonymous function remembers the value whichElement (and c for that matter) had when it was defined and will use those values when the anonymous function is evaluated.
G{7}(5) % 49*5 = 245

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Tags

Asked:

ejk
on 5 Aug 2020

Commented:

ejk
on 5 Aug 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!