数学建模社区-数学中国

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

作者: forcal    时间: 2011-11-10 21:43
标题: Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试
Lu数值计算扩展动态库LuMath V1.0:http://www.forcal.net/sysm/lu1/luhtm/lumath.htm
( Q) t8 ^; @" b0 j/ F. V
; u) f7 x8 H% x# I- X+ bLuMath 库的数值算法是以矩阵为基础,并进行了运算符重载,具有内存消耗低、执行效率高、代码简洁、实用性强的特点。9 p. ~" O* J! p' v( g  \

0 b. J, b  ~  a  q2 a例子:
3 T  R+ `: S9 J' \6 y7 l2 X+ O2 s/ v& G: m* _1 L) i6 v
matlab2009a代码:
  1. clear all
    9 `+ h) K2 i' U
  2. clc7 }* g$ o3 j, H- X! r: _* A
  3. tic7 j5 M8 I8 b! X  z
  4. k = zeros(5,5); % //生成5×5全0矩阵
    6 R, l& a5 V# j  @9 W1 h* M$ o
  5. % 循环计算以下程序段100000次:
    4 `# n/ x+ _2 A8 B
  6. for m = 1:1000008 U# A  X- a7 I- F: \3 P) G
  7.     a = rand(5,7);8 ?9 @2 D$ h. P0 e7 W* _6 n
  8.     b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
    * a& Y. r$ Z$ v/ K" I9 |% {
  9.     k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);
    4 {0 L" U; O0 R& p0 w% E
  10. end3 _  _# U0 p  @) w, k: `1 H. H
  11. k
    & b  d; I0 [6 {9 e
  12. toc
复制代码
多次运行,结果约为:
  1. k =
    / t( S; K6 E3 L. g. n
  2. ( j& J- m% {- s, I& ~
  3.   1.0e+005 *
    & f/ r: f/ k% a% @9 w5 F

  4. 0 `7 p5 }" l1 ?
  5.     2.7530    2.7525    2.7509    2.7539    2.7529
    / K% w: E% U! O
  6.     2.7521    2.7494    2.7493    2.7542    2.7476
    ' o  L% `+ Q7 W) c( @1 M
  7.     2.7549    2.7524    2.7527    2.7564    2.7517
    3 }, r" n6 E, @5 x5 o
  8.     2.7530    2.7523    2.7533    2.7525    2.75022 j. G3 e4 k3 ?, ]- n. h/ C
  9.     2.7527    2.7521    2.7505    2.7519    2.7523
    , B6 |; b8 j4 k

  10. : `- B4 S$ {: L2 B. {
  11. Elapsed time is 2.126704 seconds.
复制代码
Lu代码:
  1. !!!using["math"];0 c/ W3 c% W: i7 M. k% x
  2. main(:t0,k,i,a,b)=
    8 T$ a. u1 X" [! H
  3. {2 o$ e( @! Y* }: k" n
  4.     t0=clock(),! y) P7 _% n2 N4 P; ?
  5.     k=zeros(5,5),         //生成5×5矩阵k,初始化为0! G6 ?4 k5 I+ P: ^; f% }
  6.     i=0,(++i<=100000).while{//循环计算100000次
    ; {- d& U& V: J
  7.         a=rand(5,7), b=rand(7,5), //生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化6 e+ n: z$ L% m7 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)" `- }- Q- K4 H! v5 C, q7 M
  9.     },
    ! R2 r: c6 P) i4 d# h: N0 a
  10.     k.outa(),             //输出矩阵k
    4 H# g2 v3 p  L8 A
  11.     [clock()-t0]/1000.    //得到计算时间,秒# D) W* v5 X! s# J
  12. };
复制代码
多次运行,结果约为:
  1.          275024         274895         275054         275083         275024
    2 j4 |) R, S' ]: e5 {* M
  2.          274965         275036         275091         275112         2749313 }  Z0 n: G  ?6 {2 O
  3.          274975         275012         275020         274963         274939* N' W; ~. v9 @  @. d( H! @
  4.          274981         274976         275117         275065         275044
    # F3 H0 E# D) C, W+ b, Q
  5.          274920         274906         275005         274972         274920
    7 ?9 Z' _# W# N
  6. 1.25 秒
复制代码
Lu快于matlab的原因应该仍在于内存管理效率较高。




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