向量化编程:arrayfun及cellfun函数的使用


arrayfun这个built-in函数来实现将任意函数应用到数组内包括结构在内的所有元素。这样很多以前不可避免的循环现在可以向量化了。而向量化正是Matlab不遗余力追求的核心思想之一。

举例一

生成一个这样的n*n矩阵aa(i,j)=dblquad(@(u,v) sin(u)*sqrt(v),0,i,0,j)(二重数值积分命令)。以n=10为例,可以这样做

%%%%%%%%%%

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

%%%%%%%

采用更具效率的向量化编程如下

%%%%%

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

a1=arrayfun(@(ii,jj) dblquad(@(u,v) sin(u)*sqrt(v),0,ii,0,jj),I,J);

%%%%%%

1A=ARRAYFUN(FUN, B)

FUN是函数句柄,对B中的每一个元素调用FUN函数(计算顺序随意),结果存放于A中,size(A)==size(B)

FUN函数可接受numeric, logical, char, struct, cell的自变量类型。

2[A, B, ...] = ARRAYFUN(FUN, C, ...)

FUN函数的返回值是一个向量,对B中的每一个元素调用FUN函数,计算结果放在A,B…中。

3A = ARRAYFUN(FUN, B, C,  ...)

FUN函数接受参数不唯一,分别调用B, C,  ...中的元素,A(i,j...)=Fun(B(i,j...),C(i,j,...)...)

B,C...大小必须相等。

例子2

quadl(@(x) arrayfun(@(xx) quadl(@(y) xx*y,sin(xx),cos(xx)),x),1,2)

这行代码体现了用MATLAB7.X求一般区域二重积分的一般方法。

 

Cellfun函数也有类似妙用。

function aa=sumsum(a)

aa=sum(sum(a));

 

>> b=zeros(2,2);

>> c=ones(3,3);

>> d={b,c}

 

d =

 

[2x2 double]    [3x3 double]

cellfun(@sumsum,d)

 

ans =

 

     0     9

 

By Juju Dec. 2010

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值