0

我正在尝试使用函数句柄在 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

有人可以解释我哪里出错了吗?

4

1 回答 1

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如何处理它们而不是语法。

于 2014-03-03T16:04:23.150 回答