How to call functions indirectly?
9 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Daniel Shub
2012-5-25
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 个评论
Daniel Shub
2012-5-25
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.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!