How to call functions indirectly?
8 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi,
I would like to know how to call functions indirectly. For example: lets supose I have a data vector X, the functions F1.m, F2.m and F3.m (which input is the variable X) and I put these functions names in a list:
X=rand(1,100);
Myfuns={'F1','F2','F3'};
What I do today is something like:
Y(1)=F1(X);
Y(2)=F2(X);
Y(3)=F3(X);
What I would like to do is to call these functions using the variable Myfuns. Something like
for i=1:length(Myfuns)
Y(i)=Myfuns{i}(X);
end
Of course this doesn't work, but is there a way to do something this?
Thank you,
Bernard.
0 Kommentare
Akzeptierte Antwort
Daniel Shub
am 25 Mai 2012
You can do it with only additions to your code
F1 = @(a)length(a);
F2 = @(b)sum(b);
F3 = @(c)min(c);
X=rand(1,100);
Myfuns={'F1','F2','F3'};
for ii = 1:length(Myfuns)
eval(['Myfuns{ii} = @(x)', Myfuns{ii}, '(x)']);
end
for i=1:length(Myfuns)
Y(i)=Myfuns{i}(X);
end
If the functions are contained in files that exist on the path, then you can use str2fcn instead of eval
Myfuns = cellfun(@str2func, Myfuns, 'UniformOutput', false);
The best is to define the function handles directly:
Myfuns={@(x)F1(x),@(x)F2(x),@(x)F3(x)};
4 Kommentare
Daniel Shub
am 25 Mai 2012
Thanks is an upvote and/or an accepted answer. If you read up on function handles, I think it will be obvious what to change.
Weitere Antworten (0)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!