数学建模社区-数学中国

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

作者: forcal    时间: 2011-11-10 21:43
标题: Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试
Lu数值计算扩展动态库LuMath V1.0:http://www.forcal.net/sysm/lu1/luhtm/lumath.htm( @3 `/ w1 ?2 t8 S2 }' W  q4 k1 ^
, e1 @$ @8 |( C: F' m
LuMath 库的数值算法是以矩阵为基础,并进行了运算符重载,具有内存消耗低、执行效率高、代码简洁、实用性强的特点。
% t2 v8 N# t" V
' Z3 v% }/ F# }! i* Z例子:
3 }6 h2 w* ]: P8 y, b( L. ^9 e; Y. l# L4 @  t  B* Y1 J
matlab2009a代码:
  1. clear all
    " o, }% P& o+ U3 K6 E
  2. clc
    , `5 B: h& Z/ \2 W4 R( M1 R
  3. tic
    . L- m+ [3 Z. l
  4. k = zeros(5,5); % //生成5×5全0矩阵
    " O0 o+ U+ k/ r0 p2 \& K
  5. % 循环计算以下程序段100000次:
    # e& Q0 ]. a2 _
  6. for m = 1:100000
    ; B) n) p" M% c$ w( S% g
  7.     a = rand(5,7);6 [+ H0 I( H2 ~2 q2 e& Q
  8.     b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
    ) {& c4 Y; v4 r) t$ P/ d. v
  9.     k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);  S' j: E8 G( c! N8 j4 U2 [: G8 M
  10. end
    3 N) R" R% S' t+ E& j5 S' h2 J
  11. k1 O% E: ~( r- t( Q4 c+ ^9 H
  12. toc
复制代码
多次运行,结果约为:
  1. k =
    9 ~" W: `4 {. P4 T
  2. & W% c* S; ~$ D; M( t8 o
  3.   1.0e+005 *- M6 l" s( v. r0 @$ g( X# Z+ b6 {
  4. 2 A- T1 g) {0 A$ b# N1 n
  5.     2.7530    2.7525    2.7509    2.7539    2.7529) k$ a9 O* z. m) t/ m8 J. `( I
  6.     2.7521    2.7494    2.7493    2.7542    2.7476
    9 g1 ?; j) I+ i/ f# x9 \( n
  7.     2.7549    2.7524    2.7527    2.7564    2.7517. t# K" A9 Y! g7 l( Z2 b
  8.     2.7530    2.7523    2.7533    2.7525    2.7502
    5 ~' `# P; J* ]5 g2 P- b
  9.     2.7527    2.7521    2.7505    2.7519    2.7523; `2 ]- t+ A9 G9 H2 R8 r$ Y
  10. 0 n, K) s- Z/ n- e) u
  11. Elapsed time is 2.126704 seconds.
复制代码
Lu代码:
  1. !!!using["math"];4 q: s$ k3 V4 L& {  j
  2. main(:t0,k,i,a,b)=
    # m% ?: r, W6 C3 X- N8 B1 W# R
  3. {
    * j2 i+ |" K- a  N1 _1 j" ^- }
  4.     t0=clock(),4 L! l0 u8 w' I- W
  5.     k=zeros(5,5),         //生成5×5矩阵k,初始化为0
    6 G& s' x& y% H0 {/ ^" x
  6.     i=0,(++i<=100000).while{//循环计算100000次
    $ W# R3 c, E. D( C8 C( ]  L4 c
  7.         a=rand(5,7), b=rand(7,5), //生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化& T) `, o8 k/ V7 b  J+ [) e& _
  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). t: H; w7 L3 R' M" Q
  9.     },4 N: W' J! w- Q& N6 [% @( U
  10.     k.outa(),             //输出矩阵k- J6 n, e- `1 c
  11.     [clock()-t0]/1000.    //得到计算时间,秒
    7 \) I9 F9 N1 t# E8 d' w. U
  12. };
复制代码
多次运行,结果约为:
  1.          275024         274895         275054         275083         275024% a! ]# o; o* O
  2.          274965         275036         275091         275112         274931
    ; \- h1 S& f8 q9 [+ s
  3.          274975         275012         275020         274963         274939+ z8 A* ?! |) V! S
  4.          274981         274976         275117         275065         275044$ [0 c; {3 A* N! P* {" x
  5.          274920         274906         275005         274972         274920
    + |  S/ N, Y2 E$ X( a: b
  6. 1.25 秒
复制代码
Lu快于matlab的原因应该仍在于内存管理效率较高。




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