我无法在任何地方找到这种语法
y = @(beta, x)x*beta;
其中x
是一些向量或矩阵。 @
是否用于引用另一个函数,因此您可以在同一个.m
文件中拥有多个外部可访问函数?对不起,我是matlab的新手,但在文档
答案 0 :(得分:4)
这是在Matlab中定义匿名函数的方法。它与
基本相同function result = y(beta, x)
result = x * beta;
但不需要m文件或子函数来定义它。它们可以在其他m文件中构建,甚至可以在表达式中构建。典型的用法是作为一个复杂函数调用内部的一个抛弃函数,它需要一个函数作为其输入之一,即:
>> arrayfun(@(x) x^2, 1:10)
ans =
1 4 9 16 25 36 49 64 81 100
我个人经常使用它们来重构一系列重复性陈述
a = complex_expression(x, y, z, 1)
b = complex_expression(x, y, z, 3)
c = complex_expression(x, y, z, 8)
到
f = @(n) complex_expression(x, y, z, n)
a = f(1)
b = f(3)
c = f(8)
来自Mathworks的更多info。它们或多或少与Python中的lambda表达式相同。
答案 1 :(得分:0)
将@
视为匿名,这意味着一个未命名的函数(从技术上讲,在MATLAB中,你必须给它起一个名字,因为你不能这样做,{ {1}},该名称是您为匿名函数分配的任何变量。
语法(@(x, y) x + y)(1, 2)
读取:创建一个带参数@(x, y) x + y
和@
的匿名x
函数,并返回表达式在下一个右括号后面。在这种情况下,这是y
和x
的添加。
我知道几乎没有人使用MATLAB定期使用的一件事,而是使用y
hell而不是repmat
(它代表二进制单例扩展)。
使用表达式bsxfun
,您基本上bsxfun(@plus, randn(1000, 20), randn(1000, 1))
右侧20次形成一个新矩阵,然后传递给repmat
函数句柄。你可以通过这种方式传递任何功能。请查看@plus
和cellfun
。它们非常有用。