calling the function dynamically - is it possible using eval or evalin

18 views (last 30 days)
function data(k)
k = {sum,multiply,divide};
for l=1:numel(k)
[a,b,c] = data_sum(d,e)
end
end
The function data calls the another function called data_sum. Now i need to change the function name on every loop i.e data_multiply, data_divide. These functions also has the same number of input and output arguments as data_sum.
Is it possible to solve the above problem using eval, evalin or some other way ?
Thanks a lot

Accepted Answer

Stephen23
Stephen23 on 31 Aug 2016
Edited: Stephen23 on 1 Sep 2016
The best solution would be to learn how to use function handles, and then simply create the cell array to have function handles instead of strings:
>> C = {@mtimes,@rdivide,@max};
>> for k = 1:numel(C), C{k}(2,3), end
ans =
6
ans =
0.6667
ans =
3
Generate function handles from strings If the function names really must be generated from strings, then use str2func to generate the function handles first, then call it as above:
>> S = {'mtimes','rdivide','max'};
>> C = cellfun(@str2func,S,'UniformOutput',false);
Avoid eval and evalin and assignin
Learn to avoid using eval and other functions that let beginners write slow buggy code:

More Answers (1)

Thorsten
Thorsten on 31 Aug 2016
If you just have three functions, it's best to use
[a,b,c] = data_sum(d,e)
[a,b,c] = data_multiply(d,e)
[a,b,c] = data_divide(d,e)

Categories

Find more on Code Execution in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!