数学建模社区-数学中国
标题:
Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试
[打印本页]
作者:
forcal
时间:
2011-11-10 21:43
标题:
Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试
Lu数值计算扩展动态库LuMath V1.0:
http://www.forcal.net/sysm/lu1/luhtm/lumath.htm
# h5 X; u1 U6 R ]' w0 B0 a
; C+ n" @3 s1 Y9 _
LuMath 库的数值算法是以矩阵为基础,并进行了运算符重载,具有内存消耗低、执行效率高、代码简洁、实用性强的特点。
3 b1 O; S8 Y9 z1 n# r' v7 D
; N& ?& G$ W# ^- i! [
例子:
q& a! ~! C) {
' X* | F2 [' k# p! C. A' @
matlab2009a代码:
clear all
6 [) ~& @5 `1 Q, u
clc
$ _0 V' Z3 p N- T% V2 a( Z
tic
5 t$ A* {( V0 ]7 A
k = zeros(5,5); % //生成5×5全0矩阵
- w0 D! u, H) |3 }0 h
% 循环计算以下程序段100000次:
- W, l3 O& s1 H9 O0 u
for m = 1:100000
0 |8 D" ^& C1 w. M, j' C9 S
a = rand(5,7);
* [9 I1 [) x! ?) ^' J' X
b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
, `6 R/ p4 n( K
k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);
6 @$ ]$ I- W# X8 Y, p; l# R b# x
end
. {/ Z+ e; Y/ v5 g8 s) u+ h
k
- @/ m# E/ c: J8 U- x/ |. E
toc
复制代码
多次运行,结果约为:
k =
- o; u0 [ Z5 E& n
+ ~+ f8 c7 r* }& L0 f
1.0e+005 *
8 k! ^. m' M, u$ m+ K8 ~ Y; y
1 R Y" V6 y/ E
2.7530 2.7525 2.7509 2.7539 2.7529
% d% J& [* o! r: q/ F
2.7521 2.7494 2.7493 2.7542 2.7476
' {. a; m1 i6 v& f( Y
2.7549 2.7524 2.7527 2.7564 2.7517
' j: r) b' ?5 r% i7 a" D8 t% H
2.7530 2.7523 2.7533 2.7525 2.7502
) {% E. `+ ^9 I0 z! _$ y5 c
2.7527 2.7521 2.7505 2.7519 2.7523
, ^# e' a$ K5 I% r
. T1 j7 k9 j- `2 B
Elapsed time is 2.126704 seconds.
复制代码
Lu代码:
!!!using["math"];
+ X$ u1 I9 F; H s$ e$ `3 z
main(:t0,k,i,a,b)=
' A: _9 V7 n3 h; }8 A3 `
{
/ U- X( L+ }6 A; S' [4 o
t0=clock(),
$ N# Y6 R1 y8 W G ]& }
k=zeros(5,5), //生成5×5矩阵k,初始化为0
$ T) F- j" n. M0 C9 B( |7 r/ G
i=0,(++i<=100000).while{//循环计算100000次
H' o0 A. {+ O; l$ h% n
a=rand(5,7), b=rand(7,5), //生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
% ^0 U* L6 F; [3 z1 m
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)
* l( i4 H5 p \! a7 p
},
( I6 M; {, w0 T( l5 |) q! ]0 v8 o7 B
k.outa(), //输出矩阵k
9 F3 w# p0 q6 d' i' n& d
[clock()-t0]/1000. //得到计算时间,秒
& w$ d4 t5 ~9 [: w9 y
};
复制代码
多次运行,结果约为:
275024 274895 275054 275083 275024
- c6 M# H% l8 T+ S0 O
274965 275036 275091 275112 274931
! B' |4 x! h4 H! I0 ]: ~3 X8 y9 ~" x& [
274975 275012 275020 274963 274939
- L5 L" [ Y7 q" g* C& {6 N
274981 274976 275117 275065 275044
0 Q2 J' B6 M% n2 x' N
274920 274906 275005 274972 274920
" \& s; J. w# p- N
1.25 秒
复制代码
Lu快于matlab的原因应该仍在于内存管理效率较高。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5