| 查看: 1562 | 回复: 7 | |||
[求助]
matlab循环计算转为矩阵 30金币求助
|
|
程序是用来做菲涅尔积分的,由于程序运算时间太长,因此想把最耗时的两重for循环运算部分改为矩阵运算形式,但没找到合适的方法,循环中运行的语句本身就是一个矩阵运算,想请教各位怎么改成完全矩阵运算的程序。 X1=-22e-3; X2=22e-3; Y1=-22e-3; Y2=22e-3; Num0=128; [x,y]=meshgrid(X1 X2-X1)/(Num0-1):X2,Y1 Y2-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 |
» 猜你喜欢
【复旦大学】二维材料方向招收2026年博士研究生1名
已经有0人回复
北京纳米能源与系统研究所 王中林院士/曹南颖研究员课题组2026级硕/博/博后招生
已经有10人回复
物理学I论文润色/翻译怎么收费?
已经有141人回复
荷兰Utrecht University超快太赫兹光谱王海教授课题招收2026 CSC博士生
已经有23人回复
反铁磁体中的磁性切换:两种不同的机制已成功可视化
已经有0人回复
求标准粉末衍射卡号 ICDD 01-076-1802
已经有0人回复
新西兰Robinson研究所招收全奖PhD
已经有0人回复
石墨烯转移--二氧化硅衬底石墨烯
已经有0人回复
» 本主题相关价值贴推荐,对您同样有帮助:
matlab如何实现矩阵多行数据的循环调用
已经有5人回复
如何用Matlab画矩阵的散点图?
已经有3人回复
菜鸟求助~matlab怎么样让一个1xn的向量中的每个元素是个矩阵?
已经有11人回复
matlab 有限元计算扩散问题,建立整体矩阵好慢。大家帮忙看看代码
已经有8人回复
matlab中系数是矩阵的积分
已经有5人回复
请教关于matlab矩阵转换问题
已经有6人回复
求助用matlab表示一个矩阵
已经有4人回复
关于计算机内存和matlab产生矩阵能力的关系的困惑
已经有3人回复
matlab 不规则矩阵 求平均值
已经有6人回复
matlab 复数矩阵转为实数矩阵 等值线作图求助 详见帖内
已经有1人回复
【求助】求Matlab循环作图
已经有12人回复
【求助】matlab 解矩阵方程 重金悬赏解决方案
已经有10人回复
meatball1982
铜虫 (小有名气)
- 应助: 8 (幼儿园)
- 金币: -3.4
- 红花: 8
- 帖子: 297
- 在线: 108.3小时
- 虫号: 1530793
- 注册: 2011-12-09
- 性别: GG
- 专业: 理论和计算化学
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
csgt0: 金币+3, 辛苦啦! 2012-11-23 09:45:47
csgt0: 金币+30, lz奖励金币 2012-12-17 09:15:17
感谢参与,应助指数 +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=X1 X2-X1)/(Num0-1):X2;y_l=Y1 Y2-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
3楼2012-11-24 23:02:47
meatball1982
铜虫 (小有名气)
- 应助: 8 (幼儿园)
- 金币: -3.4
- 红花: 8
- 帖子: 297
- 在线: 108.3小时
- 虫号: 1530793
- 注册: 2011-12-09
- 性别: GG
- 专业: 理论和计算化学

4楼2012-11-25 21:58:00
5楼2012-11-26 10:33:53
【答案】应助回帖
★
dbb627: 金币+1, 谢谢应助! 2012-11-27 14:36:27
dbb627: 金币+1, 谢谢应助! 2012-11-27 14:36:27
|
菲涅尔积分用 c1=mfun('FresnelC',x) s1=mfun('FresnelS',y) 计算,详细的你可以看看网上的一个算法,应该会快些的 http://wenku.baidu.com/view/76f633c29ec3d5bbfd0a74fd.html |

6楼2012-11-26 14:54:08
7楼2012-11-26 19:09:02
8楼2012-11-28 10:53:49













X2-X1)/(Num0-1):X2,Y1
回复此楼
);
xhan