标题:程序循环次数太多急需优化
只看楼主
guodd100
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-4-7
 问题点数:0 回复次数:2 
程序循环次数太多急需优化

小弟做了一个程序 ,要用到循环,次数太大,非常耗时。
请哪位大侠给优化一下,不胜感激。。。。


clear
>> U=ones(256,256);
U=ones(256,256);
for n=1:256
for m=1:256
if 256^2<(256-(512/511*n-512/511/2))^2+(256-(512/511*m-512/511/2))^2
U(n,m)=0;
end
end
end
U1=flipud(U);
U2=fliplr(U);
U3=flipud(U2);
U0=[U U2;U1 U3]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%圆孔,这部分数据事先算好没有影响,U0是一个512×512的矩阵,在后面的程序中直接载入U0。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

主要部分
R=3;bc=1.06e-3;L=339.7;xj=0.0044157;
k=2*pi/bc;
>> N=512;
>> x=linspace(-R,R,N);
>> y=linspace(-R,R,N); %%%%%%%%x,y为两列数组
xy=2*R/(N-1); %%%%%%%%一个数
>> [X Y]=meshgrid(x,y); %%%%%%%%%做网格,X,Y分别是512×512的矩阵
>> Z1=exp(j*k*L)/j/bc/L; %%%%%%%%%一个数
>> Tr=exp(-j*2*xj*k*(X.^2+Y.^2).^(1/2)); %%%%%%%%暂时没有用到
>> U1=ones(512,512);
>> U2=ones(512,512);
Z2=exp(j*k/2/L*(X.^2+Y.^2)); %%%%%%%%%%%%512×512的矩阵
Zj=ones(512,512);
zj1=ones(512,1); %%%%%%%%%%%%%%%以上部分主要是赋值和预留内存空间
>> for m=1:512
m
for n=1:512
n
Z3=exp(j*k/2/L*(x(m)^2+y(n)^2));
Zj=U0.*U1.*Z2.*exp(-j*2*pi/bc/L*(X*x(m)+Y*y(n))); %%%%%%512×512的矩阵
Zj1=trapz(Zj)*xy;
Zj2=trapz(Zj1)*xy; %%%%%对矩阵Zj的各项求和后乘以xy^2,可能有更简洁的函数
U2(n,m)=Z1*Z3*Zj2; %%%%%%%%%%%%%%%%%%最终要得到的结果U2是512×512的矩阵,上述方法只能一个点一个点地求
end
end %%%%%%%%%%%%%%%%%%%%%利用循环,次数多,耗时太大,是否有更简洁的矩阵计算方法

[此贴子已经被作者于2007-8-14 16:45:28编辑过]

搜索更多相关主题的帖子: 不胜感激 style 
2007-08-13 16:56
尘埃122
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:127
专家分:0
注 册:2006-8-31
得分:0 

呵呵,程序看起来有点头大

你可以加文字适当描述下你要解决的问题 :) 这样大家看起来直观些,或许可以帮上忙


2007-08-14 11:17
guodd100
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-4-7
得分:0 

呵呵 好的 小弟粗心了。。。

2007-08-14 16:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-162390-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.420459 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved