数学建模社区-数学中国

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

作者: forcal    时间: 2011-11-10 21:43
标题: Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试
Lu数值计算扩展动态库LuMath V1.0:http://www.forcal.net/sysm/lu1/luhtm/lumath.htm5 Z$ Q, q4 m- K% l

* H1 a) D( g. eLuMath 库的数值算法是以矩阵为基础,并进行了运算符重载,具有内存消耗低、执行效率高、代码简洁、实用性强的特点。
- c) ^: N  H' A6 x: Q) T9 Z# y; h% J$ P" h6 n
例子:
* Q# J: [6 B2 }* h! I6 A4 s
3 A8 g6 r( j+ f' y# h. Omatlab2009a代码:
  1. clear all
    5 O2 J$ G0 ~/ \: H: _' C4 W
  2. clc
    1 V$ O0 Y, L5 `; a9 }. ]$ H
  3. tic5 L: G* o( ?. L8 J5 M4 I
  4. k = zeros(5,5); % //生成5×5全0矩阵
    1 W: D' d& f! p+ R' n( H8 a
  5. % 循环计算以下程序段100000次:/ v$ x+ V3 B+ U3 q! L
  6. for m = 1:100000" t+ a! {/ N2 V% u
  7.     a = rand(5,7);
    5 P, t5 S& ]* F2 E% ?
  8.     b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化8 o' e, B& s( j# ~2 ?. d
  9.     k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);) O, ]2 y) g1 v+ G
  10. end
    0 F( `; g* c. ~! N
  11. k1 T% A6 b5 v: M3 l0 f( X! _
  12. toc
复制代码
多次运行,结果约为:
  1. k =
    0 k) H8 V( l9 f

  2. 5 {( V) B5 f) q/ [- b
  3.   1.0e+005 *- X3 F* ]+ C4 K) i. P
  4. / u* W9 q4 s: z! y
  5.     2.7530    2.7525    2.7509    2.7539    2.7529' E8 P# t( W% k% m! E
  6.     2.7521    2.7494    2.7493    2.7542    2.7476
    ( L- P$ {* }( R2 J+ M1 g
  7.     2.7549    2.7524    2.7527    2.7564    2.7517
    & E4 s, N& s) q* k7 L. c0 ]+ O
  8.     2.7530    2.7523    2.7533    2.7525    2.7502
    9 w1 v2 g: [5 Z6 |. F9 `+ l: G
  9.     2.7527    2.7521    2.7505    2.7519    2.7523
    5 D; i  G( J0 q" @  ]0 Y

  10. 8 V  G1 }5 p* \7 u: I7 V
  11. Elapsed time is 2.126704 seconds.
复制代码
Lu代码:
  1. !!!using["math"];
    7 S$ C6 z  v8 `+ h9 E! u8 N# W: m1 @, F$ b8 x
  2. main(:t0,k,i,a,b)=
    1 p" d/ B* }7 {- l# @+ p
  3. {2 I- ~. u2 P) K  E1 l+ m) d
  4.     t0=clock(),: G: k1 d8 _' c5 d* X+ z/ w
  5.     k=zeros(5,5),         //生成5×5矩阵k,初始化为0
    . v. _1 L4 P1 [4 p
  6.     i=0,(++i<=100000).while{//循环计算100000次% V( o9 U% X& w/ r, l8 f
  7.         a=rand(5,7), b=rand(7,5), //生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化. E' C& a/ c6 _% S9 l+ U2 _
  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)# I* A* `" y$ C* A! v& ]) w, n
  9.     },
    4 _1 ?9 m/ H, h& [" z
  10.     k.outa(),             //输出矩阵k4 ~- c& P; Y' m7 X# v2 ~
  11.     [clock()-t0]/1000.    //得到计算时间,秒8 V# W$ y- ^6 |' N  k
  12. };
复制代码
多次运行,结果约为:
  1.          275024         274895         275054         275083         275024" C* ]! h1 ?6 A! w6 |5 C! ~
  2.          274965         275036         275091         275112         274931  M% v0 d& S( m
  3.          274975         275012         275020         274963         274939* O( E# E% _: ^/ U  o( L
  4.          274981         274976         275117         275065         275044- t0 B1 k0 z5 D
  5.          274920         274906         275005         274972         274920
    0 W6 U0 |) j: x/ s" V
  6. 1.25 秒
复制代码
Lu快于matlab的原因应该仍在于内存管理效率较高。




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