数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal矩阵运算效率测试
[打印本页]
作者:
forcal
时间:
2011-8-1 08:00
标题:
极限测试之Matlab与Forcal矩阵运算效率测试
1、小矩阵大运算量测试
6 J1 _$ D, j6 C$ V& i3 a; G
$ M( ]8 M. N) Z* X) `
Matlab 2009a代码及结果:
clear all
) V$ I! U* W3 h# E# p! Y
tic
! X6 i: N! s. h# j
k = zeros(5,5); % //生成5×5全0矩阵
5 x( e$ q8 ]0 W% U0 j
% 循环计算以下程序段100000次:
7 S d: |+ b# _$ R% h( V
for m = 1:100000
( G2 f! x- b+ ^( B D& t1 ^- ^9 M" T
a = rand(5,7);
9 l0 s! V6 B/ y5 V2 i
b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
3 u# H0 W' Y) j2 O
k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);
! S9 t# \8 f* I' Q8 Z
end
$ K2 y8 ] N& w/ j7 u- Q4 a
k
9 {; M9 u1 H7 m0 s
toc
F% d7 Y2 h0 X+ \- f. X+ _, x; p
; O& c$ e/ D. D: H1 B; [( N
k =
2 I; T& g0 z4 G4 v# I, w
- o9 k# ^) i2 W8 T5 X" {
1.0e+005 *
& {' _# Z; k- H9 W
3 t! Q' q: f, m: R
2.7525 2.7559 2.7481 2.7525 2.7511
" r/ H# a7 W/ Q2 o
2.7527 2.7535 2.7430 2.7545 2.7484
# i, r' F- z5 |- f4 K2 @# h' P9 u
2.7493 2.7553 2.7440 2.7513 2.7485
0 u1 \' `2 u' d+ e, G
2.7481 2.7506 2.7425 2.7457 2.7460
E, e0 t4 h! n# p
2.7506 2.7525 2.7429 2.7488 2.7451
! K9 b+ Y/ a6 d* k+ z7 U
# `& J$ f% a' a; N
Elapsed time is 1.979852 seconds.
复制代码
===================
' D+ Z6 j0 f+ @& q: T
: e- V' V, d9 d) ^! x
Forcal(OpenFC演示)代码:
!using["math","sys"];
1 R3 L4 [7 [8 s1 a# r1 ^+ a* p& Q% A
(:t0,k,i,a,b)=
) R, ]! `8 c2 w3 g
{
5 m+ W6 W9 V( w4 a' M
t0=clock(),
7 X( J2 W3 l0 g" g! {
k=zeros[5,5],
+ y0 [0 K4 b4 I; u
i=0,(i<100000).while{
+ ~# P2 P3 Q; a% I- q3 n
oo{
9 a3 v! M2 o; _/ f# I4 h% U. \
a=rand[5,7], b=rand[7,5],
# q# }$ }' Z. }6 ^) m& X9 q/ r7 H
k.=k+a*b+a(0,4:1,5)*b(1,5:0,4)-a(neg:6)*b(3:neg)
" B: G' Y- M+ N3 n% c3 k, @0 j* `
},
+ W: z8 y+ X9 | j- K
i++
- ~- ]% a/ {* J" w- s2 D+ }
},
1 V8 p( s J( W/ I- H% `9 T
k.outm().delete(),
1 ?( M! ?+ d3 F% B) }
[clock()-t0]/1000
! o$ f3 x% V- `& [9 Z7 Q% j
};
复制代码
结果:
274978 274892 274913 274949 274953
' R( L' J3 |" p$ D9 u. h4 ^
274994 275050 275001 275037 274892
5 b6 \4 O) V0 G. d1 @+ p9 e
275001 275063 275019 274963 274971
2 b* R! O/ x# x0 N M) P- n5 o
274945 274999 275017 274983 274982
6 C5 @' g0 l3 E* q" `
275009 274984 274971 274955 274923
|6 k. o; N% Y! C# i
4 N, e& m. ?2 _+ B
3.516 秒
复制代码
此类运算Forcal的效率有Matlab的一半稍多一点。
1 K( p. u+ [, q [) b4 e2 s2 o
3 ^0 L/ I1 D! t
==================
. @5 ^" s( I" C2 J. z& J/ _0 l6 s
==================
6 y! `) M: P4 O# o
/ ]) b# T" u1 r$ B
2、大型矩阵乘
4 D8 I( J- F" C1 L3 d5 I
; \% g1 X# @% Q# ~
Matlab 2009a代码及结果:
clear all
4 s& ]2 q, c: o5 k
a = rand(1000,1000);
: k1 U* `7 \2 U! h; i. E
b = rand(1000,1000);
5 t- G! ~" w! n; I" d% k
tic
% H/ F/ ], }5 u( M# Q6 \
k = a * b;
) G; m8 W4 W) E3 o$ r* v
k(1:3, 5:9)
7 O' m' P) f8 v- B1 v1 F" @
toc
0 ^; n0 v- E! U/ A. K' O+ N3 `5 M
9 `% x6 o$ G K! J1 A# Y& {
ans =
/ v* G, Q$ x; {9 s: u7 ]0 [* |
8 s, j' C ]' h1 R$ T- Q
246.1003 244.3288 252.9674 258.1527 243.9345
& K8 B9 J. Z* X. `7 \/ z2 x
246.7404 236.1487 249.7140 251.3887 246.0294
$ {& `6 h8 R- p0 S
249.4205 240.5515 252.5847 257.0065 249.7137
1 _/ i% w& e% R { q! z
& Q& m/ ?2 b% d+ \; o
Elapsed time is 0.310022 seconds.
复制代码
===================
1 W3 W+ e( v; V( W
# _7 s( y. K1 \
Forcal(OpenFC演示)代码:
!using["math","sys"];
8 F! @5 u8 `. K$ ?9 g, g% i. u
main(:a,b,k,t0)=
$ f% m3 |6 O1 v" u: I7 ?
oo{
5 ~* Z2 w7 g0 B* d7 H8 S
a=rand[1000,1000], b=rand[1000,1000],
) C1 O& L w" h+ }% h' U& L+ y# U
t0=clock(),
! ]+ V( B" a; A8 l
k=a*b, //矩阵乘
" M5 b9 l8 F( l
k[1,3:5,9].outm()
1 E4 F9 L# m+ E% t- \' [- V6 h
},
! T4 D$ A" R. l( N
[clock()-t0]/1000;
复制代码
结果:
247.009 245.731 242.454 247.412 244.482
- M) H7 `3 e) s k5 U: k$ d: U
258.268 255.417 253.738 255.159 253.042
$ C9 A! l6 j5 S7 C- K( U' K
258.088 252.324 248.927 252.392 247.731
- {) }4 U, A# G, }0 U5 T
& ]! u1 w) s7 M+ w9 t3 U" h; f0 J
2.25
复制代码
此类运算Matlab的速度约是Forcal的7倍多。
+ d) H( ~& A" |' p+ A3 s" B
9 Y+ q1 ^& B+ N. i- z
==================
1 K% S, o" R( O: ]+ X
==================
2 z7 J6 q2 ~6 U" I- m! W
# p0 e( i' C* Z* c; |. ? I
矩阵运算是Matlab的优势。不过,个人认为,矩阵计算速度取决于算法,矩阵算法只是众多数值算法的一种,不属于语言的基本特性。然而,拥有高效的矩阵算法是matlab的骄傲,就像优化算法是1stopt的骄傲一样。
. R9 x' G7 A+ r s8 C8 X( E
: C* ? S6 ]. H2 ]' @/ O
Forcal的矩阵乘是用普通的矩阵乘经过改进而成的,效率自然低,但所有的数值算法包括矩阵运算是由Forcal扩展库实现的,只要有高效的算法,Forcal便可大展身手,为所有这些算法提高更高效的服务。
: b& Q: d- L6 u& a9 H: {
: s. H0 i: \: d6 ^
除了矩阵运算,Matlab还有许多非语言特性的优势,例如函数图形功能(不包括其GUI,Forcal是嵌入式脚本,C/C++、Delphi等的GUI就是Forcal的GUI)、符号计算功能、控制仿真、金融建模等等。这些实用方便的算法模块使matlab获得了广大用户的青睐。
作者:
chairong
时间:
2011-8-1 10:38
这个不错啊 嘻嘻。。。
% T6 Z) r' h8 `, s
1 b' \9 G( | a9 D3 P# }
作者:
发现者2011
时间:
2011-8-1 14:04
henhao ............
! T& V% x8 W: ]! |' t
作者:
碧天云淡
时间:
2011-8-1 16:42
matlab的优势很明显的
作者:
alair005
时间:
2012-2-7 13:01
支持一,下楼主辛苦了
45578073860093
作者:
zcBCuikgh
时间:
2012-8-11 21:27
济南夜场招聘,济南翰林商务会所招聘夜场模特佳丽13156404415,400每台,小费日结无押金。qlktv.net
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5