matlab学习笔记13_2匿名函数
一起来学matlab-matlab学习笔记13函数
13_2 匿名函数
觉得有用的话,欢迎一起讨论相互学习~Follow Me
什么是匿名函数
- 匿名函数是不存储在程序文件中、但与数据类型是 function_handle 的变量相关的函数。匿名函数可以接受输入并返回输出,就像标准函数一样。但是,它们可能只包含一个可执行语句。
- 例如,创建用于计算平方数的匿名函数的句柄:
sqr = @(x) x.^2;
- 变量 sqr 是一个函数句柄。@ 运算符创建句柄,@ 运算符后面的圆括号 () 包括函数的输入参数。该匿名函数接受单个输入 x,并显式返回单个输出,即大小与包含平方值的 x 相同的数组。
- 通过将特定值 (5) 传递到函数句柄来计算该值的平方,与您将输入参数传递到标准函数一样。
a = sqr(5)
a =
25
- 许多 MATLAB® 函数接受将函数句柄用作输入,这样可以在特定值范围内计算函数。可以为匿名函数或程序文件中的函数创建句柄。使用匿名函数的好处是 不必为仅需要简短定义的函数编辑和维护文件。
- 通过将函数句柄传递到 integral 函数,计算 sqr 函数从 0 到 1 范围内的积分:
q = integral(sqr,0,1); - 无需在工作区中创建变量以存储匿名函数。可以在表达式内创建临时函数句柄,例如这次对 integral 函数的调用:
q = integral(@(x) x.^2,0,1);
- 通过将函数句柄传递到 integral 函数,计算 sqr 函数从 0 到 1 范围内的积分:
表达式中的变量
- 函数句柄不仅可以存储表达式,还能存储表达式进行计算需要的变量。
- 例如,为需要系数 a、b 和 c 的匿名函数创建函数句柄。
a = 1.3;
b = .2;
c = 30;
parabola = @(x) a*x.^2 + b*x + c;
- 由于 a、b 和 c 在您创建 parabola 时可用,该函数句柄包含这些值。即使您清除变量,这些值仍持久保留在函数句柄内:
clear a b c
x = 1;
y = parabola(x)
y =
31.5000
- 要为这些系数提供不同值,不需创建新的函数句柄
a = -3.9;
b = 52;
c = 0;
parabola = @(x) a*x.^2 + b*x + c; x = 1;
y = parabola(1)
y =
48.1000
- 可以将函数句柄及其相关值存储在 MAT 文件中,然后使用 save 和 load 函数在后续的 MATLAB 会话中加载它们.
save myfile.mat parabola
注意:在构造匿名函数时仅使用显式变量。如果匿名函数访问未在参数列表或主体中显式引用的任何变量或嵌套函数,则 MATLAB 会在您调用该函数时引发错误。隐式变量和函数调用通常会在 eval、evalin、assignin 和 load 等函数中遇到。请避免在匿名函数主体中使用这些函数
多个匿名函数
- 匿名函数中的表达式可以包含其他匿名函数。这可用于将不同的参数传递到在某一值范围内计算的函数。例如,可以针对不同的c值求解以下方程,方法是合并使用两个匿名函数:

