数学建模社区-数学中国

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

作者: forcal    时间: 2011-11-10 21:43
标题: Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试
Lu数值计算扩展动态库LuMath V1.0:http://www.forcal.net/sysm/lu1/luhtm/lumath.htm
2 N8 `7 z7 U& E0 I% `2 i. z7 ?- u9 O! w7 Z3 e5 V; r
LuMath 库的数值算法是以矩阵为基础,并进行了运算符重载,具有内存消耗低、执行效率高、代码简洁、实用性强的特点。; J) q5 t& A* B7 V! X2 P; j, w. G

4 V& ?6 q! e7 W4 ?0 j例子:
2 l/ b2 b0 |4 _* V4 U1 J
4 o3 z( B. p: [0 L, omatlab2009a代码:
  1. clear all; c' A: \/ c* J& ^3 M) r
  2. clc
    / V6 B  J$ s. O' b1 h! q( Y
  3. tic8 P  C( J6 e( S4 y0 D: H9 Z9 p+ i
  4. k = zeros(5,5); % //生成5×5全0矩阵
    9 \0 V4 m: _! h% G
  5. % 循环计算以下程序段100000次:- b4 z7 I+ A% y
  6. for m = 1:100000
    ; z' Z; a$ t- Q5 M4 f- y
  7.     a = rand(5,7);
    ! ^1 @' S  \2 H* h1 B& d
  8.     b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化& O! }: A( X  f. {7 K8 M7 a7 T+ W
  9.     k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);$ H9 n6 s: @. D8 n
  10. end, p3 Y" \) G/ n; Q, G& Q3 i8 R
  11. k  f. V$ p; O5 c+ P' A; z6 M' y& Z
  12. toc
复制代码
多次运行,结果约为:
  1. k =
    " A* Q( m5 l$ o
  2. ' |( I* ?" ~" G/ g# X
  3.   1.0e+005 *( d5 _" z8 b7 x) C( z9 K

  4. : `2 C3 D7 l: f/ k& E( _
  5.     2.7530    2.7525    2.7509    2.7539    2.7529
    4 _; z9 O/ d, A0 U5 ?$ m
  6.     2.7521    2.7494    2.7493    2.7542    2.7476' l# k% U: C1 w. o7 i$ y3 ]% Q
  7.     2.7549    2.7524    2.7527    2.7564    2.7517
    $ U$ A% C) R, M6 @& U
  8.     2.7530    2.7523    2.7533    2.7525    2.7502( O- P9 h" n5 q; X6 |0 o$ j
  9.     2.7527    2.7521    2.7505    2.7519    2.7523/ E; {$ p3 A% f, `* \" F7 C

  10. 1 h9 I) b7 m* |" J+ k, Y6 J
  11. Elapsed time is 2.126704 seconds.
复制代码
Lu代码:
  1. !!!using["math"];# F+ ^6 F+ _9 G8 x% x6 N! X( m
  2. main(:t0,k,i,a,b)=
    . w# C4 E8 c) o
  3. {% l4 k6 Z0 e* Z$ o" e
  4.     t0=clock(),5 ?( {0 [5 g9 w/ [& e! P
  5.     k=zeros(5,5),         //生成5×5矩阵k,初始化为0
    ! L, s7 M  ?' w- M/ x
  6.     i=0,(++i<=100000).while{//循环计算100000次$ ?7 D: r) X6 {: {) I
  7.         a=rand(5,7), b=rand(7,5), //生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
    ) v- |- `  F: r( f" R  v
  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)- f$ P6 b$ U" J. |7 _/ c: n' a2 n
  9.     },3 h# w3 p1 \* `0 w; g+ ]' d
  10.     k.outa(),             //输出矩阵k
    0 ^; z: s* m' c3 j! A. V2 f
  11.     [clock()-t0]/1000.    //得到计算时间,秒
    0 B8 I; p' `" A; Z5 g# @
  12. };
复制代码
多次运行,结果约为:
  1.          275024         274895         275054         275083         275024
    # j  q* t7 g; J/ M  ^8 [3 J
  2.          274965         275036         275091         275112         274931+ P9 U! @' p" y4 a) h
  3.          274975         275012         275020         274963         274939
    8 H  ?1 d+ t3 P/ Q
  4.          274981         274976         275117         275065         275044
    9 ~: X0 q; I4 T  b1 c
  5.          274920         274906         275005         274972         274920+ O% E* L! n4 `2 g. K, x) o: Q
  6. 1.25 秒
复制代码
Lu快于matlab的原因应该仍在于内存管理效率较高。




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