数学建模社区-数学中国

标题: Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试 [打印本页]

作者: forcal    时间: 2011-11-10 21:43
标题: Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试
Lu数值计算扩展动态库LuMath V1.0:http://www.forcal.net/sysm/lu1/luhtm/lumath.htm# h5 X; u1 U6 R  ]' w0 B0 a
; C+ n" @3 s1 Y9 _
LuMath 库的数值算法是以矩阵为基础,并进行了运算符重载,具有内存消耗低、执行效率高、代码简洁、实用性强的特点。3 b1 O; S8 Y9 z1 n# r' v7 D

; N& ?& G$ W# ^- i! [例子:  q& a! ~! C) {
' X* |  F2 [' k# p! C. A' @
matlab2009a代码:
  1. clear all6 [) ~& @5 `1 Q, u
  2. clc
    $ _0 V' Z3 p  N- T% V2 a( Z
  3. tic
    5 t$ A* {( V0 ]7 A
  4. k = zeros(5,5); % //生成5×5全0矩阵- w0 D! u, H) |3 }0 h
  5. % 循环计算以下程序段100000次:- W, l3 O& s1 H9 O0 u
  6. for m = 1:100000
    0 |8 D" ^& C1 w. M, j' C9 S
  7.     a = rand(5,7);
    * [9 I1 [) x! ?) ^' J' X
  8.     b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
    , `6 R/ p4 n( K
  9.     k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);6 @$ ]$ I- W# X8 Y, p; l# R  b# x
  10. end. {/ Z+ e; Y/ v5 g8 s) u+ h
  11. k- @/ m# E/ c: J8 U- x/ |. E
  12. toc
复制代码
多次运行,结果约为:
  1. k =- o; u0 [  Z5 E& n

  2. + ~+ f8 c7 r* }& L0 f
  3.   1.0e+005 *
    8 k! ^. m' M, u$ m+ K8 ~  Y; y
  4. 1 R  Y" V6 y/ E
  5.     2.7530    2.7525    2.7509    2.7539    2.7529
    % d% J& [* o! r: q/ F
  6.     2.7521    2.7494    2.7493    2.7542    2.7476' {. a; m1 i6 v& f( Y
  7.     2.7549    2.7524    2.7527    2.7564    2.7517' j: r) b' ?5 r% i7 a" D8 t% H
  8.     2.7530    2.7523    2.7533    2.7525    2.7502) {% E. `+ ^9 I0 z! _$ y5 c
  9.     2.7527    2.7521    2.7505    2.7519    2.7523, ^# e' a$ K5 I% r
  10. . T1 j7 k9 j- `2 B
  11. Elapsed time is 2.126704 seconds.
复制代码
Lu代码:
  1. !!!using["math"];
    + X$ u1 I9 F; H  s$ e$ `3 z
  2. main(:t0,k,i,a,b)=' A: _9 V7 n3 h; }8 A3 `
  3. {/ U- X( L+ }6 A; S' [4 o
  4.     t0=clock(),
    $ N# Y6 R1 y8 W  G  ]& }
  5.     k=zeros(5,5),         //生成5×5矩阵k,初始化为0
    $ T) F- j" n. M0 C9 B( |7 r/ G
  6.     i=0,(++i<=100000).while{//循环计算100000次
      H' o0 A. {+ O; l$ h% n
  7.         a=rand(5,7), b=rand(7,5), //生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
    % ^0 U* L6 F; [3 z1 m
  8.         k.=k+a*b+a(0,4:1,5)*b(1,5:0,4)-a(all:6)*b(2:all) //计算k=k+a*b+a(0,4:1,5)*b(1,5:0,4)+a(all:6)*b(3:all)
    * l( i4 H5 p  \! a7 p
  9.     },( I6 M; {, w0 T( l5 |) q! ]0 v8 o7 B
  10.     k.outa(),             //输出矩阵k
    9 F3 w# p0 q6 d' i' n& d
  11.     [clock()-t0]/1000.    //得到计算时间,秒
    & w$ d4 t5 ~9 [: w9 y
  12. };
复制代码
多次运行,结果约为:
  1.          275024         274895         275054         275083         275024- c6 M# H% l8 T+ S0 O
  2.          274965         275036         275091         275112         274931
    ! B' |4 x! h4 H! I0 ]: ~3 X8 y9 ~" x& [
  3.          274975         275012         275020         274963         274939
    - L5 L" [  Y7 q" g* C& {6 N
  4.          274981         274976         275117         275065         275044
    0 Q2 J' B6 M% n2 x' N
  5.          274920         274906         275005         274972         274920" \& s; J. w# p- N
  6. 1.25 秒
复制代码
Lu快于matlab的原因应该仍在于内存管理效率较高。




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5