- 积分
- 7
- 注册时间
- 2002-9-10
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2010-12-27 18:11:01
|
显示全部楼层
来自 山东淄博
用楼主的公式测试了一下Forcal的arrayfun函数的效率,发现比while循环慢些,可能是矢量化代码要分配内存的缘故吧?
-
- !using["math","sys"];
- fx0(x0::x)=1/(1+x0)*exp{-[(x-x0)^2/(1+x0)^2]};
- fy0(y0::y)=1/(1+y0)*exp{-[(y-y0)^2/(1+y0)^2]};
- w(xx,yy::x,y)= x=xx,y=yy, IMSL::QDAGS[HFor("fx0"),0,20,0,1e-6,0]+IMSL::QDAGS[HFor("fy0"),0,20,0,1e-6,0];
- ArrayFunTime(:x,y,a,t0) =
- {
- t0=clock[],
- oo{ndgrid[linspace(minus(10),10,21),linspace(minus(10),10,21),&x,&y], a=arrayfun[HFor("w"),x,y].Sum[]},
- printff{"\r\n结果={1,r} arrayfun时间={2,r}毫秒",a,sys::clock()-t0}
- };
- ForTime(:i,j,a,t0)=
- {
- t0=sys::clock(), a=0,
- i=-10,(i<=10).while{
- j=-10,(j<=10).while{
- a=a+w[i,j],
- j++
- },
- i++
- },
- printff{"\r\n结果={1,r} while时间={2,r}毫秒",a,sys::clock()-t0}
- };
复制代码
结果:
结果=885.98422777071755 arrayfun时间=125.毫秒
结果=885.98422777071755 while时间=78.毫秒 |
评分
-
1
查看全部评分
-
|