24小时热门版块排行榜    

Znn3bq.jpeg
北京石油化工学院2026年研究生招生接收调剂公告
查看: 1684  |  回复: 7

xhan

银虫 (小有名气)

[求助] matlab循环计算转为矩阵 30金币求助

程序是用来做菲涅尔积分的,由于程序运算时间太长,因此想把最耗时的两重for循环运算部分改为矩阵运算形式,但没找到合适的方法,循环中运行的语句本身就是一个矩阵运算,想请教各位怎么改成完全矩阵运算的程序。
X1=-22e-3;
X2=22e-3;
Y1=-22e-3;
Y2=22e-3;
Num0=128;
[x,y]=meshgrid(X1X2-X1)/(Num0-1):X2,Y1Y2-Y1)/(Num0-1):Y2);
for i=1:Num0
    x1=x(1,i);
    for j=1:Num0
        y1=y(j,1);
        Fij=Fun2.*exp(sqrt((x1-x).^2+(y1-y).^2)); %Fun2是一个矩阵函数
        Fun3(i,j)=sum(sum(Fij));
    end
end
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

meatball1982

铜虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
csgt0: 金币+3, 辛苦啦! 2012-11-23 09:45:47
csgt0: 金币+30, lz奖励金币 2012-12-17 09:15:17
你好。关于两个循环,实在是想不出什么好的方法,主要是求各个点到其它点的距离这一项,试了总是不行。
但如果你确定是用这一组X1,X2,Y1,Y2,就可以偷下懒。
我的程序暂时以Num0=8为例进行说明。只要X关于点对称,Y关于点对称,就好办。
你的F3是一个大的对称的矩阵。我们只要生成这个矩阵的1/8.通过转置,翻转等操作(matlab对矩阵的运算还是挺快的。),可以生成Fun3。

当Num0=8的时候,两层循环比较好。
Elapsed time is 0.000551 seconds.
Elapsed time is 0.012936 seconds.

当Num0=32的时候,两种方法差不多。
Elapsed time is 0.063168 seconds.
Elapsed time is 0.021089 seconds.

当Num0=128的时候,偷懒的方法要好些,可能是Num0越大,效果越好,但应该是有上限的,这要看你的内存值(用空间换时间就是)。
Elapsed time is 8.402686 seconds.
Elapsed time is 0.986670 seconds.


clear all
clc

% X1=-22e-3;
% X2=22e-3;
% Y1=-22e-3;
% Y2=22e-3;

% different X,Y
X1=-20e-3;
X2=20e-3;
Y1=-21e-3;
Y2=21e-3;

Num0=128;% u can change it for 8,32 64 and 128
tm_lu=zeros(Num0/2,Num0/2);
tm_lu=zeros(Num0/2,Num0);
tmp  =zeros(Num0,Num0);

