matlab 匿名函数是什么?

matlab 匿名函数是什么?,第1张

  匿名函数 出现在 matlab 中。它是matlab中定义的一种函数形式。\x0d\  函数简介:匿名函数不以文件形式驻留在文件夹上;他的生成方式最简捷,可在指令窗或任何函数体内通过指令直接生成。\x0d\  匿名函数的作用:主要实现自己定义matlab中的函数,从而扩大函数的使用功能\x0d\  和内联函数(inline)相比,匿名函数的优越性在于可以直接使用workspace中的变量,不必申明,非常适合嵌入到M文件中。\x0d\  %例10-25 匿名函数举例。\x0d\  %本例列举3个匿名函数的例子,分别有0个、1个和两个输入参数。\x0d\  %首先介绍没有输入参数的匿名函数,只需用空格代替arglist即可。例如,编写求解当前时间的匿名函数如下所示。\x0d\  >> t = @() datestr(now);\x0d\  t() %函数的调用\x0d\  ans =\x0d\  14-Sep-2004 20:22:50\x0d\  %值得注意的是,调用该函数时,括号不能省略,否则, MATLAB 71将对程序不予计算,如下所示。\x0d\  >> t\x0d\  t =\x0d\  @() datestr(now)\x0d\  >>\x0d\  %再介绍有一个输入参数的匿名函数,该函数用于求所输入参数的平方,编制并运行程序如下所示。\x0d\  >> sqr = @(x) x^2\x0d\  sqr =\x0d\  @(x) x^2\x0d\  >> sqr(12)\x0d\  ans =\x0d\  144\x0d\  >>\x0d\  %最后介绍有两个输入参数的匿名函数,用户可以由此推导有多个参数的匿名函数,编制并运行程序如下所示。\x0d\  >> sumAxBy = @(x, y) (14x + 41y)\x0d\  sumAxBy =\x0d\  @(x, y) (14x + 41y)\x0d\  >> sumAxBy(3,7)\x0d\  ans =\x0d\  329\x0d\  >>\x0d\  注意这些定义过程,其中@这个标志符是很重要的。

匿名函数的作用:主要实现自己定义matlab中的函数,从而扩大函数的使用功能

和内联函数(inline)相比,匿名函数的优越性在于可以直接使用workspace中的变量,不必申明,非常适合嵌入到M文件中。

%例10-25 匿名函数举例。

%本例列举3个匿名函数的例子,分别有0个、1个和两个输入参数。

%首先介绍没有输入参数的匿名函数,只需用空格代替arglist即可。例如,编写求解当前时间的匿名函数如下所示。

>> t = @() datestr(now);

t() %函数的调用

ans =

14-Sep-2004 20:22:50

%值得注意的是,调用该函数时,括号不能省略,否则, MATLAB 71将对程序不予计算,如下所示。

>> t

t =

@() datestr(now)

>>

%再介绍有一个输入参数的匿名函数,该函数用于求所输入参数的平方,编制并运行程序如下所示。

>> sqr = @(x) x^2

sqr =

@(x) x^2

>> sqr(12)

ans =

144

>>

%最后介绍有两个输入参数的匿名函数,用户可以由此推导有多个参数的匿名函数,编制并运行程序如下所示。

>> sumAxBy = @(x, y) (14x + 41y)

sumAxBy =

@(x, y) (14x + 41y)

>> sumAxBy(3,7)

ans =

329

>>

注意这些定义过程,其中@这个标志符是很重要的。

匿名函数的表达式中也可以有参数的传递,比如:

>> a=1:5; b=5:-1:1; c=01:01:05;

>> f=@(x,y)x^2+y^2+c;

>> f(a,b)

ans = 261000202000183000204000265000

c作为表达式中的参数,进行了数据传递。

上面都是单重匿名函数,也可以构造多重匿名函数,如:

>> f=@(x,y)@(a) x^2+y^+a;

>> f1=f(2,3)

f1 = @(a)x^2+y^+a %注意这里f1 是关于a的函数了,与f不同。

>> f2=f1(4)

f2 = 85

每个@后的参数从它后面开始起作用,一直到表达式的最后。

matlab中定义函数的方式有以下几种:

1、函数文件+调用函数文件:定义多个M文件。

% 调用函数文件:myfilem

clear

clc

for x=1:10

y=mylfg(x);

end

%自定义函数文件: mylfgm

function y=mylfg(x) %注意:函数名(mylfg)必须与文件名(mylfgm)一致

Y=3x+1;

注:这种方法要求自定义函数必须单独写一个M文件,不能与调用的命令文件写在同一个M文件中。

2、函数文件+子函数:定义一个具有多个子函数的M文件。

%命令文件:funtry2m

function []=funtry2()

for x=1:10

y=lfg2(x);

End

function y=lfg2(x)

Y= 3x+1;

%注:自定义函数文件funtry2m中可以定义多个子函数function。子函数lfg2只能被主函数和主函数中的其他子函数调用。

3、Inline内联函数:无需M文件,直接定义。

%inline命令用来定义一个内联函数:f=inline(‘函数表达式’, ‘变量1’,’变量2’,……)。

