1

我在任何地方都找不到这种语法

y = @(beta, x)x*beta;

x可以说一些向量或矩阵在哪里。用于引用另一个函数,以便您@可以在同一个文件中拥有多个外部可见函数.m?抱歉,我是 matlab 新手,但在文档中找不到

4

2 回答 2

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 的更多信息。它们或多或少与 Python 中的 lambda 表达式相同。

于 2013-08-07T21:02:48.960 回答
0

将其@视为匿名函数,这意味着一个未命名的函数(从技术上讲,在 MATLAB 中,您必须给它一个名称,因为您不能这样做,例如(@(x, y) x + y)(1, 2),该名称是您将匿名函数分配给的任何变量)。

语法@(x, y) x + y如下:创建一个带参数的匿名@函数,x并在下一个右括号之后返回表达式y的评估结果。在这种情况下,这是添加和。xy

我认识的几乎没有人定期使用 MATLAB 而是使用repmat地狱代替的一件事是bsxfun(它代表二进制单例扩展)。

使用表达式bsxfun(@plus, randn(1000, 20), randn(1000, 1)),您基本上repmat在右手边 20 次以形成一个新矩阵,然后您将其传递给@plus函数句柄。您可以通过这种方式传递任何函数。看看cellfunarrayfun。它们非常有用。

于 2013-08-08T01:44:02.693 回答