数学建模社区-数学中国
标题:
Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试
[打印本页]
作者:
forcal
时间:
2011-11-10 21:43
标题:
Lu数值计算扩展动态库LuMath & 小矩阵大运算量效率测试
Lu数值计算扩展动态库LuMath V1.0:
http://www.forcal.net/sysm/lu1/luhtm/lumath.htm
5 Z$ Q, q4 m- K% l
* H1 a) D( g. e
LuMath 库的数值算法是以矩阵为基础,并进行了运算符重载,具有内存消耗低、执行效率高、代码简洁、实用性强的特点。
- c) ^: N H' A6 x: Q
) T9 Z# y; h% J$ P" h6 n
例子:
* Q# J: [6 B2 }* h! I6 A4 s
3 A8 g6 r( j+ f' y# h. O
matlab2009a代码:
clear all
5 O2 J$ G0 ~/ \: H: _' C4 W
clc
1 V$ O0 Y, L5 `; a9 }. ]$ H
tic
5 L: G* o( ?. L8 J5 M4 I
k = zeros(5,5); % //生成5×5全0矩阵
1 W: D' d& f! p+ R' n( H8 a
% 循环计算以下程序段100000次:
/ v$ x+ V3 B+ U3 q! L
for m = 1:100000
" t+ a! {/ N2 V% u
a = rand(5,7);
5 P, t5 S& ]* F2 E% ?
b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
8 o' e, B& s( j# ~2 ?. d
k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);
) O, ]2 y) g1 v+ G
end
0 F( `; g* c. ~! N
k
1 T% A6 b5 v: M3 l0 f( X! _
toc
复制代码
多次运行,结果约为:
k =
0 k) H8 V( l9 f
5 {( V) B5 f) q/ [- b
1.0e+005 *
- X3 F* ]+ C4 K) i. P
/ u* W9 q4 s: z! y
2.7530 2.7525 2.7509 2.7539 2.7529
' E8 P# t( W% k% m! E
2.7521 2.7494 2.7493 2.7542 2.7476
( L- P$ {* }( R2 J+ M1 g
2.7549 2.7524 2.7527 2.7564 2.7517
& E4 s, N& s) q* k7 L. c0 ]+ O
2.7530 2.7523 2.7533 2.7525 2.7502
9 w1 v2 g: [5 Z6 |. F9 `+ l: G
2.7527 2.7521 2.7505 2.7519 2.7523
5 D; i G( J0 q" @ ]0 Y
8 V G1 }5 p* \7 u: I7 V
Elapsed time is 2.126704 seconds.
复制代码
Lu代码:
!!!using["math"];
7 S$ C6 z v8 `+ h9 E! u8 N# W: m1 @, F$ b8 x
main(:t0,k,i,a,b)=
1 p" d/ B* }7 {- l# @+ p
{
2 I- ~. u2 P) K E1 l+ m) d
t0=clock(),
: G: k1 d8 _' c5 d* X+ z/ w
k=zeros(5,5), //生成5×5矩阵k,初始化为0
. v. _1 L4 P1 [4 p
i=0,(++i<=100000).while{//循环计算100000次
% V( o9 U% X& w/ r, l8 f
a=rand(5,7), b=rand(7,5), //生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
. E' C& a/ c6 _% S9 l+ U2 _
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)
# I* A* `" y$ C* A! v& ]) w, n
},
4 _1 ?9 m/ H, h& [" z
k.outa(), //输出矩阵k
4 ~- c& P; Y' m7 X# v2 ~
[clock()-t0]/1000. //得到计算时间,秒
8 V# W$ y- ^6 |' N k
};
复制代码
多次运行,结果约为:
275024 274895 275054 275083 275024
" C* ]! h1 ?6 A! w6 |5 C! ~
274965 275036 275091 275112 274931
M% v0 d& S( m
274975 275012 275020 274963 274939
* O( E# E% _: ^/ U o( L
274981 274976 275117 275065 275044
- t0 B1 k0 z5 D
274920 274906 275005 274972 274920
0 W6 U0 |) j: x/ s" V
1.25 秒
复制代码
Lu快于matlab的原因应该仍在于内存管理效率较高。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5