handle句柄 matlab_谁能系统且简要地介绍一下matlab中的function handle吗?

如果你学过其他的编程语言的话,类比可能会让你更好地理解什么是function handle(“函数句柄”,这个翻译太难听了)。Matlab里面function handle类似于python里面的函数对象、C++语言里面的函数指针、Perl里面的函数引用。function handle可以将function包装操作成(handle)一个变量。一个函数变成了一个变量之后,则我们可以在另外一个函数的参数input里面,将这个function handle直接当成参数来输入。我们首先来看一看几种定义function handle的方式:

% 方式1:直接在系统函数名字前面加上符号@

fun1 = @sin;

fun2 = @abs;

fun3 = @svd;

% 方式2 : 利用str2func函数,将系统函数名字用单引号括起来

fun4 = str2func('cos');

fun5 = str2func('tan');

% 方式3 : 使用类似于R里面的lambda函数的定义方式,这个方法十分灵活,

% 首先用()将参数列表写出来,然后再写函数表达式,具体如下

fun6 = @(x, y)x.^2 + y.^2;

fun7 = @(x, y, z)exp(x + y + z);

2.我们来看看function handle能带来什么好处:

比如说,我们想对一个数据集MyData进行排序. 数据集MyData里面只有一个变量x,但是我们希望按照以下三个方式对x进行排序. 第一,按照x的绝对值大小;第二,按照sin(x)的值的大小;第三,按照cos(x)的值的大小。如果我们用python来编程的话,我们可能需要写三个不同的函数;或者是写一个函数,然后在这个函数里面添加if判断语句. 但是用matlab来写的话,就比较简洁.

首先,我们定义一个排序函数,将其储存在一个名为mysort.m的脚本中

function sorted = mysort(mydata, myfunction)

transformed = myfunction(mydata);% 对原始数组进行变换

[~, index] = sort(transformed); % 获得排序后的原数组位置索引

sorted = mydata(index); % 返回排序后的原数组

end

其次,我们再使用如下的脚本来调用函数:

%生成一个测试数据

>>MyData = round(randn(8, 1) * 10)

MyData =

7

-3

3

-8

9

-11

-11

-8

%方式1,按照绝对值大小来排序

>>mysort(MyData, @abs)

ans =

-3

3

7

-8

-8

9

-11

-11

%方式2,按照sin(x)大小来排序% 将arr按照其绝对值大小排序

>>mysort(MyData, @sin)

ans =

-8

-8

-3

3

9

7

-11

-11

%方式3,按照cos(x)大小来排序

>>mysort(MyData, @cos)

ans =

-3

3

9

-8

-8

-11

-11

7

欢迎各位大佬补充和指正

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值