数学建模社区-数学中国

标题: 极限测试之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代码及结果:
  1. clear all
    ) V$ I! U* W3 h# E# p! Y
  2. tic! X6 i: N! s. h# j
  3. k = zeros(5,5); % //生成5×5全0矩阵5 x( e$ q8 ]0 W% U0 j
  4. % 循环计算以下程序段100000次:7 S  d: |+ b# _$ R% h( V
  5. for m = 1:100000
    ( G2 f! x- b+ ^( B  D& t1 ^- ^9 M" T
  6.     a = rand(5,7);
    9 l0 s! V6 B/ y5 V2 i
  7.     b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化3 u# H0 W' Y) j2 O
  8.     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
  9. end$ K2 y8 ]  N& w/ j7 u- Q4 a
  10. k
    9 {; M9 u1 H7 m0 s
  11. toc
      F% d7 Y2 h0 X+ \- f. X+ _, x; p

  12. ; O& c$ e/ D. D: H1 B; [( N
  13. k =
    2 I; T& g0 z4 G4 v# I, w
  14. - o9 k# ^) i2 W8 T5 X" {
  15.   1.0e+005 *& {' _# Z; k- H9 W
  16. 3 t! Q' q: f, m: R
  17.     2.7525    2.7559    2.7481    2.7525    2.7511
    " r/ H# a7 W/ Q2 o
  18.     2.7527    2.7535    2.7430    2.7545    2.7484# i, r' F- z5 |- f4 K2 @# h' P9 u
  19.     2.7493    2.7553    2.7440    2.7513    2.7485
    0 u1 \' `2 u' d+ e, G
  20.     2.7481    2.7506    2.7425    2.7457    2.7460  E, e0 t4 h! n# p
  21.     2.7506    2.7525    2.7429    2.7488    2.7451! K9 b+ Y/ a6 d* k+ z7 U

  22. # `& J$ f% a' a; N
  23. Elapsed time is 1.979852 seconds.
复制代码
===================' D+ Z6 j0 f+ @& q: T
: e- V' V, d9 d) ^! x
Forcal(OpenFC演示)代码:
  1. !using["math","sys"];1 R3 L4 [7 [8 s1 a# r1 ^+ a* p& Q% A
  2. (:t0,k,i,a,b)=) R, ]! `8 c2 w3 g
  3. {5 m+ W6 W9 V( w4 a' M
  4.   t0=clock(),
    7 X( J2 W3 l0 g" g! {
  5.   k=zeros[5,5],+ y0 [0 K4 b4 I; u
  6.   i=0,(i<100000).while{
    + ~# P2 P3 Q; a% I- q3 n
  7.     oo{9 a3 v! M2 o; _/ f# I4 h% U. \
  8.       a=rand[5,7], b=rand[7,5],
    # q# }$ }' Z. }6 ^) m& X9 q/ r7 H
  9.       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* `
  10.     },
    + W: z8 y+ X9 |  j- K
  11.     i++
    - ~- ]% a/ {* J" w- s2 D+ }
  12.   },1 V8 p( s  J( W/ I- H% `9 T
  13.   k.outm().delete(),1 ?( M! ?+ d3 F% B) }
  14.   [clock()-t0]/1000
    ! o$ f3 x% V- `& [9 Z7 Q% j
  15. };
复制代码
结果:
  1.          274978         274892         274913         274949         274953
    ' R( L' J3 |" p$ D9 u. h4 ^
  2.          274994         275050         275001         275037         2748925 b6 \4 O) V0 G. d1 @+ p9 e
  3.          275001         275063         275019         274963         2749712 b* R! O/ x# x0 N  M) P- n5 o
  4.          274945         274999         275017         274983         2749826 C5 @' g0 l3 E* q" `
  5.          275009         274984         274971         274955         274923
      |6 k. o; N% Y! C# i
  6. 4 N, e& m. ?2 _+ B
  7. 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$ B2、大型矩阵乘4 D8 I( J- F" C1 L3 d5 I

; \% g1 X# @% Q# ~Matlab 2009a代码及结果:
  1. clear all
    4 s& ]2 q, c: o5 k
  2. a = rand(1000,1000);
    : k1 U* `7 \2 U! h; i. E
  3. b = rand(1000,1000);5 t- G! ~" w! n; I" d% k
  4. tic% H/ F/ ], }5 u( M# Q6 \
  5. k = a * b;
    ) G; m8 W4 W) E3 o$ r* v
  6. k(1:3, 5:9)7 O' m' P) f8 v- B1 v1 F" @
  7. toc0 ^; n0 v- E! U/ A. K' O+ N3 `5 M

  8. 9 `% x6 o$ G  K! J1 A# Y& {
  9. ans =
    / v* G, Q$ x; {9 s: u7 ]0 [* |

  10. 8 s, j' C  ]' h1 R$ T- Q
  11.   246.1003  244.3288  252.9674  258.1527  243.9345& K8 B9 J. Z* X. `7 \/ z2 x
  12.   246.7404  236.1487  249.7140  251.3887  246.0294
    $ {& `6 h8 R- p0 S
  13.   249.4205  240.5515  252.5847  257.0065  249.71371 _/ i% w& e% R  {  q! z
  14. & Q& m/ ?2 b% d+ \; o
  15. Elapsed time is 0.310022 seconds.
复制代码
===================1 W3 W+ e( v; V( W

# _7 s( y. K1 \Forcal(OpenFC演示)代码:
  1. !using["math","sys"];8 F! @5 u8 `. K$ ?9 g, g% i. u
  2. main(:a,b,k,t0)=
    $ f% m3 |6 O1 v" u: I7 ?
  3. oo{5 ~* Z2 w7 g0 B* d7 H8 S
  4.   a=rand[1000,1000], b=rand[1000,1000],
    ) C1 O& L  w" h+ }% h' U& L+ y# U
  5.   t0=clock(),! ]+ V( B" a; A8 l
  6.   k=a*b,  //矩阵乘
    " M5 b9 l8 F( l
  7.   k[1,3:5,9].outm()1 E4 F9 L# m+ E% t- \' [- V6 h
  8. },
    ! T4 D$ A" R. l( N
  9. [clock()-t0]/1000;
复制代码
结果:
  1.         247.009        245.731        242.454        247.412        244.482- M) H7 `3 e) s  k5 U: k$ d: U
  2.         258.268        255.417        253.738        255.159        253.042$ C9 A! l6 j5 S7 C- K( U' K
  3.         258.088        252.324        248.927        252.392        247.731- {) }4 U, A# G, }0 U5 T
  4. & ]! u1 w) s7 M+ w9 t3 U" h; f0 J
  5. 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 ]' @/ OForcal的矩阵乘是用普通的矩阵乘经过改进而成的,效率自然低,但所有的数值算法包括矩阵运算是由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