QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 9232|回复: 0
打印 上一主题 下一主题

极限测试之Matlab与Forcal矩阵运算效率测试

[复制链接]
字体大小: 正常 放大
forcal 实名认证       

45

主题

3

听众

282

积分

升级  91%

  • TA的每日心情
    难过
    2012-8-27 18:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2011-8-1 08:00 |显示全部楼层 |倒序浏览
    |招呼Ta 关注Ta
    1、小矩阵大运算量测试
      U3 d/ |* U( b8 h; ^7 S0 ^) ^4 b# s& m% X  e/ W% H. U
    Matlab 2009a代码及结果:
    1. clear all$ c' r1 p) p: c% t' t8 m; y5 c! }
    2. tic
      + ]\" \0 e& |2 ^/ X- |1 x' ^/ z
    3. k = zeros(5,5); % //生成5×5全0矩阵& |3 H# _9 _+ R1 I% ?9 H
    4. % 循环计算以下程序段100000次:- p0 e; Z: L% \1 I* R4 Q
    5. for m = 1:100000* n& u4 I' }. j: ]
    6.     a = rand(5,7);
      3 G. K+ _9 A( U# h1 U
    7.     b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
      5 D* g+ }. {\" N9 }7 ?
    8.     k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);+ T\" w5 U+ Q0 L1 x5 h; Y' P
    9. end
      ! o: a+ N# a! ?
    10. k, V& u( x  v  D6 j2 w
    11. toc7 J$ Y5 w2 p# T1 c! E\" v

    12. 2 u- _. I* R1 x( s7 P
    13. k =3 \2 X) y% a3 E) B$ t
    14. ! J8 g2 A0 @4 g* `5 R! ~
    15.   1.0e+005 *
      1 h& J3 |% b. @( @, H
    16. * W1 A0 d% |4 l* t: r9 V
    17.     2.7525    2.7559    2.7481    2.7525    2.7511$ D& j3 a4 O\" Y2 i
    18.     2.7527    2.7535    2.7430    2.7545    2.7484* l0 Q0 [% B. W  D- }$ t7 c  N
    19.     2.7493    2.7553    2.7440    2.7513    2.7485/ G- w8 w\" j# J2 x
    20.     2.7481    2.7506    2.7425    2.7457    2.7460
      . O8 b\" ?8 X, q' [: V& ?
    21.     2.7506    2.7525    2.7429    2.7488    2.7451
      9 I( d7 t& H\" V6 k, e1 S, d
    22. 1 T; e& z/ o- B6 z
    23. Elapsed time is 1.979852 seconds.
    复制代码
    ===================7 r* M7 |9 m' h% |* f. h; w
    2 {& B3 ]7 t8 H; A9 d9 X
    Forcal(OpenFC演示)代码:
    1. !using["math","sys"];
    2. 6 ^+ ?4 S\\" l( P  F8 V5 ?
    3. (:t0,k,i,a,b)=\\" x: ?6 d5 n& u3 B) H0 P% \# p1 I
    4. {: Q# n% c! L! K4 O
    5.   t0=clock(),3 [$ X' q5 K3 Y( i. F+ V
    6.   k=zeros[5,5],  v: H/ v8 |+ S# @5 D7 T
    7.   i=0,(i<100000).while{
    8. # b, }! F, N; k$ R/ O
    9.     oo{2 e8 ^3 V; V$ M\\" z& U/ s
    10.       a=rand[5,7], b=rand[7,5],1 }% w$ @7 F+ a0 B; a
    11.       k.=k+a*b+a(0,4:1,5)*b(1,5:0,4)-a(neg:6)*b(3:neg)9 n- I2 L7 A! o
    12.     },4 j9 k' t1 Y. l+ L4 [, d. r9 Q
    13.     i++
    14. \\" ^7 \; d/ s9 G. K0 u1 z. w
    15.   },
    16. 8 Y8 u0 k+ ]2 [0 R  Y9 H
    17.   k.outm().delete(),
    18. \\" T2 i* b7 O/ G# W8 e
    19.   [clock()-t0]/1000
    20. 8 l2 h/ L7 b7 y/ y3 e, ?2 [
    21. };
    结果:
    1.          274978         274892         274913         274949         274953
      # ?2 _% d! f1 \4 k/ D
    2.          274994         275050         275001         275037         274892# I2 B' ]1 Z\" J( ?: ~% [
    3.          275001         275063         275019         274963         274971' f0 c; C/ N. R6 B, C
    4.          274945         274999         275017         274983         2749829 D& H) i( b8 Y+ Q* R/ q
    5.          275009         274984         274971         274955         274923  C4 s# B; Z! J0 e4 x

    6. ) D4 Y( i1 x+ ^! X. n5 z
    7. 3.516  秒
    复制代码
    此类运算Forcal的效率有Matlab的一半稍多一点。% a6 h% r* o" p1 V# D0 U- }/ ~

    . _; S. k, f! N4 i6 I- g8 t$ Z==================
    ) t- D  J5 a+ N4 A$ Z( V==================
    " e, ?  S# A- A; w
    # h4 ]' z" S. k/ P2 [& @/ _2、大型矩阵乘- @0 D( M/ `; v4 u3 P
    0 j! w( O: o7 j# P3 N3 ]  G8 v  i
    Matlab 2009a代码及结果:
    1. clear all
        \3 n\" w4 f4 Y' K0 b
    2. a = rand(1000,1000);
      4 {- X6 r7 J4 }. a
    3. b = rand(1000,1000);3 @\" @; g7 ^( _
    4. tic
      ; e8 t& H9 B2 g
    5. k = a * b;
      - F4 d, w1 R. o) L
    6. k(1:3, 5:9)4 {! ~9 S* j% v: A4 f1 {
    7. toc
      & t7 Z: g  b7 J/ U
    8. 8 b! h/ V6 q9 |$ m; W% P( Z
    9. ans =
      $ X/ d* m* ]4 ]4 K7 I+ ]
    10. 5 p0 D5 n* j$ `) k4 \1 [
    11.   246.1003  244.3288  252.9674  258.1527  243.9345% i- m1 D$ Y. ?% L
    12.   246.7404  236.1487  249.7140  251.3887  246.0294% L+ r) d  _6 X' w' q- p
    13.   249.4205  240.5515  252.5847  257.0065  249.7137$ @- {' [+ N9 v. M+ p; E8 w
    14. , |3 I% y7 ~, ^0 T! E9 B
    15. Elapsed time is 0.310022 seconds.
    复制代码
    ===================
    5 T& d) P9 |& P, A8 f
    5 C" N  U. B! M; U- a6 U0 e' t5 UForcal(OpenFC演示)代码:
    1. !using["math","sys"];
    2. + K6 E1 I6 n0 t# z% [& g! N
    3. main(:a,b,k,t0)=2 v; r( Y# T0 a: F4 q
    4. oo{
    5. 9 [; [( O* b) g\\" N# Z2 M0 R
    6.   a=rand[1000,1000], b=rand[1000,1000],
    7. ' `6 {# V- X6 F4 Z/ j
    8.   t0=clock(),3 f* z& c9 e: W- i; j. g7 X
    9.   k=a*b,  //矩阵乘\\" f) M0 p  u; \6 X: f$ Y4 C- c
    10.   k[1,3:5,9].outm()
    11. 0 [$ b# Q: F! h. z
    12. },
    13. ' Y, @! Z: K0 {  n' b& K
    14. [clock()-t0]/1000;
    结果:
    1.         247.009        245.731        242.454        247.412        244.4824 F& d9 p1 K\" A+ Q
    2.         258.268        255.417        253.738        255.159        253.042
      4 }  ^* s+ g6 l; `6 Y6 J1 f
    3.         258.088        252.324        248.927        252.392        247.731
      0 h8 t. a6 ?7 g/ `  Q$ a

    4. + {2 G* W: \% n) [' F8 P& m1 h
    5. 2.25
    复制代码
    此类运算Matlab的速度约是Forcal的7倍多。3 t+ B5 s4 s) y! X0 e$ v
    ( R: Y/ `' X8 |  E) A; k
    ==================
    ; Z  m. t/ e7 Z+ F7 i; _6 ]+ J==================
    2 V7 I2 ?8 p8 l) @
    1 P9 N" K) S* @7 a矩阵运算是Matlab的优势。不过,个人认为,矩阵计算速度取决于算法,矩阵算法只是众多数值算法的一种,不属于语言的基本特性。然而,拥有高效的矩阵算法是matlab的骄傲,就像优化算法是1stopt的骄傲一样。3 u# i  U) [9 L6 K+ e

      K# n' g1 S2 RForcal的矩阵乘是用普通的矩阵乘经过改进而成的,效率自然低,但所有的数值算法包括矩阵运算是由Forcal扩展库实现的,只要有高效的算法,Forcal便可大展身手,为所有这些算法提高更高效的服务。: R9 n2 U1 f5 U7 u1 ], m* W
    + U# M& J- c( w7 \8 x
    除了矩阵运算,Matlab还有许多非语言特性的优势,例如函数图形功能(不包括其GUI,Forcal是嵌入式脚本,C/C++、Delphi等的GUI就是Forcal的GUI)、符号计算功能、控制仿真、金融建模等等。这些实用方便的算法模块使matlab获得了广大用户的青睐。
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2024-5-16 03:52 , Processed in 0.441417 second(s), 49 queries .

    回顶部