数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal矩阵运算效率测试
[打印本页]
作者:
forcal
时间:
2011-8-1 08:00
标题:
极限测试之Matlab与Forcal矩阵运算效率测试
1、小矩阵大运算量测试
! I- B# x- E- `6 i/ G3 l2 z; r
) w6 x& {, q/ \+ y B, w W
Matlab 2009a代码及结果:
clear all
8 _. o6 R# T" }) _* V. l; c, d
tic
* l& a9 a1 J9 g& `4 O# a' r
k = zeros(5,5); % //生成5×5全0矩阵
( \7 ?% |* ?- J: L/ D2 M }! Q
% 循环计算以下程序段100000次:
, P9 ?3 g( K0 e7 P
for m = 1:100000
$ z) K; x" D+ S# g) M1 Y
a = rand(5,7);
# B# e) o% b( J% K4 J! l
b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
6 E1 ?9 |0 I0 I3 f' X7 i% |
k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);
& G2 z8 _9 K( j4 g0 k
end
; R+ Q9 x0 Z+ D! H- E2 [8 i, Q
k
* o: W% ` j6 L0 [
toc
# c/ z. u5 Z( ]: [
( ?$ l$ `! S0 P3 _1 Y* k7 \# P
k =
9 b) g( N. @! a
0 j' ~* S; m1 `' G+ V
1.0e+005 *
t! ?- _; V8 _. Z- o) Z
! Z9 M+ _2 I5 h/ r1 a) d
2.7525 2.7559 2.7481 2.7525 2.7511
6 W3 K3 r: U9 u6 l
2.7527 2.7535 2.7430 2.7545 2.7484
& c3 p/ }; k M, A
2.7493 2.7553 2.7440 2.7513 2.7485
8 b% A' l1 d4 S, j% ]8 f3 ~
2.7481 2.7506 2.7425 2.7457 2.7460
% u3 _5 W7 M( n9 o
2.7506 2.7525 2.7429 2.7488 2.7451
& t* P; n. k$ _3 {
& M. ?! G( d+ w4 _. r; B
Elapsed time is 1.979852 seconds.
复制代码
===================
( l% }+ X$ Q) ?" L0 f
% J3 f9 k, A/ F& e7 t) ~
Forcal(OpenFC演示)代码:
!using["math","sys"];
) R1 L9 I: Q7 N' s5 P% Q! j( P. @
(:t0,k,i,a,b)=
& C9 ]# n, b2 I/ ]
{
- _3 L0 J% u7 A; [/ U6 C
t0=clock(),
3 c# u0 y9 P8 k1 j6 g) ?2 x+ K
k=zeros[5,5],
: l! W) W2 X0 A2 y
i=0,(i<100000).while{
7 `- L4 Y8 P" ~; i9 ]2 ]$ ?! z
oo{
0 p1 w0 ~% g1 _' ~$ W# S( j2 v
a=rand[5,7], b=rand[7,5],
2 N! @( k6 K( \% `# Q" q
k.=k+a*b+a(0,4:1,5)*b(1,5:0,4)-a(neg:6)*b(3:neg)
5 B Y K) c T( e6 G
},
5 X' h0 ]( N, V$ U/ U* a
i++
; z1 ^' `4 j: y! `2 c
},
4 O& T! g# \% O8 u
k.outm().delete(),
4 [. V& ]( F, W6 M
[clock()-t0]/1000
9 V0 E1 {( J8 ~. c" v
};
复制代码
结果:
274978 274892 274913 274949 274953
0 v$ T- {0 k' w) H9 s8 ^& x6 O7 ] H
274994 275050 275001 275037 274892
2 J! C0 ?, w9 L
275001 275063 275019 274963 274971
Y! @( M J; l: j7 ?. s9 r2 g. o
274945 274999 275017 274983 274982
. ~0 [* G4 J1 e( U, J) j
275009 274984 274971 274955 274923
8 m4 n# E/ C' c2 |, `& O
$ W5 Z3 n) N9 }! V0 o1 w9 I+ f
3.516 秒
复制代码
此类运算Forcal的效率有Matlab的一半稍多一点。
M% M$ S* n* F$ C% Q) J K. x. L
8 Z& m9 g8 {7 m- u! K
==================
Y) u1 u9 d) {; g9 Y
==================
) {$ l' t9 R. h6 W% F
; _0 T6 `- K/ H* Q0 n8 J& X
2、大型矩阵乘
5 W" @: B+ ~$ x0 ]# c! ^4 E( D$ w( h
2 w# u8 a. U/ D3 @( K! N- h
Matlab 2009a代码及结果:
clear all
1 _3 ?0 L. E# G2 ^! h8 `, K( R1 B
a = rand(1000,1000);
2 I4 U% \- a% D
b = rand(1000,1000);
, K7 i/ w/ O/ B# _! W, w
tic
( R5 S8 [9 q8 z, ?% h9 p* J
k = a * b;
( F/ g/ U* @8 w! m# r0 ~: J) m
k(1:3, 5:9)
4 U2 M* s, C9 B+ R2 W# j. J
toc
6 f H8 ]6 o! l% }2 d
9 ?9 }8 b. _3 q, }
ans =
* |! T1 q! I! ~
R$ n, @2 P" r1 y* L3 Y1 M
246.1003 244.3288 252.9674 258.1527 243.9345
2 r& A; L1 Y2 D
246.7404 236.1487 249.7140 251.3887 246.0294
( N7 \" |5 Q) P3 u6 J7 i+ i
249.4205 240.5515 252.5847 257.0065 249.7137
5 C/ c% a+ V: U5 g4 D" |
( w$ J, H& ~1 @5 Z7 t
Elapsed time is 0.310022 seconds.
复制代码
===================
, f! o" S7 F8 Q
- L$ _7 p ~7 G f: [% x, ~7 D
Forcal(OpenFC演示)代码:
!using["math","sys"];
# w* U$ S4 c% u% Z. n h: m5 `" ]: S: m- r
main(:a,b,k,t0)=
: X! Z; X$ N" G; M: R/ O
oo{
: A% J% V* k5 R
a=rand[1000,1000], b=rand[1000,1000],
0 j# Q0 T# g% G4 a
t0=clock(),
7 c5 k# l8 d* H8 E' z. g8 }
k=a*b, //矩阵乘
0 |7 g( Q, ]5 y) M4 V" i1 b1 {* r2 I
k[1,3:5,9].outm()
5 F' T x+ u' P& q, i& l5 i( u
},
5 Q9 } ~% _/ k$ x* @, N
[clock()-t0]/1000;
复制代码
结果:
247.009 245.731 242.454 247.412 244.482
. N1 J R$ i: t1 u& S1 T) J6 r
258.268 255.417 253.738 255.159 253.042
! `9 V1 d R! C( l
258.088 252.324 248.927 252.392 247.731
# V7 n, X! Y0 j( B
" @5 U; r [ u6 Q
2.25
复制代码
此类运算Matlab的速度约是Forcal的7倍多。
' V- q; Q7 E) D: n( D0 H1 c
- k4 H ?2 x. F! x3 g
==================
/ a7 [0 g$ Q# U' ]
==================
' C$ W( I2 K* G& {/ f, R/ S- f! [
B& V! `! b8 J$ v" l2 p: x) h
矩阵运算是Matlab的优势。不过,个人认为,矩阵计算速度取决于算法,矩阵算法只是众多数值算法的一种,不属于语言的基本特性。然而,拥有高效的矩阵算法是matlab的骄傲,就像优化算法是1stopt的骄傲一样。
& u$ t% W y' N5 H9 O. L1 p
0 a2 F: P+ d( Z0 E& M; S9 F
Forcal的矩阵乘是用普通的矩阵乘经过改进而成的,效率自然低,但所有的数值算法包括矩阵运算是由Forcal扩展库实现的,只要有高效的算法,Forcal便可大展身手,为所有这些算法提高更高效的服务。
" v+ T0 X& S" [, j! |, y
" E; l4 s3 E! C# A9 l- \) _
除了矩阵运算,Matlab还有许多非语言特性的优势,例如函数图形功能(不包括其GUI,Forcal是嵌入式脚本,C/C++、Delphi等的GUI就是Forcal的GUI)、符号计算功能、控制仿真、金融建模等等。这些实用方便的算法模块使matlab获得了广大用户的青睐。
作者:
chairong
时间:
2011-8-1 10:38
这个不错啊 嘻嘻。。。
: \/ j4 {2 K0 W$ _& ~0 D) J
6 d) y! j$ C5 p9 _2 \: S
作者:
发现者2011
时间:
2011-8-1 14:04
henhao ............
- X" Y1 Y) M& N& y9 l3 B
作者:
碧天云淡
时间:
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