mfc用数组怎么存储句柄_Arrayfun函数用的好,代码就会写的少。

本文介绍了MATLAB的Arrayfun函数如何帮助简化处理数组中的句柄操作,通过数值积分的示例展示其作用,对比了使用和不使用Arrayfun的代码,并提醒读者在遇到循环求值时考虑使用Arrayfun以实现代码的向量化。
摘要由CSDN通过智能技术生成

22bcc921bb51676f3788256157445171.png

首发公众号:120701101

从自学者的角度讲起。如果感兴趣,可以及时关注,咱们一起进步。

公众号中可以获取大量的学习资料。


今天介绍一个内置函数——arrayfun函数。
先看看官方的介绍,然后我再说说我的理解以及什么时候用。

目录

1、ARRAYFUN函数介绍

2、不用arrayfun函数的代码

3、使用arrayfun函数的代码

4、使用情况及反思

正文

1、ARRAYFUN函数介绍

arrayfun
将函数应用于每个数组元素

语法
B = arrayfun(func,A)
B = arrayfun(func,A1,...,An)
B = arrayfun(___,Name,Value)
[B1,...,Bm] = arrayfun(___)

说明

B = arrayfun(func,A) 将函数 func 应用于 A 的元素,一次一个元素。
然后 arrayfun 将 func 的输出串联成输出数组 B,因此,对于 A 的第 i 个元素来说,B(i) = func(A(i))。
输入参数 func 是一个函数的函数句柄,此函数接受一个输入参数并返回一个标量。
func 的输出可以是任何数据类型,只要该类型的对象可以串联即可。数组 A 和 B 必须具有相同的大小。
您不能指定 arrayfun 计算 B 的各元素的顺序,也不能指望它们按任何特定的顺序完成计算。

B = arrayfun(func,A1,...,An) 将 func 应用于数组 A1,...,An 的元素,因此 B(i) = func(A1(i),...,An(i))。
函数 func 必须接受 n 个输入参数并返回一个标量。数组 A1,...,An 的大小必须全部相同。

B = arrayfun(___,Name,Value) 应用 func 并使用一个或多个 Name,Value 对组参数指定其他选项。
例如,要以元胞数组形式返回输出值,请指定 'UniformOutput',false。
当 func 返回的值不能串联成数组时,可以按元胞数组的形式返回 B。
您可以将 Name,Value 对组参数与上述任何语法中的输入参数结合使用。
当 func 返回 m 个输出值时,[B1,...,Bm] = arrayfun(___) 返回多个输出数组 B1,...,Bm。
func 可以返回不同数据类型的输出参数,但每一次调用 func 时返回的每个输出的数据类型必须相同。
您可以将此语法与前面语法中的任何输入参数结合使用。
从 func 返回的输出参数的数量可以不同于 A1,...,An 指定的输入参数的数量。

从官方的角度说的也比较清楚。就是说你有一个(句柄)函数,然后又有一些离散数据。那么arrayfun函数帮你把你的离散数据一个一个的带入到句柄函数中求值。

好像做起来感觉很简单。其实不然,我们以一个数值积分的例子来看看。

下面我用的是辛普森积分法来演示。

2、不用arrayfun函数的代码

function Integral = Simpson(fun, a, b, n)

h = (b - a) / n;
x = a : h : b;

Integral = 0;

for i = 1 : 2: n
    Integral = Integral + fun(x(i)) + 4*fun(x(i+1)) + fun(x(i+2));
end

Integral = (h / 3) * Integral;

end

3、使用arrayfun函数的代码

function Integral = simPsonThird(fun, a, b, n)

h = (b - a) / n;
x = a : h : b;
Integral = h/3 * (fun(x(1)) + fun(x(end))...
                  + 4*sum(arrayfun(fun, x(2:2:end-1)))...
                  + 2*sum(arrayfun(fun, x(3:2:end-2))));

end

很明显,使用arrayfun函数可以减少循环。MATLAB本来就是矩阵实验室,最好走向量化语言。

4、使用情况及反思

当你编写有代入自变量到函数中求值的循环语句时,就可以着手考虑一下能不能使用arrayfun函数。尤其是那些自变量又是可以用索引方式提取的,更应该考虑。

使用arrayfun函数绘图也是一个很省力的方式,在官方的帮助文档就有这样的例子。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值