关键词不能为空

当前您在: 主页 > 英语 >

matlab 匿名函数 函数句柄

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-02 07:32
tags:

-

2021年2月2日发(作者:妇女节的英文)


matlab


匿名函数



函数句柄




(2012-05-11 11:35:05)





教育





标签:



分类:



study

< br>与


matlab



一、函数句柄



所谓函数句柄,


个人认为可以将其理解成一个函数的代号,


就像一个人的名字。


这样在调用


时可以调用函数句柄而不用调用该函数。

< br>


语法如下:



变量名


= @


函数名;



@


的作用就是将一个函数的函数句柄赋值给等号左边的变量。


在调用函数时就可以调用该句


柄,可以实现同样的功能。



例:



首先我们写一个求均值的函数:



function y=average(x)


y=mymean(x);


function a=mymean(v)


a=sum(v)/length(v);


定义一个数组


z:


z=[1,2,3,4,5,6,7];


>> average(z)


ans =


4


>>


handle=@average



handle =


@average


>>


ave=@average



ave =


@average


>> ave(z)


ans =


4



二、匿名函数




相当于


C


语言中的函数指针(入口地址),只不过句柄就用一个唯一的常


整数来指出



匿名函数是函数句柄的一种特殊用法,这里所得到的


函数句柄变量不指向特定的函数(即


不指向函数


M

< p>
文件中的函数名),而是指向一个函数表达式(具体表达式)。



语法如下:



变量名

< br>=@(


输入参数列表


)


运算表达 式;



例子:



为了说明问题,我们用简单的两个数相加,



>>


sum=@(x,y)x+y



sum =


@(x,y)x+y


>> sum(2,3)


ans =


5


%%%%%%%%%%%%%%%%%%% < /p>


比如定义


f(x)=x^2


,可以写为< /p>



f=@(x)(x.^2)


其中


@(x)(x.^2)


就是匿名函数,第一个括号里面是自变量,第 二个括号里面是表达式,


@



函数指针



f=@(x)(x.^2)


表示将匿 名函数


@(x)(x.^2)


赋值给


f


,于是


f


就表示该函数。



于是


f(2)=2.^2=4


f(1:3)=[1:3].^2=[1 4 9]


等等




定义匿名函数时也可以调用别的匿名函数,比如



f1=@(x,y)(x.^2+y.^2)


定义了函数


x^2+y^2


f2=@(t)(f1(t,2))


定义了函数


t^2+4


f3=@(x)(f1(x(1),x(2)))


定义了函数


x(1)^2+x(2)^2


使用匿名函数时一定要注意函数本身的参数形式,如



f1(2,3)


表示


2^2+3^2


f2(3)=3


表示


3^2+4


f3([1,2])


表示


1^2+2^2


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


三、内联函数



内联函数和普通的函数 句柄,


准确说跟匿名函数比较类似,


可以通过一个函数表达式近 而得


到该函数。



语法格式如下:



1


变量名


=inline


(表达式);

< br>


2


变量名


