MATLAB中的函数句柄及其应用
1.函数句柄的创建
函数句柄(function handle)是MATLAB中的一类特殊的数据结构,它的地位类似于其它计算机语言里的函数对象(Javascript,Python),函数指针(C++),或者函数引用(Perl)。作用是将一个函数封装成一个变量,使其能够像其它变量一样在程序的不同部分传递。
MATLAB中的函数句柄在调用时和普通函数没有任何区别,下面展示几种创建函数句柄的方式,最后通过函数句柄调用sin(pi)。
|
2.将函数句柄作为函数参数
函数对象的经典应用情境之一就是排序(Sorting),即为一列未知类型的数组提供自定义的排序规则。下面我将实现一个函数super_sort,接收两个参数,第一个参数为待排序的数组,第二个参数是一个对原始数据的变换函数。super_sort能够对原始数据按照变换后的结果进行排序,并返回排好序的原始数据。
|
测试脚本:
|
注意,与Perl或Python不同,这里提供的函数句柄并不用于元素间的比较,而是用于将数组内各个元素进行映射成待比较的值。
3.利用函数句柄进行画图
借助函数句柄,可以方便地画出各类函数的图像,这类绘图函数往往以ez开头,下面我将演示ezplot, ezsurf两个函数。
|
|
|
4.利用函数句柄进行图像的滤波
MATLAB提供了colfilt这一函数,该函数能将图像分成独立的子块(局部处理),或者相互交叠的窗口(可实现二维卷积及中值滤波),并利用传入的函数句柄对各个子块进行处理。
函数原型为B = colfilt(A,[M N],BLOCK_TYPE,FUN),其中B是输出图像,A是输入图像,[M N]是图像块或窗口的长宽,BLOCK_TYPE参数决定是进行块处理还是窗口滑动处理,FUN就是处理用的函数句柄,它只接收一个矩阵参数,这个矩阵的每一列都是拉长为列向量的子图像,FUN一次可能要处理多个子图像。
下面将实现利用colfilt对图像进行5*5中值滤波,以及局部阈值化。
|
输出图像如下:
5.组合匿名函数实现更复杂的函数句柄
由于只能包含单行的表达式,匿名函数只能完成简单的运算。但是如果把多个匿名函数结合,就能实现更强大的功能。
当函数sort作用于矩阵时,将各列分别排序,如果要实现提取排序后第K小的行,使用单个匿名函会遇到麻烦。因为
|
这样的语法在MATLAB中是错误的,通过组合匿名函数,我们就能解决这一问题。
|
6.总结
函数句柄是函数的数据抽象,能够作为其它函数的参数。善用它,将让程序更加优雅并具有更强的灵活性。
MATLAB中的函数句柄及其应用的更多相关文章
- matlab中关于函数句柄、feval函数以及inline函数的解析 (转)
http://blog.sina.com.cn/s/blog_7bff755b010180l3.html MATLAB函数句柄 函数句柄(Function handle)是MATLAB的一种数据类型. ...
- Matlab中的函数句柄@
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50699990 @是Matlab中的句柄 ...
- matlab中patch函数的用法
http://blog.sina.com.cn/s/blog_707b64550100z1nz.html matlab中patch函数的用法——emily (2011-11-18 17:20:33) ...
- matlab中subplot函数的功能
转载自http://wenku.baidu.com/link?url=UkbSbQd3cxpT7sFrDw7_BO8zJDCUvPKrmsrbITk-7n7fP8g0Vhvq3QTC0DrwwrXfa ...
- 【原创】Matlab中plot函数全功能解析
[原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...
- Matlab中plot函数全功能解析
Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName ...
- matlab 中max函数用法
Matlab中max函数在矩阵中求函数大小的实例如下:(1)C = max(A)返回一个数组各不同维中的最大元素.如果A是一个向量,max(A)返回A中的最大元素.如果A是一个矩阵,max(A)将A的 ...
- matlab中cumsum函数
matlab中cumsum函数通常用于计算一个数组各行的累加值.在matlab的命令窗口中输入doc cumsum或者help cumsum即可获得该函数的帮助信息. 格式一:B = cumsum(A ...
- 『转载』Matlab中fmincon函数获取乘子
Matlab中fmincon函数获取乘子 一.输出结构 [x,fval,exitflag,output,lambda] = fmincon(......) 二.结构说明 lambda结构 说 ...
随机推荐
- html外部文件读取/写入
1.文件的读取 外部文件读取控件: <input type="file" id="file_jquery" onchange="file_jqu ...
- 使用JS生成HTML标签,以达到母板页的效果
前台页面 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1. ...
- C# 隐藏显示桌面图标
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 1.1 DAL数据访问层
分布式(Distributed)数据访问层(Data Access Layer),简称DAL,是利用MySQL Proxy.Memcached.集群等技术优点而构建的一个架构系统.主要目的是解决高并发 ...
- 统计学_Wilcoxon signed-rank test(python脚本)
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
- Python统计学statistics实战
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
- [转]maven中scope详解
在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用5个值: * compile,缺省值,适用于所有阶 ...
- 如何数冲突域(collision domains)个数
数冲突域的核心是: switch.bridge的每个端口都是一个冲突域(因为它们有存储转发功能) hub的所有端口在同一冲突域内(因为hub本身是模拟导线,各个端口可以看成接在一起) 对下图而言 共有 ...
- 阶段3 2.Spring_07.银行转账案例_8 基于接口的动态代理回顾
创建 Producer 生产者的类 创建标准.这标准就是接口 创建消费者的类 以前的方式,客户直接找生产厂家 代理商出现以后,怎么去联系代理商 动态代理 第一个参数是ClassLoader 第二个参数 ...
- 阶段3 2.Spring_04.Spring的常用注解_2 常用IOC注解按照作用分类
注解配置和xml的配置要实现的功能都是一样的.都是要降低程序间的耦合,只不过配置的形式不一样 打包方式改成jar 加入spring 的依赖 复制之前的代码过来 复制到我们新建的工程里 resurces ...