您的位置:首页 > 编程语言 > MATLAB

MATLAB匿名函数

2017-09-19 22:31 225 查看

匿名函数的基本定义

fhandle=@(arglist)expr


其中,expr是具体的函数表达式,arglist是指定的函数自变量。具体请见下面示例

f=@(x)x.^2;
>> fx=f(1:10)
fx =

1     4     9    16    25    36    49    64    81   100
>> g=@(x,y)x.^2+y.^2;
>> gxy=g(1:10,2:11)

gxy =

5    13    25    41    61    85   113   145   181   221


匿名函数的种类

1. 单变量匿名函数

单变量匿名函数是最简单的匿名函数,只含有一个自变量

f=@(x)x.^2


就是单变量匿名函数,除此以外,含有参数,参数值已知的单个自变量的匿名函数也是单匿名函数,譬如

>> f(1:5)

ans =

30    40    50    60    70


2. 多变量匿名函数

多变量函数匿名含有两个或两个以上的自变量,如

g=@(x,y)x.^2+y.^2;


同单变量匿名函数一样,多变量函数也可以有已知的参数值。譬如

a=1;b=2;
g=@(x,y)a*x+y.^b;
g(1:5,1:5)
ans =

2     6    12    20    30


3. 单重匿名函数

到目前为止,上面列的匿名函数,无论是单变量匿名函数还是多变量匿名函数,都属于单重匿名函数。单重匿名函数的特点是:只有一个“@”符号引导,“@”符号只会就是具体的函数表达数。自变量输入单重匿名函数后,得到的是具体的数值。除了单重匿名函数以外,还有二重、乃至多重匿名函数。这些多重匿名函数在参数传递方面非常方便。

4. 多重匿名函数

下面以二重函数为例来介绍多重匿名函数。

f=@(a,b)@(x)a*x+b;


其中“a,b”是外层变量,“x”是内层变量。可以这样理解这个表达式:每个“@”符号后面的括号的变量的作用域一直到表达式的结尾。这样,“a,b”的作用域就是“@(x)a*x+b”,“x”的作用域就是“a*x+b”。因此,对于给定的“a,b”,“gab=f(a,b)”是一个单层以x为变量的单变量匿名函数。

可以利用functions函数观察建立的匿名函数信息,以下

f=@(a,b)@(x)a*x+b
f =

包含以下值的 function_handle:

@(a,b)@(x)a*x+b
>> f23=f(2,3)

f23 =

包含以下值的 function_handle:

@(x)a*x+b
>> f23info=functions(f23)

f23info =

包含以下字段的 struct:

function: '@(x)a*x+b'
type: 'anonymous'
file: 'D:\工作文件夹\匿名函数\anonymous3.m'
workspace: {[1×1 struct]}
within_file_path: 'anonymous3'
>> f23info.workspace{1}

ans =

包含以下字段的 struct:

a: 2
b: 3


两重以上的匿名函数可以参考二重匿名函数类推,譬如:

>> f=@(a)@(b,c)@(x)x^a+b*c

f =

包含以下值的 function_handle:

@(a)@(b,c)@(x)x^a+b*c


两重以上的匿名函数的各变量的作用域可以参考二重匿名函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: