数学建模社区-数学中国

标题: 极限测试之Matlab与Forcal矩阵运算效率测试 [打印本页]

作者: forcal    时间: 2011-8-1 08:00
标题: 极限测试之Matlab与Forcal矩阵运算效率测试
1、小矩阵大运算量测试* c' s' m0 p+ B) T) A, R
8 j$ K: x! o  k0 I  u
Matlab 2009a代码及结果:
  1. clear all$ @% @" f' i) u  x) a- W9 G! t
  2. tic
    4 E; P, Z  _8 @: ~5 f
  3. k = zeros(5,5); % //生成5×5全0矩阵. o" U, V6 ~4 y; P+ c; v  W
  4. % 循环计算以下程序段100000次:
    " F% a& u6 I0 f, c" Q7 f  o3 l
  5. for m = 1:100000; o+ N# f$ I' j7 s7 u' b; A
  6.     a = rand(5,7);
    ) s* S0 u$ H( ]9 V. Z! R
  7.     b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化- V/ F; Y0 r# K6 |- L- ?/ r; A
  8.     k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);
    ! b, t/ Q8 L' \7 C+ v
  9. end
    , L, V2 S0 i5 O( ]' \9 }
  10. k
    ; z3 Y' [+ ]2 {. f
  11. toc
      g" q' F: N2 l
  12. ; X9 {" n1 q) b0 W
  13. k =" Y* @. p/ l, ^$ @) b
  14. $ t! Z1 D5 Z$ r3 Y, s, g3 b
  15.   1.0e+005 *  Q# q) F. q! ]6 I
  16. + G' ?2 C, w! K8 o
  17.     2.7525    2.7559    2.7481    2.7525    2.75114 ^: @6 W% S2 m' l
  18.     2.7527    2.7535    2.7430    2.7545    2.7484# L$ t1 P8 }  E4 U% M
  19.     2.7493    2.7553    2.7440    2.7513    2.7485  N, A( I9 y% j4 D
  20.     2.7481    2.7506    2.7425    2.7457    2.7460
    : x" j8 s, i: v( P7 _
  21.     2.7506    2.7525    2.7429    2.7488    2.74511 M& G! a- v& ^; j
  22. ; t0 B) q3 P3 E' L4 n& I2 c# z
  23. Elapsed time is 1.979852 seconds.
复制代码
===================
* U1 d7 o& ~* \1 x6 r6 F, n# x/ W1 Q/ y3 Q
Forcal(OpenFC演示)代码:
  1. !using["math","sys"];
    9 L( p( q+ Q2 ], U7 R0 A" O) r9 Z; Y
  2. (:t0,k,i,a,b)=
    2 ?9 Q6 k$ r# ^2 j5 b6 D
  3. {* u6 h5 z/ F3 Y' N2 Y9 G
  4.   t0=clock(),
    7 L  g. b$ U4 m# \) z0 \8 \
  5.   k=zeros[5,5],
    8 n* t) ~8 L: F$ u3 R
  6.   i=0,(i<100000).while{
    5 u8 @1 Q9 ?* Y0 g7 i8 S
  7.     oo{
    8 j- t% t$ c; j* q
  8.       a=rand[5,7], b=rand[7,5],! T# h- z+ m& S/ A! i2 R" o, p
  9.       k.=k+a*b+a(0,4:1,5)*b(1,5:0,4)-a(neg:6)*b(3:neg)0 K- Z( k0 ^5 ?9 ?: |5 A
  10.     },
    3 E: y) I- F# I+ |) q1 X
  11.     i++
    ! a0 B, i! p7 _, g" C/ O6 s
  12.   },( P3 ]0 O5 x- S+ c( l3 j
  13.   k.outm().delete(),6 a6 \8 Y  y& T
  14.   [clock()-t0]/10005 j: X& r4 D/ |1 J+ b9 J
  15. };
复制代码
结果:
  1.          274978         274892         274913         274949         274953
    6 c) A* f  i- a8 R: E9 x
  2.          274994         275050         275001         275037         274892
    0 M* }3 z# L$ }; J. i
  3.          275001         275063         275019         274963         274971! [6 _' Z' Y" e: x+ W7 T" Z: i7 j" n
  4.          274945         274999         275017         274983         274982
    " B4 x, f/ n6 ]0 @7 `" w, ~: Y
  5.          275009         274984         274971         274955         274923
    3 k2 r, R. ^. ]7 m; s7 E7 t, L
  6. 4 V. U9 a% z7 Z7 r# l" ~- r) V, J
  7. 3.516  秒
