我试图在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
有人能解释我哪里出错吗?
答案 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处理而不是语法处理。