QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 9296|回复: 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、小矩阵大运算量测试
    : e1 q+ d) f& Q/ F2 z
    1 s  N5 T/ ?/ f5 p5 M; a! J4 L$ VMatlab 2009a代码及结果:
    1. clear all8 b/ i\" ]2 M5 L( |) r* q7 F
    2. tic
      & n) y) g1 q+ h+ Z
    3. k = zeros(5,5); % //生成5×5全0矩阵9 r% x$ W7 b7 G  V9 y4 j7 n5 w' ^0 k
    4. % 循环计算以下程序段100000次:
      ; i6 n1 r. R\" i& P7 S1 F
    5. for m = 1:100000  E+ T0 f. ~) v' \4 @# @
    6.     a = rand(5,7);6 [1 D# K) d) |: M
    7.     b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化2 o0 A\" \& E' B; A1 B) V, ]; s) [
    8.     k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);+ a' u( m; t6 w! m+ U5 R# ?7 A
    9. end9 U3 ?. C. k# _& \\" f
    10. k! J& q2 Y: k; n  T2 A6 I3 O
    11. toc- M\" O/ B; a* ^5 ~2 a

    12. ( M\" J$ X' ~5 i5 R
    13. k =
      2 Q, u) x8 Z- o8 J
    14. $ g/ K1 ~( b1 k, a2 Y
    15.   1.0e+005 *  P& f+ J! \1 @! t6 A5 H
    16. 2 f( X% ]1 u, {9 f9 l! T$ \; F\" d& f, i
    17.     2.7525    2.7559    2.7481    2.7525    2.7511, L: o: H9 N9 b( Q$ `$ Q# Q
    18.     2.7527    2.7535    2.7430    2.7545    2.7484
      0 F; w: ?8 i$ I, w/ V2 C
    19.     2.7493    2.7553    2.7440    2.7513    2.7485
      % _8 c$ |% L) u, }( B
    20.     2.7481    2.7506    2.7425    2.7457    2.7460; _/ Y( T6 \& ~; s5 y
    21.     2.7506    2.7525    2.7429    2.7488    2.74518 b' t- h1 u7 v2 Z% R
    22. ! L0 Z& h& e% q- m( \! T- H1 p: F\" E
    23. Elapsed time is 1.979852 seconds.
    复制代码
    ===================
    " S' o  ?8 x0 c
    8 |% G  O! ?! p% J* PForcal(OpenFC演示)代码:
    1. !using["math","sys"];
    2. ) q  S* L# v* n- k5 _
    3. (:t0,k,i,a,b)=
    4.   _' m5 R. ~; G% l
    5. {5 N' `2 P/ c0 B
    6.   t0=clock(),& ~; |+ z3 Y+ f* y
    7.   k=zeros[5,5],5 K1 ?+ V# N& ~; L# M
    8.   i=0,(i<100000).while{
    9. & h5 q4 J' Z7 X& g& C
    10.     oo{
    11. 0 S. f! V' S5 w  }. @8 a- P  R
    12.       a=rand[5,7], b=rand[7,5],
    13. # a1 Y4 j: T% T- T5 O
    14.       k.=k+a*b+a(0,4:1,5)*b(1,5:0,4)-a(neg:6)*b(3:neg)
    15. $ V, ]. `! K\\" P  m& i6 O* _
    16.     },
    17. ! l3 @1 b2 ?* B
    18.     i++
    19.   _3 o& W6 a* l9 S! |, |: m2 y
    20.   },( }: W& ^* \& E  \- L. a
    21.   k.outm().delete(),, `/ q\\" C% m! m: z
    22.   [clock()-t0]/1000  @- e. v; V' O& K% t/ ^
    23. };
    结果:
    1.          274978         274892         274913         274949         274953* I3 v! T4 v3 ]6 @& B\" y- r! |
    2.          274994         275050         275001         275037         274892$ K+ u' ]! a% {; y9 D3 @' P# E: h
    3.          275001         275063         275019         274963         274971' }0 O  z5 B7 f5 \& w9 g) |
    4.          274945         274999         275017         274983         274982% ~1 W- F( z5 ~4 Y2 G
    5.          275009         274984         274971         274955         274923' Q& a* W& N9 U; }* }  ?
    6. 5 F\" @/ m0 v9 o
    7. 3.516  秒
    复制代码
    此类运算Forcal的效率有Matlab的一半稍多一点。
    + e' c( R# U9 M$ @7 W0 n' w/ t5 e0 }
    ==================
    4 F% v9 b3 B: S: a& ?==================
    0 F" o" n  z2 s! ]  P) v1 b, u" {4 I3 N7 x
    2、大型矩阵乘% D3 I0 l3 f. h5 y: a& n: @/ ^
    . x9 P6 s) C/ M/ G+ O1 D/ _' s
    Matlab 2009a代码及结果:
    1. clear all
      : s0 q\" O0 P# `8 D& b# D
    2. a = rand(1000,1000);
      , Y1 A, C, ^3 w3 c
    3. b = rand(1000,1000);
      - b2 ^3 w  c\" P! `# a
    4. tic8 ~, I\" G) z; R: ~6 {! x! ^
    5. k = a * b;
      6 ^( ?. c/ H  y0 R& M  ~$ Y9 q* A! Q
    6. k(1:3, 5:9)( ^( M9 H9 D& k: G' s
    7. toc% F( R. ^4 X, v\" w( N2 z

    8. % r4 |! W! M0 U
    9. ans =
      2 B- ~1 |# }6 o

    10. ! a- s& _8 p: w' f8 n
    11.   246.1003  244.3288  252.9674  258.1527  243.9345  p! j  _- C7 i! _/ r
    12.   246.7404  236.1487  249.7140  251.3887  246.0294+ C* ]$ D- ?2 M, e, a/ d
    13.   249.4205  240.5515  252.5847  257.0065  249.7137' R1 e: N# p2 b
    14. / B  N  }1 L3 a2 |+ @
    15. Elapsed time is 0.310022 seconds.
    复制代码
    ===================
    , S: {( F5 l  R
    6 J) ^: C  K) o+ {6 \6 [3 vForcal(OpenFC演示)代码:
    1. !using["math","sys"];
    2. + Q# M  W- I. t/ n; \. K
    3. main(:a,b,k,t0)=
    4. * Y, K6 b; c! N7 b1 h
    5. oo{/ b- r\\" R+ W- T  H- |1 P3 N
    6.   a=rand[1000,1000], b=rand[1000,1000],
    7.   r- _' \9 Q- k3 x! j
    8.   t0=clock(),
    9. ' c; p: Y\\" l: O, o
    10.   k=a*b,  //矩阵乘
    11. ' p3 F\\" m1 ^8 E9 p
    12.   k[1,3:5,9].outm()
    13. 8 Q& o% d; I, K- {
    14. },
    15. 6 f' @; \$ |1 d\\" l
    16. [clock()-t0]/1000;
    结果:
    1.         247.009        245.731        242.454        247.412        244.4820 \. @* E& ^8 F% `5 x0 `2 F1 e
    2.         258.268        255.417        253.738        255.159        253.042
      3 G! ^% B0 p( G6 J/ ]5 n
    3.         258.088        252.324        248.927        252.392        247.731
      / U& U6 [, u/ k' y% m3 B1 ~/ X
    4. 4 R. b# O! D. E9 b& M
    5. 2.25
    复制代码
    此类运算Matlab的速度约是Forcal的7倍多。, |6 A* L2 x8 }" n, z7 R
    5 W" L) `* ]- Q' X+ ]( s
    ==================
      q3 Y2 B7 F/ H* u& A6 ?/ G1 g==================  E  }, E* e/ M9 M

    ( X& }& A) J, |- m矩阵运算是Matlab的优势。不过,个人认为,矩阵计算速度取决于算法,矩阵算法只是众多数值算法的一种,不属于语言的基本特性。然而,拥有高效的矩阵算法是matlab的骄傲,就像优化算法是1stopt的骄傲一样。) }' i* V7 S4 a  ?4 @; L

    3 O- _' u7 R! y0 Z. ]Forcal的矩阵乘是用普通的矩阵乘经过改进而成的,效率自然低,但所有的数值算法包括矩阵运算是由Forcal扩展库实现的,只要有高效的算法,Forcal便可大展身手,为所有这些算法提高更高效的服务。' U8 f2 d3 X, J6 X" F- z

    - R1 b, i6 A  a% t除了矩阵运算,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-29 17:57 , Processed in 0.526572 second(s), 54 queries .

    回顶部