个性化阅读
专注于IT技术分析

MATLAB匿名函数

本文概述

匿名函数是简单的(单行)用户定义函数, 无需创建单独的函数文件(M文件)即可进行定义。可以在命令窗口中, 脚本文件中或用户定义的函数中定义匿名函数。

通过键入以下命令来生成匿名函数:

MATLAB匿名函数

其中f是函数句柄。输入列表可以包含一个变量, 也可以包含多个用逗号分隔的变量。创建函数后, 我们可以将其与它的句柄一起使用以评估函数或将其作为参数传递给其他函数。

例如, 创建一个匿名函数来求值并返回圆的面积:

>> cirarea = @ (radius) pi * radius .ˆ 2;

该函数处理的变量名是cirarea。有一个输入参数”半径”。函数的主体为表达式pi * radius。2。使用。数组函数, 以便可以将半径向量传递给函数。

然后使用句柄并向其传递参数来调用这些函数。使用函数句柄的函数调用看起来就像使用函数名称的函数调用。

>> cirarea(4)
ans =
       50.2655
>> cirarea(1:4)
ans =
         3.1416   12.5664   28.2743   50.2655

cirarea的类型可以使用类函数找到:

>> class(cirarea)
ans =
         function_handle

与保存在代码文件中的函数不同, 如果没有参数传递给匿名函数, 则括号必须在函数定义和函数调用中。例如, 以下是匿名函数, 该函数打印带有两个小数位的随机实数, 以及对该函数的调用:

>> prtran = @ () fprintf('%.2f\n', rand);
 >> prtran()
 0.95

键入函数句柄的名称将显示其内容, 即函数定义。

>> prtran
prtran = 
@ () fprintf('%.2f\n', rand)

匿名函数可以存储到MAT文件中, 然后可以在需要时加载。

>> cirarea = @ (radius) pi * radius .ˆ 2;
 >> save anonfns cirarea
>> clear
>> load anonfns
>> who
Your variables are:
cirarea 
>> cirarea
cirarea = 
@ (radius) pi * radius .ˆ 2

自定义匿名功能

具有一个自变量的匿名函数的示例:

功能:

MATLAB匿名函数

可以通过以下方式在命令窗口中将x定义为标量的匿名函数:

>> FA= @ (x) exp(x^2)/sqrt(x^2+5)
FA =
            @(x)exp(x^2)/sqrt(x^2+5)

如果最后没有键入分号, MATLAB将显示该函数。然后, 该函数可用于x的不同值:

>> FA(2)
ans =
         18.1994
>> z = FA(3)
z =
        2.1656e+003

如果期望x是一个数组, 并为每个元素计算函数, 则必须修改该函数以进行逐元素计算。

>> FA = @ (x) exp(x.^2)./sqrt(x.^2+5)
FA =
         @(x)exp(x.^2)./sqrt(x.^2+5)
> > FA ([ 1 0 . 5 2])    
ans =
           1.1097     0.5604    18.1994

具有各种自变量的匿名函数的示例:

函数f(x, y)= 2×2-4xy + y2可以通过以下方式定义为匿名函数:

>> HA = @ (x, y) 2*x^2 - 4*x*y + y^2
HA = 
              @ (x, y) 2*x^2 - 4*x*y + y^2

然后, 匿名函数可用于x和y的特定值。例如, 键入HA(2, 3)给出:

>> HA (2, 3)
ans =
         -7

参数化匿名函数

工作空间中的变量可以在匿名函数的定义中使用。这称为参数化。例如, 要在匿名函数中使用常量c = 2:

>> c = 2;
>> f = @(x) c*x
f = 
    @(x)c*x
>> f(3)
ans =
         6

f(3)使用变量c作为自变量与提供的x相乘。注意, 如果此时将c的值设置为其他值, 则调用f(3), 结果将不会有所不同。 c的值是创建匿名函数时的值:

>> c = 2;
>> f = @(x) c*x;
>> f(3)
ans =
     6
>> c = 3;
>> f(3)
ans =
        6

赞(0)
未经允许不得转载:srcmini » MATLAB匿名函数

评论 抢沙发

评论前必须登录!