数学建模社区-数学中国
标题:
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+ b
LuMath 库的数值算法是以矩阵为基础,并进行了运算符重载,具有内存消耗低、执行效率高、代码简洁、实用性强的特点。
9 p. ~" O* J! p' v( g \
0 b. J, b ~ a q2 a
例子:
3 T R+ `: S9 J' \6 y7 l2 X+ O
2 s/ v& G: m* _1 L) i6 v
matlab2009a代码:
clear all
9 `+ h) K2 i' U
clc
7 }* g$ o3 j, H- X! r: _* A
tic
7 j5 M8 I8 b! X z
k = zeros(5,5); % //生成5×5全0矩阵
6 R, l& a5 V# j @9 W1 h* M$ o
% 循环计算以下程序段100000次:
4 `# n/ x+ _2 A8 B
for m = 1:100000
8 U# A X- a7 I- F: \3 P) G
a = rand(5,7);
8 ?9 @2 D$ h. P0 e7 W* _6 n
b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
* a& Y. r$ Z$ v/ K" I9 |% {
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
end
3 _ _# U0 p @) w, k: `1 H. H
k
& b d; I0 [6 {9 e
toc
复制代码
多次运行,结果约为:
k =
/ t( S; K6 E3 L. g. n
( j& J- m% {- s, I& ~
1.0e+005 *
& f/ r: f/ k% a% @9 w5 F
0 `7 p5 }" l1 ?
2.7530 2.7525 2.7509 2.7539 2.7529
/ K% w: E% U! O
2.7521 2.7494 2.7493 2.7542 2.7476
' o L% `+ Q7 W) c( @1 M
2.7549 2.7524 2.7527 2.7564 2.7517
3 }, r" n6 E, @5 x5 o
2.7530 2.7523 2.7533 2.7525 2.7502
2 j. G3 e4 k3 ?, ]- n. h/ C
2.7527 2.7521 2.7505 2.7519 2.7523
, B6 |; b8 j4 k
: `- B4 S$ {: L2 B. {
Elapsed time is 2.126704 seconds.
复制代码
Lu代码:
!!!using["math"];
0 c/ W3 c% W: i7 M. k% x
main(:t0,k,i,a,b)=
8 T$ a. u1 X" [! H
{
2 o$ e( @! Y* }: k" n
t0=clock(),
! y) P7 _% n2 N4 P; ?
k=zeros(5,5), //生成5×5矩阵k,初始化为0
! G6 ?4 k5 I+ P: ^; f% }
i=0,(++i<=100000).while{//循环计算100000次
; {- d& U& V: J
a=rand(5,7), b=rand(7,5), //生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
6 e+ n: z$ L% m7 E
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
},
! R2 r: c6 P) i4 d# h: N0 a
k.outa(), //输出矩阵k
4 H# g2 v3 p L8 A
[clock()-t0]/1000. //得到计算时间,秒
# D) W* v5 X! s# J
};
复制代码
多次运行,结果约为:
275024 274895 275054 275083 275024
2 j4 |) R, S' ]: e5 {* M
274965 275036 275091 275112 274931
3 } Z0 n: G ?6 {2 O
274975 275012 275020 274963 274939
* N' W; ~. v9 @ @. d( H! @
274981 274976 275117 275065 275044
# F3 H0 E# D) C, W+ b, Q
274920 274906 275005 274972 274920
7 ?9 Z' _# W# N
1.25 秒
复制代码
Lu快于matlab的原因应该仍在于内存管理效率较高。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5