数学建模社区-数学中国

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

作者: forcal    时间: 2011-11-10 21:43
标题: Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试
Lu数值计算扩展动态库LuMath V1.0:http://www.forcal.net/sysm/lu1/luhtm/lumath.htm
8 |1 |. c; M, e3 D9 a1 X- R8 |" t5 E7 c% }& d3 v* b( C
LuMath 库的数值算法是以矩阵为基础,并进行了运算符重载,具有内存消耗低、执行效率高、代码简洁、实用性强的特点。- {1 Q- j1 r& M* x0 T/ B
# x/ f( C8 T' `
例子:, E, R  A/ m' ^  D

' C3 i! Q* u0 y& _matlab2009a代码:
  1. clear all4 m- ^, `% R& ]; u# I, @$ R4 @
  2. clc1 ?# j# ~! l# A0 c# ^1 C
  3. tic, L$ ]. p% ~  Y% g. g
  4. k = zeros(5,5); % //生成5×5全0矩阵8 K& g' C' j# `3 Y# t1 x
  5. % 循环计算以下程序段100000次:+ S) Y5 M* v1 L1 _7 A
  6. for m = 1:100000$ o( m2 c1 ^* C5 {/ U" X
  7.     a = rand(5,7);
    * d: Z; j) y7 S3 K
  8.     b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化) J, z7 _  X0 W0 B$ O1 {3 J
  9.     k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);
    . ~8 o1 x- c6 g6 g; Y) [
  10. end
    5 ~: K, V/ k# D
  11. k5 S/ r! N$ b2 R4 ]0 U( s" y
  12. toc
复制代码
多次运行,结果约为:
  1. k =
    # A4 Y* I0 r& S: u& Y7 e2 D- H

  2. . b' B' T; P8 }* `
  3.   1.0e+005 *, \6 [, g  q4 c  L& P! Z

  4. / p* z6 C* L) h" q
  5.     2.7530    2.7525    2.7509    2.7539    2.7529' w5 y  }7 L5 j$ [
  6.     2.7521    2.7494    2.7493    2.7542    2.7476: G" e( n7 C, D* J7 f! F
  7.     2.7549    2.7524    2.7527    2.7564    2.7517
    : d) p3 v. X3 [4 ^3 E
  8.     2.7530    2.7523    2.7533    2.7525    2.7502# o) C- m7 \5 v0 E2 \
  9.     2.7527    2.7521    2.7505    2.7519    2.7523# V# H" B5 D* V6 ?' e6 f: D' s

  10. 5 o  T0 c( K, d+ t5 T  G3 i# w6 B
  11. Elapsed time is 2.126704 seconds.
复制代码
Lu代码:
  1. !!!using["math"];
    * k7 ?$ j, c5 R0 X' d. T6 p
  2. main(:t0,k,i,a,b)=
    & R6 F1 K0 ?$ A0 c$ F
  3. {9 q. T% Q" O  P3 o  m
  4.     t0=clock(),$ Z9 ~* Q2 v: ~3 r8 G# X& u. w% l
  5.     k=zeros(5,5),         //生成5×5矩阵k,初始化为07 r: q/ P$ L, Y' x
  6.     i=0,(++i<=100000).while{//循环计算100000次9 |' ]6 s7 L- e
  7.         a=rand(5,7), b=rand(7,5), //生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化/ [+ \; @' J8 o: P
  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)3 P8 i$ x" N- o" x$ U
  9.     },; [; U- P; P6 b, u
  10.     k.outa(),             //输出矩阵k
    # s0 u, q: {( N; Z& d: |; h# F# t
  11.     [clock()-t0]/1000.    //得到计算时间,秒# o. ]+ n. b- v: `) `
  12. };
复制代码
多次运行,结果约为:
  1.          275024         274895         275054         275083         275024
    9 P/ u) r/ `3 d5 p4 d. B& c5 }
  2.          274965         275036         275091         275112         274931( {+ C7 B8 m1 i' ]$ o7 Q
  3.          274975         275012         275020         274963         2749398 V+ o( C( O/ J! N; L
  4.          274981         274976         275117         275065         275044
    5 ?4 s9 d) U$ k8 o
  5.          274920         274906         275005         274972         274920
    5 A* f" [8 x6 c% ^2 A
  6. 1.25 秒
复制代码
Lu快于matlab的原因应该仍在于内存管理效率较高。




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