Fun2=1;
x_l=X1X2-X1)/(Num0-1):X2;
y_l=Y1Y2-Y1)/(Num0-1):Y2;
[x,y]=meshgrid(x_l,y_l);
%% your way
tic
for i=1:Num0
    x1=x_l(i);
    for j=1:Num0
        y1=y_l(j);
        Fij=Fun2.*exp(sqrt((x1-x).^2+(y1-y).^2)); %Fun2是一个矩阵函数
        F3(i,j)=sum(Fij();
    end
end
toc

%%
tic
for i=1:Num0/2
    x1=x_l(i);
    for j=1:i
        y1=y_l(j);
        Fij=Fun2.*exp(sqrt((x1-x).^2+(y1-y).^2)); %Fun2是一个矩阵函数
        tm(i,j)=sum(Fij();
    end
end
tm_lu=tm+tm'-tril(tm');
tm_u=[tm_lu,flipud(tm_lu)'];
F4=[tm_u;flipud(tm_u)];
toc

% modified on : 22-Nov-2012 19:11:35
% typed by : m
唉。还是学吧。
2楼2012-11-22 19:23:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xhan

银虫 (小有名气)

引用回帖:
2楼: Originally posted by meatball1982 at 2012-11-22 19:23:09
你好。关于两个循环,实在是想不出什么好的方法,主要是求各个点到其它点的距离这一项,试了总是不行。
但如果你确定是用这一组X1,X2,Y1,Y2,就可以偷下懒。
我的程序暂时以Num0=8为例进行说明。只要X关 ...

非常感谢meatball,这样的处理确实能提高运行效率。不过对于我要做的程序还是不够,一个原因是里面用的积分最多的有二十多个,二是Num0的取值要到8000或者16000才能得到稳定解,这时候运行非常的慢,几倍的提高还是没办法解决问题。另外有个问题就是Fun2矩阵有时候不是对称的,因此得到的Fun3也不是对称的,不能用这个方法来算。不过还是很感谢你。要是后面没人能解决的话,这金币就给你了。
3楼2012-11-24 23:02:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

meatball1982

铜虫 (小有名气)

引用回帖:
3楼: Originally posted by xhan at 2012-11-24 23:02:47
非常感谢meatball,这样的处理确实能提高运行效率。不过对于我要做的程序还是不够,一个原因是里面用的积分最多的有二十多个,二是Num0的取值要到8000或者16000才能得到稳定解,这时候运行非常的慢,几倍的提高还是 ...

我再想想有没有办法,如果没能解决,金币还是算了吧。
唉。还是学吧。
4楼2012-11-25 21:58:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

himyou

银虫 (小有名气)


csgt0: 金币+1, 欢迎交流 2012-11-26 13:36:29
你用并行for试一下

parfor

» 本帖已获得的红花(最新10朵)

5楼2012-11-26 10:33:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖


dbb627: 金币+1, 谢谢应助! 2012-11-27 14:36:27
菲涅尔积分用
c1=mfun('FresnelC',x)
s1=mfun('FresnelS',y)
计算,详细的你可以看看网上的一个算法,应该会快些的
http://wenku.baidu.com/view/76f633c29ec3d5bbfd0a74fd.html
showmethemoney
6楼2012-11-26 14:54:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xhan

银虫 (小有名气)

送鲜花一朵
引用回帖:
5楼: Originally posted by himyou at 2012-11-26 10:33:53
你用并行for试一下

parfor

谢谢himyou。第一次见到这个并行处理,学习了。我把程序用parfor改进了一下,虽然不能最终解决问题,但相比还是要好一些。
7楼2012-11-26 19:09:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xhan

银虫 (小有名气)

引用回帖:
6楼: Originally posted by csgt0 at 2012-11-26 14:54:08
菲涅尔积分用
c1=mfun('FresnelC',x)
s1=mfun('FresnelS',y)
计算,详细的你可以看看网上的一个算法,应该会快些的
http://wenku.baidu.com/view/76f633c29ec3d5bbfd0a74fd.html

谢谢csgt0.我仔细看了这个算法。但感觉其中的推导有些问题。第七式到第八式的推算部分直接把E0跟其它部分分别进行积分,即使不经过衍射孔这样积分也是不对的。
8楼2012-11-28 10:53:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 xhan 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 求材料调剂,一志愿郑州大学289分 +17 硕星赴 2026-04-03 17/850 2026-04-08 06:53 by lijunpoly
[考研] 一志愿211,化学学硕,310分,本科重点双非,求调剂 +12 努力奋斗112 2026-04-06 13/650 2026-04-07 23:49 by JourneyLucky
[考研] 071000生物学,一志愿深圳大学296分,求调剂 +12 TIckLw 2026-04-06 13/650 2026-04-07 20:34 by lijunpoly
[考研] 电子信息270求调剂 +6 terminal469 2026-04-07 6/300 2026-04-07 19:13 by jp9609
[考研] 304求调剂 +4 luoye0105 2026-04-05 4/200 2026-04-06 21:05 by 木子君1218
[考研] 求调剂 +10 Hll胡 2026-04-04 10/500 2026-04-05 20:09 by nepu_uu
[考研] 313求调剂 +3 海日海日 2026-04-04 3/150 2026-04-05 07:48 by 544594351
[考研] 324求调剂 +9 想上学求调 2026-04-03 9/450 2026-04-04 23:57 by 果冻大王
[考研] 能动调剂326专硕 +4 wan112233 2026-04-04 4/200 2026-04-04 22:47 by yu221
[考研] 320求调剂 +3 一样圆 2026-04-04 3/150 2026-04-04 22:29 by 啵啵啵0119
[考研] 怎么删帖子啊 +3 缝曦1000 2026-04-04 3/150 2026-04-04 14:20 by 土木硕士招生
[考研] 一志愿北京科技大学材料工程085601,求调剂 +17 cdyw 2026-04-02 18/900 2026-04-04 11:14 by w_xuqing
[考研] 320求调剂 +5 振—TZ 2026-04-02 5/250 2026-04-03 14:42 by fxue1114
[考研] 求调剂 +3 usbdndj 2026-04-03 3/150 2026-04-03 14:10 by dxiaoxin
[考研] 建环,能源,土木老师路过看一看!!! +5 嘿嘿uu 2026-04-01 5/250 2026-04-03 11:47 by znian
[考研] 求调剂22408 288分 +5 new382 2026-04-02 5/250 2026-04-03 09:13 by 醉在风里
[考研] 312求调剂 +4 赊月色 2026-04-02 5/250 2026-04-03 08:21 by fangshan711
[考研] 296求调剂 +4 sdhu 2026-04-02 4/200 2026-04-02 21:29 by baoball
[考研] 调剂 +3 好好读书。 2026-04-01 6/300 2026-04-02 15:49 by liumengping
[考研] 324求调剂 +5 想上学求调 2026-04-01 6/300 2026-04-02 10:16 by sanrepian
信息提示
请填处理意见