How to dynamically execute code stored in a string variable
8 ビュー (過去 30 日間)
古いコメントを表示
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);"
0 件のコメント
採用された回答
per isakson
2014 年 11 月 1 日
編集済み: per isakson
2014 年 11 月 1 日
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 件のコメント
per isakson
2014 年 11 月 1 日
編集済み: per isakson
2014 年 11 月 1 日
I think this is a justifiable use of   eval.   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.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Simulink Environment Customization についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!