复制代码
此类运算Forcal的效率有Matlab的一半稍多一点。
* r  M) B* x+ S: F( x+ C! h! E3 y, C" Q# B
==================
( L/ t" Y' x, ^! [/ r% b. W2 z==================7 Q4 R$ h! E# `( ~" }
2 D: {8 H, R, Q; O8 k7 z
2、大型矩阵乘
5 {5 o' t' p  h, i" T
- Q% A' @. v7 j1 e! b! sMatlab 2009a代码及结果:
  1. clear all! L! q. {3 A5 C1 K! L8 Z6 j
  2. a = rand(1000,1000);0 m/ X* _' G1 l. q8 W+ g6 w! \
  3. b = rand(1000,1000);
    : s: X+ Q" m4 h, |. E: ?& i* `$ l
  4. tic7 o, G  N1 k7 V% m$ n
  5. k = a * b;
    + h7 D, Q( ]( `
  6. k(1:3, 5:9)
    9 e1 s4 L5 m7 |5 V) ^! Q6 U
  7. toc- y2 y7 N% k3 U. ]  M+ @7 E; F# l0 x

  8. * k' ~7 R: o- r) U0 K5 y3 t
  9. ans =
    5 Z7 w- j1 Q* L  s: y9 j

  10. ; m  e# z; X0 r7 D' \
  11.   246.1003  244.3288  252.9674  258.1527  243.9345
    / V" K3 {* k4 ]' E7 f7 T' ~
  12.   246.7404  236.1487  249.7140  251.3887  246.0294
    0 ~; o! v3 l1 d3 {' a
  13.   249.4205  240.5515  252.5847  257.0065  249.71372 \- s, w6 I& Q. V

  14. 2 J6 t) w7 L0 C" _* c) Q
  15. Elapsed time is 0.310022 seconds.
复制代码
===================* l, `/ A& W+ T: z; n7 B0 E& E

) v4 R8 U4 n5 PForcal(OpenFC演示)代码:
  1. !using["math","sys"];0 {- Y6 m2 T( H: ^
  2. main(:a,b,k,t0)=# K$ o, H. s8 ~+ s8 c# B
  3. oo{/ s1 ^: c: J! M7 [$ b9 h
  4.   a=rand[1000,1000], b=rand[1000,1000],
    ) V  t( E9 T2 E6 N/ Y
  5.   t0=clock(),, g6 v' y' s" d9 r7 Z- c
  6.   k=a*b,  //矩阵乘, X! h$ R. K- S* n# C
  7.   k[1,3:5,9].outm()
    3 `9 N2 D8 L+ V* Q- h9 y
  8. },0 F" ]# Z; M! q6 g( m0 U
  9. [clock()-t0]/1000;
复制代码
结果:
  1.         247.009        245.731        242.454        247.412        244.482$ U  p& N" k% R6 }+ l$ N5 l2 c* }) a
  2.         258.268        255.417        253.738        255.159        253.042
    * t: m4 q2 z8 C( o: P. H( V
  3.         258.088        252.324        248.927        252.392        247.731
    + F9 R6 k4 _+ d
  4. 2 H* [! _' s% K
  5. 2.25
复制代码
此类运算Matlab的速度约是Forcal的7倍多。0 [; {2 w) ]: O% ^7 |" s
2 V  r  U- s6 ~% {
==================. o' G8 j& u5 {& t* t
==================
1 ]; [3 n( O# J. f/ F' S' t
0 X% x- d0 F9 I& v0 b0 \, W, K矩阵运算是Matlab的优势。不过,个人认为,矩阵计算速度取决于算法,矩阵算法只是众多数值算法的一种,不属于语言的基本特性。然而,拥有高效的矩阵算法是matlab的骄傲,就像优化算法是1stopt的骄傲一样。1 n$ ]9 A/ x2 i6 [5 i9 H
2 g7 \) p% o, x" K) `
Forcal的矩阵乘是用普通的矩阵乘经过改进而成的,效率自然低,但所有的数值算法包括矩阵运算是由Forcal扩展库实现的,只要有高效的算法,Forcal便可大展身手,为所有这些算法提高更高效的服务。' O; W+ l' b7 `  P' C

. t7 q& P6 ~2 V+ T9 T除了矩阵运算,Matlab还有许多非语言特性的优势,例如函数图形功能(不包括其GUI,Forcal是嵌入式脚本,C/C++、Delphi等的GUI就是Forcal的GUI)、符号计算功能、控制仿真、金融建模等等。这些实用方便的算法模块使matlab获得了广大用户的青睐。
作者: chairong    时间: 2011-8-1 10:38
这个不错啊 嘻嘻。。。
6 M9 Y  v' c2 C4 t9 ]- n) t+ c. s, y% [+ K, R- N# Z

作者: 发现者2011    时间: 2011-8-1 14:04
henhao  ............
4 c# [0 E  D  K7 @
作者: 碧天云淡    时间: 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