=inline( '


函数表达式


', '


变量名


1','


变量名


2', ... ,'


变量名


n')


;(推荐)



例如:



1


>> a='x+y'


a =


x+y


>> f=inline(a)


f =


Inline function:


f(x,y) = x+y


>> f(2,3)


ans =


5


2


>> f=inline('x+y','x','y')


f =


Inline function:


f(x,y) = x+y


>> f(2,3)


ans =


5




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


创建



句柄函数



str2func


函数才支持生成匿名函数句柄



1.



>> syms x


2.



f = diff(sin(x)*exp(sqrt(x)),2)


3.



g =


str2func(['@(x)' vectorize(char(f))])



4.



f1 = quad(g,1,2)


/



< /p>


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%


sqr=@(x)x.^2




可以将它传递到其他函数的参数列表中。


下面的代码将


sqr


匿名函数传递给


matlab

< br>函数


quad


来计算它从


0



1


的积分:




[c-sharp]



view plaincopyprint?



>> quad(sqr,0,1)


ans =


0.3333


/dfd1r/article/ details/6279125




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% < /p>


匿名函数在定义过程中可以调用任何


Matlab


函数(包括用户自定义的函数),也可以使用


当时


Ma tlab


工作区中存在的任何变量。例如,下例中的匿名函数


b _humpsab


在定义时就是


用了


M atlab


工作区中的变量


a



b




>> a = -.3;b=-.9;


>> b_humpsab = @ (x) 1./((x+a).^2+0.01)+1./((x+b).^2+0.04)-6;


>> b_humpsab([-1 0 1])


ans =


-5.1378 5.1765 16.0000

< br>我们看到:


b_humpsab


在定义时引用了前面定义 的变量


a



b


。应当注意,当


a



b


的值变


化时,


匿名函数并不改变,

这是因为函数句柄值捕捉它创建时刻的变量的值,


并不随变量的

变化而变化。



>> a = 0; %changing the value of a does not chang the function.


>> b_humpsab([-1 0 1]) %evaluate again , get the same results


ans =


-5.1378 5.1765 16.0000


我们也可以针对一个内置函数或一个


M


文件函数创建匿名函数句柄。下面函数分别给予


M

文件函数


humps



Matla b


内置函数


cos


创建了两个文件句柄 :



>> c_Mfile = @humps %function handle for M-file function


c_Mfile =


@humps


>> c_Mfile(1) %evaluate humps(1)


ans =


16


>> c_builtin = @cos


c_builtin =


@cos


>> c_builtin(pi)


ans =


-1


由上面可 知,要创建一个内置函数或一个


M


文件函数的句柄也很容易,只 要在等号右边使



@


符号,并在该符号 后紧跟内置函数名或


M


文件函数名即可。



我们还可以利用单元数组同时创建多个内置函数和


M


文件函数的句柄,验证这些函数时,


只要引用该函数所在单元即可。< /p>


例如,


下面的代码将上面两个独立创建的句柄利用一个单元


数组


c_dan


创建在一起:



>> c_dan = {@humps @cos}


c_dan =


@humps @cos


>>c_dan{1}(1) %evaluate humps(1)


ans =


16


>> c_dan{2}(pi) %evaluate cos(pi)


ans =


-1


Matlab


还专门提供了一些函数来处理和应用句柄。例如,函数

< p>
functions


将返回一个句柄的


详细信息, 如下例所示:



>> functions(c_Mfile)


ans =


function: 'humps'


type: 'simple'


file: 'C:Program FilesMATLABR2009atoolboxmatlabdemoshumps.m'


>> functions(c_builtin)


ans =


function: 'cos'


type: 'simple'


file: ''


>> functions(b_humps)


ans =


function: '@(x)1./((x+a).^2+0.01)+1./((x+b).^2+0.04)-6'


type: 'anonymous'


file: ''


workspace: {[1x1 struct]}


需要注意的是:


fuctions


函数 通常只在调试程序时使用,因为它的返回值很容易发生变化。




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%


句柄函数



所谓句柄函数


,


个人理解其实和别名差不太多


,


比较 类似于


linux



alias


命令


,


即可以对某


个函数以别名来调用


,


而同时并不改变原来的命令名


.


这样 当我们想使用某个函数的时候


只要直接调用函数句柄而不用调用整个函数


.



这里我们的函数句柄也是存放在变量的里面


,


我们知道在


matlab


环境中变量可以用来存放


很多东西


,


包括数值


,


字符串等等


,


在这里不妨可以理解为存放函数


.


不 过显然我们以前所


调用的各个函数都是一个一个的


m

< p>
文件


,


不可能直接放到变量的里面


,


因此我 们是抓住函数


的句柄


(handle)


来实现


.


将句柄函数赋值给变量需要用到

@


符号


,



, @


原来在


matlab


里面也


是有的


....


语法


:


变量名


=@


函数名


.


此处的函数名可以使 当前


matlab


中可以使用的任意函数


. @


的作用


就是将一个函数的函数句柄赋值给等号左边的变 量


.


在需要调用函数的时候直接调用句柄即

-


-


-


-


-


-


-


-



本文更新与2021-02-02 07:32,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/598028.html

matlab 匿名函数 函数句柄的相关文章