数学建模社区-数学中国
标题:
Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试
[打印本页]
作者:
forcal
时间:
2011-11-10 21:43
标题:
Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试
Lu数值计算扩展动态库LuMath V1.0:
http://www.forcal.net/sysm/lu1/luhtm/lumath.htm
7 S+ ]3 o0 e; I2 W5 d
- f" V# e1 t5 o% c7 \& t) T: n
LuMath 库的数值算法是以矩阵为基础,并进行了运算符重载,具有内存消耗低、执行效率高、代码简洁、实用性强的特点。
) l0 G0 u1 ?1 [8 `& |* A
& w5 G2 C A/ Y7 P2 p6 J
例子:
' x- e9 P- h# ?0 _8 j
6 L. X! b" O& V- \$ e) Y, J$ ^; o
matlab2009a代码:
clear all
1 C3 ?0 o# p" }
clc
; U6 I$ U$ L& m4 N8 W+ p1 F
tic
; W5 O* y" Z8 n- N/ p! {
k = zeros(5,5); % //生成5×5全0矩阵
& w: j; p" s5 h9 n3 \9 G$ {3 x
% 循环计算以下程序段100000次:
0 g( U) S0 Y" ^7 U8 T) f9 y
for m = 1:100000
6 N% L7 w4 e N8 s
a = rand(5,7);
( b( @$ g" p, r, s1 X- f# G7 P
b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
7 X8 c0 T0 M& r% R$ B
k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);
5 i, h9 ^% p) X
end
3 W- Z$ f: p( Z% i
k
5 h- i) }0 b1 F7 W' V1 b
toc
复制代码
多次运行,结果约为:
k =
2 C7 ^) Z8 a2 N# Z$ b2 t8 ~
9 X6 P* J- I. X" G# b1 w+ Y
1.0e+005 *
2 q9 i1 }7 \' T( V
$ W4 `9 r8 p# \* j
2.7530 2.7525 2.7509 2.7539 2.7529
' z/ D8 T/ }' O* C
2.7521 2.7494 2.7493 2.7542 2.7476
& @3 H( l" B- }/ L: |! u# r
2.7549 2.7524 2.7527 2.7564 2.7517
+ D1 u2 x& m, `; v+ ]
2.7530 2.7523 2.7533 2.7525 2.7502
1 _7 N( a) ~" Y! B8 |* z
2.7527 2.7521 2.7505 2.7519 2.7523
" \& m0 K4 B4 f- t6 C/ r
( @0 N; @8 p/ Z- I. j) J
Elapsed time is 2.126704 seconds.
复制代码
Lu代码:
!!!using["math"];
" ^* Y1 Z) F" }! @( t1 t X
main(:t0,k,i,a,b)=
4 [& j2 A4 N! j9 q# C
{
; T/ C: O- _" w6 m4 ~
t0=clock(),
^6 m8 S% Q. G* p2 ]4 {
k=zeros(5,5), //生成5×5矩阵k,初始化为0
4 s1 A/ [, E( B9 z+ `( k
i=0,(++i<=100000).while{//循环计算100000次
2 V9 K9 ^, R7 {2 F# R% \+ \0 A
a=rand(5,7), b=rand(7,5), //生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
n: ?4 R; q( S8 d8 [
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)
- s5 f/ f1 w% e- _
},
- j8 W8 `, d% c. q
k.outa(), //输出矩阵k
+ R2 c+ P% d( b, c# |) M, M
[clock()-t0]/1000. //得到计算时间,秒
% n- k: r$ h N3 Z8 _1 G
};
复制代码
多次运行,结果约为:
275024 274895 275054 275083 275024
' Q E5 Q; E {# V+ }4 N: \1 ]
274965 275036 275091 275112 274931
* z* o D3 _. z4 X
274975 275012 275020 274963 274939
6 Y8 t K/ b" {! ^" T. O
274981 274976 275117 275065 275044
6 `8 G6 H: F' M( J, A
274920 274906 275005 274972 274920
6 Z- y* f+ B0 Z5 }& N
1.25 秒
复制代码
Lu快于matlab的原因应该仍在于内存管理效率较高。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5