数学建模社区-数学中国

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

作者: forcal    时间: 2011-11-10 21:43
标题: Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试
Lu数值计算扩展动态库LuMath V1.0:http://www.forcal.net/sysm/lu1/luhtm/lumath.htm7 S+ ]3 o0 e; I2 W5 d

- f" V# e1 t5 o% c7 \& t) T: nLuMath 库的数值算法是以矩阵为基础,并进行了运算符重载,具有内存消耗低、执行效率高、代码简洁、实用性强的特点。) l0 G0 u1 ?1 [8 `& |* A

& w5 G2 C  A/ Y7 P2 p6 J例子:
' x- e9 P- h# ?0 _8 j
6 L. X! b" O& V- \$ e) Y, J$ ^; omatlab2009a代码:
  1. clear all1 C3 ?0 o# p" }
  2. clc
    ; U6 I$ U$ L& m4 N8 W+ p1 F
  3. tic
    ; W5 O* y" Z8 n- N/ p! {
  4. k = zeros(5,5); % //生成5×5全0矩阵
    & w: j; p" s5 h9 n3 \9 G$ {3 x
  5. % 循环计算以下程序段100000次:
    0 g( U) S0 Y" ^7 U8 T) f9 y
  6. for m = 1:100000
    6 N% L7 w4 e  N8 s
  7.     a = rand(5,7);( b( @$ g" p, r, s1 X- f# G7 P
  8.     b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
    7 X8 c0 T0 M& r% R$ B
  9.     k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);5 i, h9 ^% p) X
  10. end3 W- Z$ f: p( Z% i
  11. k5 h- i) }0 b1 F7 W' V1 b
  12. toc
复制代码
多次运行,结果约为:
  1. k =2 C7 ^) Z8 a2 N# Z$ b2 t8 ~
  2. 9 X6 P* J- I. X" G# b1 w+ Y
  3.   1.0e+005 *
    2 q9 i1 }7 \' T( V

  4. $ W4 `9 r8 p# \* j
  5.     2.7530    2.7525    2.7509    2.7539    2.7529
    ' z/ D8 T/ }' O* C
  6.     2.7521    2.7494    2.7493    2.7542    2.7476& @3 H( l" B- }/ L: |! u# r
  7.     2.7549    2.7524    2.7527    2.7564    2.7517
    + D1 u2 x& m, `; v+ ]
  8.     2.7530    2.7523    2.7533    2.7525    2.7502
    1 _7 N( a) ~" Y! B8 |* z
  9.     2.7527    2.7521    2.7505    2.7519    2.7523
    " \& m0 K4 B4 f- t6 C/ r

  10. ( @0 N; @8 p/ Z- I. j) J
  11. Elapsed time is 2.126704 seconds.
复制代码
Lu代码:
  1. !!!using["math"];
    " ^* Y1 Z) F" }! @( t1 t  X
  2. main(:t0,k,i,a,b)=
    4 [& j2 A4 N! j9 q# C
  3. {; T/ C: O- _" w6 m4 ~
  4.     t0=clock(),  ^6 m8 S% Q. G* p2 ]4 {
  5.     k=zeros(5,5),         //生成5×5矩阵k,初始化为04 s1 A/ [, E( B9 z+ `( k
  6.     i=0,(++i<=100000).while{//循环计算100000次2 V9 K9 ^, R7 {2 F# R% \+ \0 A
  7.         a=rand(5,7), b=rand(7,5), //生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
      n: ?4 R; q( S8 d8 [
  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)- s5 f/ f1 w% e- _
  9.     },- j8 W8 `, d% c. q
  10.     k.outa(),             //输出矩阵k+ R2 c+ P% d( b, c# |) M, M
  11.     [clock()-t0]/1000.    //得到计算时间,秒% n- k: r$ h  N3 Z8 _1 G
  12. };
复制代码
多次运行,结果约为:
  1.          275024         274895         275054         275083         275024
    ' Q  E5 Q; E  {# V+ }4 N: \1 ]
  2.          274965         275036         275091         275112         274931* z* o  D3 _. z4 X
  3.          274975         275012         275020         274963         2749396 Y8 t  K/ b" {! ^" T. O
  4.          274981         274976         275117         275065         2750446 `8 G6 H: F' M( J, A
  5.          274920         274906         275005         274972         2749206 Z- y* f+ B0 Z5 }& N
  6. 1.25 秒
复制代码
Lu快于matlab的原因应该仍在于内存管理效率较高。




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