如何通过函数句柄构建数组

时间:2014-03-02 16:28:16

标签: arrays matlab function-handle

我试图在MATLAB中使用函数句柄

生成类似的东西
f=@(x,y)(x(1)*x(2)+y);

c=[2 3 4;5 9 2];

h=[5 1 2];

f(c,h)

答案应该是:

15    11    12

但是当我在下面编写这段代码时,它只是构建一个数字而不是数组。

f=@(x)(x(1)*x(2))

f(c)

答案:

10

有人能解释我哪里出错吗?

1 个答案:

答案 0 :(得分:0)

我不知道你在这里的期望。问题的原因很清楚。

a = 1;
b = 2;
c = [3 4];
d = a*b+c;

scalar + vector操作,始终返回

ans = [a*b+c(1), a*b+c(2)];

然而scalar*scalar这是第二种情况总是返回一个标量。你要做的是将x(或c)的第一个矩阵元素与第二个元素相乘。也就是说元素c(1,1)*c(2,1),因为matlab按列工作。如果你看着自己的价值观,你可能会注意到答案也是错误的,如果你想做的就是我认为的那样。你可以试试这个,

f=@(x,y)(x(1,:).*x(2,:)+y);
c=[2 3 4;5 9 2];
h=[5 1 2];
f(c,h)

将x的第一行上的元素与第二行上的相同列相乘,然后相加y。匿名函数接受许多输入并执行定义的操作,与普通函数或普通代码相同。您可以将它们视为不需要调用另一个m文件的函数。主要区别(除了普通函数提供更多自由),它们是如何通过matlab处理而不是语法处理。