首先定义x:xlinspace的取值范围(起点,终点,分多少部分)
比如:xlinspac
1.函数句柄的创建
函数句柄是matlab中一种特殊的数据结构,其位置类似于其他计算机语言中的函数对象(javascript、python)、函数指针(c)或函数引用(perl)的位置。函数就是把一个函数封装成一个变量,这样就可以像其他变量一样在程序的不同部分传递。
matlab中的函数句柄和普通函数调用时没有区别。下面介绍几种创建函数句柄的方法,最后通过函数句柄调用sin(pi)。
创建%functionhandl:直接添加@%语法:@funnam:str2func函数%语法:str2fun(函数名)fun2str2func(cos);%mod:匿名函数%语法:@(参数列表)单行表达式fun3@(x,y)x.2y.2;调用%fun1(pi)的函数句柄;
2.将函数句柄作为函数参数。
排序是函数对象的经典应用场景之一,即为未知类型的数组列表提供自定义排序规则。接下来,我将实现一个函数super_sort,它接收两个参数。第一个参数是要排序的数组,第二个参数是原始数据的转换函数。super_sort可以根据转换后的结果对原始数据进行排序,并返回排序后的原始数据。
%文件名:super_sortedsuper_sort(arr,fh)转换的fh(arr);%transform原数组[~,index]排序(transformed);%获取排序后的原始数组位置索引sortedarr(index);%返回排序后的原始数组结尾
测试脚本:
arrround(randn(8,1)*10);超级排序(arr,@abs)
%根据绝对值super_sort(arr,@sin)对arr进行排序。
%根据sin(x)的结果对arr进行排序
注意,与perl或python不同,这里提供的函数句柄不用于元素。之间的比较,但用于将数组中的每个元素映射到要比较的值。
3.带功能手柄的绘图
在函数句柄的帮助下,可以方便的绘制各种函数的图像,这些函数往往以ez开头。下面我将演示两个函数,ezplot,ezsurf。
%ezplot[0,2*pi]ezplot中sin函数的曲线(@sin,[0,2*pi]);
%ezplot利用x和y上的参数方程绘制心形线xfun@(t)3*(2*cos(t)-cos(2*t));yfun@(t)3*(2*sin(t)-sin(2*t));ezplot(xfun,yfun);
%ezsurf画一个二次fun3@(x,y)x2y2;ezsurf(fun3,[-2,2,-2,2]);
4.使用函数句柄过滤图像。
matlab提供了函数colfilt,可以将图像分成独立的子块(局部处理)或者重叠的窗口(可以实现二维卷积和中值滤波),利用传入的函数句柄对每个子块进行处理。
函数的原型是bcolfilt(a,[mn],block_type,fun),其中b是输出图像,a是输入图像,[mn]是图像块或窗口的长和宽,block_type参数决定是进行块处理还是窗口滑动处理,fun是进行处理的函数句柄,只接收一个矩阵参数,这个矩阵的每一列都是拉长成列向量的子图像。