单元阵列和功能句柄

时间:2013-09-04 11:38:15

标签: matlab anonymous-function function-handle

请看以下代码:

for i=1:2
if i == 1
    F{i}= @(x) x(i)+x(i+1);
else
    F{i}= @(x) x(i-1)-x(i)+2;
end
end

我想在F中存储像F={@(x) x(1)+x(2);@(x) x(1)-x(2)+2;}这样的东西。我应该如何编辑我的代码来实现这一目标?任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:4)

我认为这是显示问题,而不是功能问题。

这样做:

for i = 1:2
    if i == 1
        F{i}= @(x) x(i)+x(i+1);
    else
        F{i}= @(x) x(i-1)-x(i)+2;
    end
end

实际上给出了正确的结果:

>> F{1}([1 2 3 4])
ans =
     3    % == x(1)+x(2), i==1

>> F{2}([1 2 3 4])
ans =
     1    % == x(1)-x(2)+2, i==2

但功能显示“不正确”:

>> F
F = 
    @(x)x(i)+x(i+1)    @(x)x(i-1)-x(i)+2

如果您希望它们正确显示,您将不得不变得混乱:

for i=1:2

    if i == 1        
        F{i} = str2func(['@(x)x(' num2str(i) ')+x(' num2str(i+1) ')']);
    else        
        F{i} = str2func(['@(x)x(' num2str(i-1) ')-x(' num2str(i) ')+2']);
    end
end

结果:

>> F
F = 
    @(x)x(1)+x(2)    @(x)x(1)-x(2)+2