将函数传递给arrayfun

时间:2013-08-21 12:02:37

标签: matlab function

如果我将匿名函数传递给arrayfun,如下所示:

arrayfun(@(x)sprintf('%.2g\\pi', x/pi), [0 6 7 8], 'uni', 0)

我得到以下结果:

ans = 
    '0\pi'    '1.9\pi'    '2.2\pi'    '2.5\pi'

但是,如果我声明一个单独的函数:

function y = sprint_func_0(x)
    sprintf('%.2g\\pi', x/pi)
end

并将其传递给arrayfun

arrayfun(@(x)sprint_func_0(x), [0 6 7 8], 'uni', 0)

结果是:

ans =
    0\pi

ans =
    1.9\pi

ans =
    2.2\pi

ans =
    2.5\pi

为什么我在第一种情况下获得一个输出而在第二种情况下获得许多输出?这可能是愚蠢的,但我无法在任何地方找到答案。

1 个答案:

答案 0 :(得分:5)

在第一种情况下,匿名函数返回一个字符串,因此arrayfun返回一个字符串的单元格数组。

在第二种情况下,函数不会为输出参数y赋值(实质上是将sprintf的输出打印到命令窗口)。

如果您将函数sprint_func_0修改为:

function y = sprint_func_0(x)
    y = sprintf('%.2g\\pi', x/pi); %// Note the assignment to y
end

你应该得到相同的结果。