加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab中的匿名函数的使用

(2011-07-31 16:55:42)
标签:

杂谈

分类: 学习~~

在Matlab7.0以后的版本中,出现了一种新的函数类型–匿名函数,不但能够完成原来版本中内联函数(inline)的功能,还提供了其他更方便的功能。Matlab首席科学家Moler教授都推荐用匿名函数替代原来的内联函数。我最近学习了一些有关匿名函数的内容,现在总结一下:

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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有