matlab常量匿名函数只返回一个值而不是数组

时间:2013-10-27 09:39:22

标签: matlab anonymous-function

我一直在网上搜索几个早上但什么都没发现,希望你能帮忙。

我有一个像这样的匿名函数

f = @(x,y) [sin(2*pi*x).*cos(2*pi*y), cos(2*pi*x).*sin(2*pi*y)];

需要在点数组上进行评估,例如

x = 0:0.1:1;
y = 0:0.1:1;
w = f(x',y');

现在,在上面的例子中一切正常,结果w是一个11x2矩阵,每行中有正确的值f(x(i),y(i))。 当我将我的函数更改为具有常量值时会出现问题:

f = @(x,y) [0, 1];

现在,即使像之前一样使用数组输入,我也只得到一个像w = [0,1]的1x2数组; 当然,我希望拥有与以前相同的结构,即11x2矩阵。

我不知道为什么Matlab会这样做......

编辑1 对不起,我认为从原始问题中写的内容非常清楚,但是我看到你们中的一些人在询问,所以这里有一个澄清:我想要的是再次使用一个11x2矩阵,因为我用数组来提供函数有11个元素。 这意味着我希望输出与第一个示例中的输出完全相同,只需更改其中的值:一个包含11行和2列的矩阵,第一列中的值仅为0,而第二列中的值仅为1,因为对于所有x(i)和y(i)答案应该是向量[0,1]。 这意味着我希望:

w = [0 1
     0 1
     0 1
     ...
     0 1]

对我来说似乎很自然......

2 个答案:

答案 0 :(得分:1)

您正在定义一个函数f = @(x,y) [0, 1];,它具有输入参数x,y和输出[0,1]。您还期望发生什么?

更新

这应符合您的描述:

g=@(x,y)[zeros(size(x)),ones(size(y))]
g(x',y')

答案 1 :(得分:0)

将匿名函数f定义为

f = @(x,y) [0,1];

对于任何输入[0,1]x,自然返回y,而与这些向量的长度无关。

这种行为也使我感到困惑,直到我意识到我期望f(a,b)像写过一样遍历ab

for inc = 1:length(a)
    f(a(inc), b(inc))
end

但是,f(a,b)不会在输入的长度上循环,因此无论[0,1]a的长度如何,它仅返回b

可以通过将f定义为

来获得所需的行为。
g=@(x,y)[zeros(size(x)),ones(size(y))]

如丹尼尔在他的answer中所述。

相关问题