1,匿名函数的基本用法。
handle
=
@(arglist)anonymous_function
其中handle为调用匿名函数时使用的名字。arglist为匿名函数的输入参数,可以是一个,也可以是多个,用逗号分隔。anonymous_function为匿名函数的表达式。举个例子如下:
>>
f=@(x,y)x^2+y^2;
>>
f(1,2)
ans
=
5
当然输入的是数组也是可以的:
>>
f=@(x,y)x.^2+y.^2;
%注意需要点(.)运算
>>
a=1:1:10;
>>
b=10:-1:1;
>>
f(a,b)
ans
=
101
85
73
65
61
61
65
73
85
101
匿名函数的表达式中也可以有参数的传递,比如:
>>
a=1:5;
>>
b=5:-1:1;
>>
c=0.1:0.1:0.5;
>>
f=@(x,y)x.^2+y.^2+c;
>>
f(a,b)
ans
=
26.1000
20.2000
18.3000
20.4000
26.5000
c作为表达式中的参数,进行了数据传递。上面都是单重匿名函数,也可以构造多重匿名函数,如:
>>
f=@(x,y)@(a)
x^2+y^+a;
>>
f1=f(2,3)
f1
=
@(a)x^2+y^+a
>>
f2=f1(4)
f2
=
85
每个@后的参数从它后面开始起作用,一直到表达式的最后。
2.使用匿名函数实现符号函数的赋值运算
在老版本的Matlab中,这个功能是由inline函数完成的,现在用匿名函数完成此功能。比如:知道z=2x^3+4x+5,求z在x=3处的2阶导数值。可以先用符号函数算出z的2阶导数的表达式,然后通过匿名函数,把x赋予3的值,得到最后结果:
>>
syms
x;
%定义符号变量
>>
z=2*x^3+4*x+5;
%定义表达式
>>
z1=diff(z,2)
%求z的2阶导数的表达式
z1
=
12*x
>>
z2=eval_r(['@(x)'
vectorize(z1)]);
%vectorize函数的功能是使内联函
%数适合数组运算的法则
>>
z2(3)
ans
=
36