24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1961  |  回复: 9

ll20100996

禁虫 (知名作家)

本帖内容被屏蔽

» 猜你喜欢

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

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

锐利的碎片

木虫 (正式写手)

star watcher

【答案】应助回帖


ll20100996(金币+1): 我试过,可是数组太大,电脑不支持啊!~还是谢谢啦! 2011-06-15 12:05:03
dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-15 23:10:34
matlab循环很慢,fortran相比要快得多。可以考虑把循环拆开换成数组运算,会有一定提高。
2楼2011-06-15 11:18:17
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

yalefield

金虫 (文坛精英)

老汉一枚

【答案】应助回帖


ll20100996(金币+1): 我会考虑下你的建议。可是我的C基础不好,如何并行化也不清楚啊!能否具体说下呢?非常感谢! 2011-06-15 12:06:23
jjdg(金币+1): 感谢支招 2011-06-15 12:18:50
用C重写,而且这段代码可以很大程度地并行化咯。
嗯,提高1024倍没问题咯。
3楼2011-06-15 11:41:33
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

coolrainbow

木虫 (著名写手)

未来国家冻凉


jjdg(金币+1): 感谢支招 2011-06-15 12:19:01
改成C后,把^2 改成*,然后用openmp来并行下,很简单的
技术博客:http://hi.baidu.com/coolrainbow/blog
4楼2011-06-15 12:10:21
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

ll20100996

禁虫 (知名作家)


dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-15 23:10:44
本帖内容被屏蔽

5楼2011-06-15 12:13:05
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

smithjohn

金虫 (正式写手)

【答案】应助回帖


微尘、梦想(金币+1): 鼓励交流! 2011-06-20 19:47:11
ll20100996(金币+1): 2011-06-22 08:54:10
matlab的优势在于矩阵,不在循环。
6楼2011-06-20 17:39:43
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

superstat54

木虫 (小有名气)

【答案】应助回帖

ll20100996(金币+2): 我用fortran编了,快一倍。呵呵 2011-06-22 08:56:39
高效的Matlab程序,尽量避免使用循环语句,更多的采用向量化的编程方式,即使用矩阵。修改如下:
clear;
tic
N=10;tn=4E4;a=3.905E-10;b=3.905E-10;c=4.2E-10;K0=0; n3=4-1;
            for n1=1:tn
                n2=1:n1-1;
                K01=2*a*b*c*(3*n3^2*c^2./(n1^2*a^2+n2.^2*b^2+n3^2*c^2)-1)./((n1^2*a^2+n2.^2*b^2+n3^2*c^2).^1.5*2*pi*8.85E-12);
                K0 = K0 - sum(K01);
                K0=K0-a*b*c*(3*n3^2*c^2/(n1^2*a^2+n1^2*b^2+n3^2*c^2)-1)/((n1^2*a^2+n1^2*b^2+n3^2*c^2).^1.5*2*pi*8.85E-12);
            end
            n1=1:tn;
            K02=a*b*c*(3*n3^2*c^2./(n1.^2*a^2+n3^2*c^2)-1)./((n1.^2*a^2+n3^2*c^2).^1.5*2*pi*8.85E-12);%n2=0 Or b=0
            K0 = K0 - sum(K02);
            K0=K0-a*b*c*(3*n3^2*c^2/(n3^2*c^2)-1)/((n3^2*c^2)^1.5*8*pi*8.85E-12)
toc;
对比:
tn=4E3,
原程序:
时间:2.550174 seconds,K0=-6.8388e+006;
修改后,时间:2.190174 seconds,K0=-6.8388e+006;

tn=4E4,
原程序,运行N久,没有等到结果就放弃了
修改后,时间155 s, K0 = -6.85e+005
tn=4E5时,你自己尝试一下吧,运行时间估计随tn成平方关系增长。
7楼2011-06-21 23:55:42
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

woshilsh

荣誉版主 (职业作家)

优秀版主


dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-23 11:00:42
弄过C的就喜欢用循环

你要琢磨用矩阵处理,避免循环,就可以加快速度

否则就直接用C写
[center][url=http://www.91cool.net/][img]http://id.91cool.net/sign/?name=小木虫印&say=各位版主辛苦了![/img][/url][/center]
8楼2011-06-22 10:28:13
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

yy3780

木虫 (著名写手)


dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-23 11:00:50
引用回帖:
Originally posted by woshilsh at 2011-06-22 10:28:13:
弄过C的就喜欢用循环

你要琢磨用矩阵处理,避免循环,就可以加快速度

否则就直接用C写

赞同
9楼2011-06-23 09:39:58
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

leehom8851

银虫 (小有名气)

循环相对于矩阵运算满太多,试试直接矩阵运算~~
骄傲的走自己的路~
10楼2013-04-01 08:13:50
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ll20100996 的主题更新
信息提示
请填处理意见