难道不能做这样的评价吗?
我使用 eval 创建一个函数(类验证创建了一个函数句柄)然后我使用 eval 来使用这个函数句柄。但它不评估,导致函数本身。尝试了许多不同的方式来写行。如下。可能有一个简单的方法来做到这一点?
我为什么要这样做:我有很大的符号矩阵可以替代。为了更快地评估,我试图从每个元素中创建函数。对此有何建议?
(使用 Matlab v.7)
% 代码 - - - - - - - - - - - - - - - -
function [out]=sym2fnc_subs2(M,vars,val)
for a=1:size(M,1) for b=1:size(M,2)
eval(['fnc=@(',sym2cell(vars,'comma'),') ''',sym2cell(M(a,b)),''';']);
class(fnc)
eval(['feval(@(varargin)fnc(varargin{:}),',sym2cell(sym(val),'comma'),')'])
eval(['feval(fnc,',sym2cell(sym(val),'comma'),')'])
eval(['out(',int2str(a),',',int2str(a),')=feval(fnc,',sym2cell(sym(val),'comma'),')'])
out(a,b)=eval(['fnc(',sym2cell(sym(val),'comma'),')'])
end; end;
function [C]=sym2cell(M,varargin)
n = ndims(M);
for a=1:size(M,1); for b=1:size(M,2);
if nargin==2
if strcmp(varargin{1},'space'); s=' '; end;
if strcmp(varargin{1},'comma'); s=','; end;
if b==size(M,2); C(a,b) = {[char(M(a,b))]};
else; C(a,b) = {[char(M(a,b)),s]}; end;
else; C(a,b) = {char(M(a,b))}; end;
end; end;
if isvector(C); C=cell2mat(C); end;
% 结果 - - - - - - - - - - - - - - - -
>> syms x y
>> [out]=sym2fnc_subs(sym('y+x'),[y x],[0 0])
ans =
function_handle
ans =
y+x
ans =
y+x
??? Error using ==> eval (at the last eval which returns a 'char')