How to dynamically execute code stored in a string variable

10 views (last 30 days)
I do a small toolbox to ease ODE simulation. The script until now works well like this:
(example)
ev1 = @(T,Y)ev1(T,Y,a);
options = odeset('Events',ev1,... ...);
But given that the script should read plenty of event functions and make a list for a pop-up so the user could select them easy, I want it to check in a certain folder for all the files that are functions. The user will simply create the files like this:
% eventFile @(T,Y)ev1(T,Y,...other parameters...);
function [value,isterminal,direction+ = .... ....
... ...
end
the program would read the first line of all the files and if it finds eventFile keyword will save the @(T,Y.....; in a string. Can this string be converted or be used to construct an object like this: ev1 = @(T,Y)ev1(T,Y,a); so I can put it in the odeset 'Event' parameter, just like ev1 in the first example?
If you think this could be done in a different way and I should completely change my plans please tell me.
I tried to make this short and clear, but if I wasn't clear enough, tell me and I will try to explain my problem better.
Later edit: the previous title was "How can I convert a strings like "@(T,Y)event(T,Y,a)" in a function object just like ev = @(T,Y)event(T,Y,a);"

Accepted Answer

per isakson
per isakson on 1 Nov 2014
Edited: per isakson on 1 Nov 2014
"an object like this ev1 = @(T,Y)ev1(T,Y,a); " &nbsp that is an Anonymous Functions
Try
>> ev1 = @(t,y) fprintf('ev1: %d, %d\n', t, y )
>> str = '@(T,Y) ev1(T,Y)';
>> foo = eval( str );
>> foo(1,2)
returns
ev1: 1, 2
  2 Comments
mihai
mihai on 1 Nov 2014
Edited: mihai on 1 Nov 2014
Thank you! This eval function is amazing... I didn't expected it to exist.
Now, I know the question I made is not so general.. should I edit it? Any advice for a better title?
per isakson
per isakson on 1 Nov 2014
Edited: per isakson on 1 Nov 2014
I think this is a justifiable use of &nbsp eval. &nbsp However, it should be the used only as a last resort.
Maybe, "How to dynamically execute code stored in a string variable" would be a better title.

Sign in to comment.

More Answers (0)

Categories

Find more on Simulink Environment Customization 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!