我正在尝试使用函数句柄在 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
有人可以解释我哪里出错了吗?
我正在尝试使用函数句柄在 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
有人可以解释我哪里出错了吗?
我不知道你在这里期望什么。问题的原因很清楚。
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如何处理它们而不是语法。