调用方式:y=f(数值列表) %注意:代入的数值列表顺序应与inline()定义的变量名顺序一致。

例如:

f=inline(‘3x+1‘,’x’);

z=f(2)

Ans=7

注:这种函数定义方式是将它作为一个内部函数调用。特点是,它是基于Matlab的数值运算内核的,所以它的运算速度较快,程序效率更高。 缺点是该方法只能对数值进行代入,但是不支持符号代入,且对定义后的函数不能进行求导等符号运算。

匿名函数 出现在 matlab 中。它是matlab中定义的一种函数形式。

匿名函数不以文件形式驻留在文件夹上;他的生成方式最简捷,可在指令窗或任何函数体内通过指令直接生成。

匿名函数的作用:主要实现自己定义matlab中的函数,从而扩大函数的使用功能

要搞明白出现这个现象的原因,需要了解inline函数和匿名函数是怎样工作的。

 

使用下面的语句定义inline函数:

Fx=inline(F);

由于F是sym类型,所以调用的实际上是符号数学工具箱的函数sym/inline,该函数将sym对象转换为char,再调用MATLAB基本系统的inline函数。inline函数可以按照楼主的方式调用:

x1=feval(Fx,x1);

也可以直接调:

x1=Fx(x1);

作用是完全相同的。

 

匿名函数的定义语法是:

fhandle = @(arglist) expr

等号的右边包括三部分:

函数句柄的符号(@);

参数表arglist(参数之间用逗号分隔,外面加括号);

函数体expr :是一个合法的MATLAB表达式,用以执行函数所要实现的功能。

等号左边可以指定一个变量,用以保存匿名函数的句柄以便后面使用,不过在很多情况下,匿名函数经常会在定义时直接使用,而不把它保存为一个变量。

 

匿名函数的表达式中可以使用两种数据:

参数表arglist中列出的变量,这些变量在调用的时候才会有具体的数据;

在表达式expr中出现的其它变量。在构造匿名函数的时候,由MATLAB保存当前工作区中这些变量的值,然后在调用匿名函数的时候使用。需要注意,如果在构造匿名函数之后,表达式里的变量值变化甚至被清除,都不会影响到已构造的匿名函数,而从另一个角度说,如果希望这些变量值的变化起作用,需要重新构造匿名函数。另外,如果表达式中存在当前工作区未定义的变量,构造匿名函数的时候并不会报错,调用的时候才会。

 

接下来,我们来看一下楼主定义的匿名函数是怎样工作的:

Fx=@(x) F;

这样构造的一个匿名函数Fx,其函数体是F,MATLAB会把当前工作区的变量F的值保留下来——这是一个sym对象(并非楼主所说的字符型),那么,在调用它的时候,就会把这个值作为匿名函数的执行结果返回,所以就出现了楼主所说的现象。

 

要想让匿名函数执行F对应的函数表达式,应该这样定义:

Fx=@(x) subs(F);

这样,就会用匿名函数的输入参数x代替F表达式中的x,而得到想要的结果。也可以使用以下几种定义方式:

Fx=@(x0) subs(F,x,x0);

Fx=@(x0) subs(F,x0); 

Fx=@(x) subs(F,x);

结果都完全相同。这里需要说明的是,在匿名函数的表达式中,参数表中的变量处于作用域,如果参数表使用x,则在表达式expr中的x不会被视作符号变量,而是匿名函数的输入参数。所以,如果表达式中需要用到x,那么参数表中应使用另一个变量名x0加以区别。

  匿名函数出现在 matlab 中。它是matlab中定义的一种函数形式。

  匿名函数的作用(好处):匿名函数的作用:主要实现自己定义matlab中的函数,从而扩大函数的使用功能。

  函数简介:匿名函数不以文件形式驻留在文件夹上;他的生成方式最简捷,可在指令窗或任何函数体内通过指令直接生成。

  和内联函数(inline)相比,匿名函数的优越性在于可以直接使用workspace中的变量,不必申明,非常适合嵌入到M文件中。

  %例10-25 匿名函数举例。

  %本例列举3个匿名函数的例子,分别有0个、1个和两个输入参数。

  %首先介绍没有输入参数的匿名函数,只需用空格代替arglist即可。例如,编写求解当前时间的匿名函数如下所示。

  >> t = @() datestr(now);

  t() %函数的调用

  ans =

  14-Sep-2004 20:22:50

  %值得注意的是,调用该函数时,括号不能省略,否则, MATLAB 71将对程序不予计算,如下所示。

  >> t

  t =

  @() datestr(now)

  >>

  %再介绍有一个输入参数的匿名函数,该函数用于求所输入参数的平方,编制并运行程序如下所示。

  >> sqr = @(x) x^2

  sqr =

  @(x) x^2

  >> sqr(12)

  ans =

  144

  >>

  %最后介绍有两个输入参数的匿名函数,用户可以由此推导有多个参数的匿名函数,编制并运行程序如下所示。

  >> sumAxBy = @(x, y) (14x + 41y)

  sumAxBy =

  @(x, y) (14x + 41y)

  >> sumAxBy(3,7)

  ans =

  329

  >>

  注意这些定义过程,其中@这个标志符是很重要的。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13496014.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存