matlab for 包含,matlab中如何将六重for循环进行优化.里面还包含if条件。

matlab中如何将六重for循环进行优化.里面还包含if条件。

mip版  关注:176  答案:3  悬赏:70

解决时间 2021-01-25 04:29

d68ccbeb308ed47b00bb2dbf473dffbb.png

已解决

2021-01-24 20:32

for ix=1:N+1

x=-1000+(ix-1)*2000/N;

for iy=1:N+1

y=-1000+(iy-1)*2000/N;

Lx(ix,iy)=x;

Ly(ix,iy)=y;

Exx(ix,iy)=0;

Exy(ix,iy)=0;

iip=0;

iiq=0;

for p= -(N-1)/2:(N-1)/2

iip=iip+1;

for q= -(N-1)/2:(N-1)/2

if sqrt(p^2+q^2)>(N-1)/2

continue;

end

iiq=iiq+1;

sitao=asin(2*NA*sqrt(p^2+q^2)/(N-1));

fano=atan2(q,p);

Eopqx(iip,iiq)=0;

Eopqy(iip,iiq)=0;

for m=-(N-1)/2: (N-1)/2

for n=-(N-1)/2: (N-1)/2

if sqrt(m^2+n^2)>(N-1)/2

continue;

end

sitai=asin (2*NA*sqrt(m^2+n^2)/(N-1));

fani=atan2(n,m);

。。。。。。。。。。。。。。。

运行速度超级慢,20个数要2个多小时。详细内容请看:http://www.ilovematlab.cn/thread-282036-1-1.html

最佳答案

0ab030097acdf3e77f4409bc1232daed.png

2021-01-24 21:40

建议利用并行计算,速度至少提高1/3,只需要for循环中各次迭代之间无数据传递关系。做法简单:

只需要将你程序中的for更改为parfor即可,但前面需要加入如下指令:

matlabpool open

记得别忘记了程序最后添加:

matlabpool close

具体更改与不更改之间运算速度对比示例如下:

clc;

clear;

tic

for i=1:1000

c(:,i) = eig(rand(100));

end

display('Single CPU:')

toc

% use PCT

clear

matlabpool open local 2

tic

parfor i=1:1000

c(:,i) = eig(rand(100));

end

display('Double Core:')

toc

matlabpool close

全部回答

3dd37b3039131ddde5f5128be00a3537.png

1楼

2021-01-24 23:47

n=1e6;

paradata =50;

nco_acc=zeros(n);

for i=2:n

nco_acc(i)=nco_acc(i-1)+paradata;

nco_acc(i)=mod(nco_acc(i),2^33);

end nco_acc=zeros(n);提前指定变量大小,能显著提高循环速度。不用随机寻址。并且你这个变量的第一个元素是什么需要指定。

e86ba0330c47ecd8b78882988390b437.png

2楼

2021-01-24 22:23

1 直接使用数组进行计算,可以快4~5倍的时间

2 删去无意义的if,拟程序中的if没进行任何动作,完全可以删除

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

点此我要举报以上信息!

推荐资讯

大家都在看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值