Matlab:在eval中使用函数句柄不能替代?

时间:2015-03-04 21:55:18

标签: matlab eval function-handle

不可能进行这样的评估吗?

我使用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')

1 个答案:

答案 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'