g = @(c) (integral(@(x) (x.^2 + c*x + 1),0,1));
- 将被积函数编写为匿名函数,
@(x) (x.^2 + c*x + 1) - 通过将函数句柄传递到 integral 在从 0 到 1 的范围内计算函数,
integral(@(x) (x.^2 + c*x + 1),0,1) - 通过为整个方程构造匿名函数以提供 c 的值,
g = @(c) (integral(@(x) (x.^2 + c*x + 1),0,1)); - 最终的函数可以针对任何 c 值来求解方程。例如:
g(2)
ans =
2.3333
不带输入的函数
- 如果函数不需要任何输入,在匿名函数定义和调用时输入空的圆括号
t = @() datestr(now);
d = t()
d =
26-Jan-2012 15:11:47
- 但是不加上括号是一种错误的写法,这会创建另一个函数句柄,并且不执行函数
d = t
d =
@() datestr(now)
不带输入的函数
- 匿名函数的多个输入需要显式的指定,用逗号分隔开多个输入。
myfunction = @(x,y) (x^2 + y^2 + x*y);
x = 1;
y = 10;
z = myfunction(x,y)
z = 111
- 但是不用在创建匿名函数时显式的定义输出参数,如果函数中的表达式返回多个输出,可以在调用该函数时请求它们。将多个输出变量括在方括号中。
c = 10;
mygrid = @(x,y) ndgrid((-x:x/c:x),(-y:y/c:y));
[x,y] = mygrid(pi,2*pi);
匿名函数的数组
- 虽然大多数的 MATLAB 基本数据类型支持多维数组,但函数句柄必须是标()(单个元素)。但是可以使用 元胞数组或结构体数组 存储多个函数句柄。最常见的方式是使用元胞数组,例如
f = {@(x)x.^2;
@(y)y+10;
@(x,y)x.^2+y+10};
- 创建元胞数组时,记住 MATLAB 将空格解释为列分隔符。如上面的代码所示,省略表达式中的空格,或将表达式括在圆括号中,例如
- 注意空格和括号
@(y) (y + 10);
@(x,y) (x.^2 + y + 10)};
- 使用花括号访问元胞内容。例如,f{1} 返回第一个函数句柄。要执行该函数,请在花括号之后的圆括号中传递输入值
x = 1;
y = 10;
f{1}(x)
f{2}(y)
f{3}(x,y)
ans =
1
ans =
20
ans =
21
matlab学习笔记13_2匿名函数的更多相关文章
- matlab学习笔记13_3创建函数句柄
一起来学matlab-matlab学习笔记13函数 13_3 创建函数句柄 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://ww2.mathworks.cn/help ...
- Python学习笔记010——匿名函数lambda
1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要r ...
- scala 学习笔记四 匿名函数
1.介绍 Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体. 使用匿名函数后,我们的代码变得更简洁了. 下面的表达式就定义了一个接受一个Int类型输入参数的匿名函数: var ...
- python 学习笔记2 匿名函数
# 匿名函数 lambda a,b : a+b# a.j.from functools import reduce students = [{'name': '张三', 'age': 18, 'hei ...
- Matlab学习笔记 figure函数
Matlab学习笔记 figure函数 matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. ...
- matlab学习笔记 bsxfun函数
matlab学习笔记 bsxfun函数 最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下. ...
- Typescript 学习笔记三:函数
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- matlab学习笔记---(1)
Matlab学习笔记 一. Desktop Basics (Matlab 基础知识) 当你打开Matlab的时候,matlab按照以下默认的方式展示出来. 该桌面主要包括以下几部分内容: 当前文件夹: ...
- Go语言学习笔记七: 函数
Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...
随机推荐
- Python调用百度接口(情感倾向分析)和讯飞接口(语音识别、关键词提取)处理音频文件
本示例的过程是: 1. 音频转文本 2. 利用文本获取情感倾向分析结果 3. 利用文本获取关键词提取 首先是讯飞的语音识别模块.在这里可以找到非实时语音转写的相关文档以及 Python 示例.我略作了 ...
- commix 命令注入工具
关于系统命令注入,可以参考这篇文章:命令攻击介绍 系统命令注入场景 在对企业进行安全测试时候,很少会发现系统注入漏洞.这是因为大部分情况下代码业务主要是数据操作.文件操作.逻辑处理和api接口调用等, ...
- JS定时器实现函数节流和防抖 -简单实现对比 -适用地方
如题 (总结要点) 防止重复点击! 最近项目中遇见这个"函数抖动"的问题!快速点击前端xx按钮,造成数据多次加载进页面里,正常只显示10条数据,结果显示了20条数据,异常! 出现原 ...
- @Transactional(rollbackFor)
@Transactional注解有两个,一个是spring提供的@org.springframework.transaction.annotation.Transactional 另一个是jdk提供@ ...
- Spring Boot 集成 Kafka
相关文章 网址 Spring Boot系列文章(一):SpringBoot Kafka 整合使用 http://www.54tianzhisheng.cn/2018/01/05/SpringBoot- ...
- Pycharm激活方法使用的是(license server)
pycharm所有版本 http://www.jetbrains.com/pycharm/download/previous.html打开激活窗口 选择 Activate new license wi ...
- sqlg rdbms 上实现的Apache TinkerPop
sqlg 可以让关系型数据库支持Apache TinkerPop,当前支持的数据库有postgresql,hsqldb,h2,mariadb,mysql,mssqlserver 以下是一个简单的使用 ...
- JS的ES6的基础语法
JS的ES6 1.let let age = 12; (1). 作用: 与var类似, 用于声明一个变量 (2). 特点: 在块作用域内有效 不能重复声明 不会预处理, 不存在提升 (3). 应用: ...
- 配送城市地址联动选择JQuery
记录一次使用jq实现3层地址联动选择流程!效果如图. 需要引入 jq.js.layer.js.layui.js.layui.css (icon图标) 二.选中后页面展示效果 三.页面展示HTML &l ...
- Internet地址结构
IP地址结构及分类寻址 IP地址 = <网络号> + <主机号> ------------IPv4(32bit)点分四组表示法: 192.168.31.1 ...