matlab ema 向量化,MatLab向量化编程arrayfun函数的使用

本文介绍了MATLAB中的arrayfun函数,用于将任意函数应用于数组的所有元素,提高代码效率。通过两个示例展示了如何利用arrayfun进行矩阵运算和角谷猜想的验证,以及如何结合其他函数处理大数据集的子集并计算平均值。
摘要由CSDN通过智能技术生成

我们知道,MATLAB编程核心思想之一就是向量化。MATLAB的很多built-in函数,向sin,cos,find等等都支持向量运算。但是,很多时候我们编写的函数的输入变量是标量,而我们又要对很多组参数进行函数调用,MATLAB7以前的版本中我们只能通过循环来实现,如果参数的维数增加,就会出现循环套循环的现象,效率恐怖。从MATLAB7.1开始,MATLAB新增arrayfun这个built-in函数来实现将任意函数应用到数组内包括结构在内的所有元素。这样很多以前不可避免的循环现在可以向量化了。举例如下:

例1:生成一个这样的n*n矩阵a:a(i,j)=dblquad(@(u,v)

sin(u)*sqrt(v),0,i,0,j)。以n=10为例,

以前我们可能这样做:

CODE:

a=zeros(10);

for ii=1:10

for jj=1:10

a(ii,jj)=dblquad(@(u,v) sin(u)*sqrt(v),0,ii,0,jj);

end

end

现在我们只需这样:

CODE:

[J,I]=meshgrid(1:10);

a1=arrayfun(@(ii,jj) dblquad(@(u,v)

sin(u)*sqrt(v),0,ii,0,jj),I,J);

例2:验证角谷猜想,一个正整数n,如果是偶数除以2,如果是奇数乘以3加1,得到的新数继续按上述规则运算,最后结果都为1。验证1到100000内的正整数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值