不可能进行这样的评估吗?
我使用eval创建一个函数(类验证函数句柄是否已创建) 然后我使用eval来使用这个函数句柄。但它没有评估,因为功能本身。尝试了许多不同的方式来写行。如下。有没有一种简单的方法可以做到这一点?
为什么我这样做:我有大的符号矩阵来替代。为了更快地进行评估,我试图从每个元素中创建函数。有什么建议吗?
(使用Matlab v.7)
%CODE --------------------------------
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;
%RESULT --------------------------------
>> 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')
答案 0 :(得分:1)
我在这一行收到错误
eval(['out(',int2str(a),',',int2str(a),')=feval(fnc,',sym2cell(sym(val),'comma'),')'])
eval的参数解析为
out(1,1)=feval(fnc,0,0)
对feval的调用返回一个1乘5的char数组('x + y'
),它不适合out(1,1)
,只能容纳一个char。您可能希望使用单元格索引,如下所示:
>> out{1,1} = feval(fnc, 0, 0)
out =
'x + y'