数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal矩阵运算效率测试
[打印本页]
作者:
forcal
时间:
2011-8-1 08:00
标题:
极限测试之Matlab与Forcal矩阵运算效率测试
1、小矩阵大运算量测试
, d8 E3 Q. e% s2 a
# ~7 F, W: [2 E0 }3 _/ j& K
Matlab 2009a代码及结果:
clear all
" E- P% _. P6 Z5 O8 d3 B9 j2 S
tic
6 v) j- A/ D6 ? X0 j$ Y, h/ z
k = zeros(5,5); % //生成5×5全0矩阵
7 n& v2 t' o: n5 Y( }5 D
% 循环计算以下程序段100000次:
: n6 A: h# E& t' |
for m = 1:100000
3 b; k* I1 q2 |: C: q7 U- R- f
a = rand(5,7);
0 z* G v# `7 F7 b9 k7 Y
b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
0 X6 T+ ]& B$ e5 ?* z+ l% g. ?
k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);
+ k. b" V; i2 n& {
end
6 r7 k0 P, H; t5 e, ]) b
k
8 o* n# \* K: {4 D0 O
toc
4 }, }1 n. K) q* \ V! D
: q' J x6 O% X! i# z' ~; t
k =
& z0 M; E/ \$ N# l) P3 S. j9 }7 ^
7 {/ R! H+ R7 q. u
1.0e+005 *
' K7 ~8 T- p2 D" a0 k% Q( h& M
0 O: D- O/ {: U5 J7 z
2.7525 2.7559 2.7481 2.7525 2.7511
: U$ ^$ ] Y* y' U" o7 ^+ K; _
2.7527 2.7535 2.7430 2.7545 2.7484
) W" \- l: |2 J) m# v* c
2.7493 2.7553 2.7440 2.7513 2.7485
c3 B+ f' g6 _+ w! A! `) P4 p) {- z
2.7481 2.7506 2.7425 2.7457 2.7460
5 M# ~5 Z2 v( Z8 ~
2.7506 2.7525 2.7429 2.7488 2.7451
! J: W* C$ q- E
0 G' a7 a5 ~, f# S- j$ @
Elapsed time is 1.979852 seconds.
复制代码
===================
. i5 a; { s/ A9 u
" z0 D- Z7 ~5 i0 {8 y- _' n
Forcal(OpenFC演示)代码:
!using["math","sys"];
9 j% x0 }6 [/ y* u+ Q E9 V
(:t0,k,i,a,b)=
- q7 [0 S+ F- N: C+ v+ i% n
{
& a, U" p( l. `+ g; y w5 U4 p
t0=clock(),
8 e+ s. s! f$ X" X1 e& J: d
k=zeros[5,5],
' D9 z3 z0 ^+ D: ]1 |
i=0,(i<100000).while{
2 S/ x. c( \8 e/ y0 T
oo{
6 c3 i. t2 \4 h" r1 c! b
a=rand[5,7], b=rand[7,5],
$ d- R; U7 F# ^9 A* ~( p$ o! W
k.=k+a*b+a(0,4:1,5)*b(1,5:0,4)-a(neg:6)*b(3:neg)
, u5 f# v# y/ i+ Y( i4 ~2 G, N
},
) Q! ?# Y0 E; R/ l6 ?
i++
, m8 f9 V7 Q2 N* k
},
- l' v, c- [- D5 L% ?
k.outm().delete(),
4 q* i# g* H2 r- X, w
[clock()-t0]/1000
( ? c8 W" O$ B0 L# I8 X( t+ G
};
复制代码
结果:
274978 274892 274913 274949 274953
' C% h! M/ Y% U, {: X
274994 275050 275001 275037 274892
" w0 g# n8 ~5 B/ B
275001 275063 275019 274963 274971
2 y. P* {/ g1 b+ E+ z+ W
274945 274999 275017 274983 274982
. o# ]2 H: ~& e" G% P! {
275009 274984 274971 274955 274923
( t" {# L4 }3 L5 g1 Y' S
6 z5 X Z; _8 F: h( U
3.516 秒
复制代码
此类运算Forcal的效率有Matlab的一半稍多一点。
0 N0 \# O. W2 A
* P( X# ^2 H' d) E( ~! g. G
==================
. N& u5 [) d: }; }- v
==================
0 |; O$ T' U5 W$ f" O% Q
5 Y) X% G+ {: |
2、大型矩阵乘
3 g: ~7 z, v* N3 r% y" [. N
& s* V( |+ w" A* k! `
Matlab 2009a代码及结果:
clear all
9 M! X! q7 k z1 b3 n
a = rand(1000,1000);
' n& {6 g( h) U* y* [9 r0 z
b = rand(1000,1000);
/ Z' |$ g* m, C: j! O
tic
9 t: G( j, Z r7 u% S& E q
k = a * b;
9 D' Z& N' u& [% Q5 l4 l, l! f ~
k(1:3, 5:9)
) l: H, V1 }! A% a" o8 q
toc
- K4 @# I# E' z* `! o
( g3 z& Y }$ o# C* W: l6 W" p( T$ `
ans =
4 a$ G4 p6 @2 u: T0 s2 M
- o- E" I4 T: P0 b @0 ?( t
246.1003 244.3288 252.9674 258.1527 243.9345
: e+ D6 ?5 v) [/ V( {/ i
246.7404 236.1487 249.7140 251.3887 246.0294
) w2 t8 U/ n/ E1 _
249.4205 240.5515 252.5847 257.0065 249.7137
, h; ?, N8 a5 n8 N( N
! D3 `& U, j. b3 o8 ]. a, x- V
Elapsed time is 0.310022 seconds.
复制代码
===================
- C6 l6 d& S# |3 c6 o* o1 ?
" K8 V9 P: R, l7 M: |# [
Forcal(OpenFC演示)代码:
!using["math","sys"];
4 X' d- G9 q3 \8 K% u3 F
main(:a,b,k,t0)=
3 G! F$ i0 b6 a& \# s) X( z
oo{
, r. n9 B3 |$ D! [% M" \
a=rand[1000,1000], b=rand[1000,1000],
Z+ u' A+ `4 M# ^
t0=clock(),
0 ?; W/ K, ? s3 C3 t
k=a*b, //矩阵乘
! ~5 v6 c- p3 K# z
k[1,3:5,9].outm()
% p* E- B% o5 X5 D
},
$ D2 R# G' y4 M" I, t! _
[clock()-t0]/1000;
复制代码
结果:
247.009 245.731 242.454 247.412 244.482
( N0 C9 H3 u/ X. z. q
258.268 255.417 253.738 255.159 253.042
- g) z q7 \! y9 x& k7 C3 m
258.088 252.324 248.927 252.392 247.731
4 i# U# M* l7 j; o$ q6 N0 N3 A4 t
+ T! |, B( I" T: \( o1 ~. F* E
2.25
复制代码
此类运算Matlab的速度约是Forcal的7倍多。
Q+ R- q! t( v( C- ~6 Z( j
$ \ m9 F: g o, v, v) j
==================
8 c5 w/ m$ o7 r d- w' ^
==================
! L2 h, A; Q2 O+ ~, @: B6 r7 i7 H4 B
8 a, r7 _5 f4 s( M! x0 t, |
矩阵运算是Matlab的优势。不过,个人认为,矩阵计算速度取决于算法,矩阵算法只是众多数值算法的一种,不属于语言的基本特性。然而,拥有高效的矩阵算法是matlab的骄傲,就像优化算法是1stopt的骄傲一样。
7 B" ]5 x! W' M0 A+ H
# A% k) u( Q7 {4 o
Forcal的矩阵乘是用普通的矩阵乘经过改进而成的,效率自然低,但所有的数值算法包括矩阵运算是由Forcal扩展库实现的,只要有高效的算法,Forcal便可大展身手,为所有这些算法提高更高效的服务。
8 m7 |- k. L5 Q5 s
# H7 a( d& c2 H0 C( }+ _
除了矩阵运算,Matlab还有许多非语言特性的优势,例如函数图形功能(不包括其GUI,Forcal是嵌入式脚本,C/C++、Delphi等的GUI就是Forcal的GUI)、符号计算功能、控制仿真、金融建模等等。这些实用方便的算法模块使matlab获得了广大用户的青睐。
作者:
chairong
时间:
2011-8-1 10:38
这个不错啊 嘻嘻。。。
/ E2 r# P2 u8 X
! F. ^& B% L4 b6 w
作者:
发现者2011
时间:
2011-8-1 14:04
henhao ............
& w( P/ g, ?$ g; ]
作者:
碧天云淡
时间:
2011-8-1 16:42
matlab的优势很明显的
作者:
alair005
时间:
2012-2-7 13:01
支持一,下楼主辛苦了
45578073860093
作者:
zcBCuikgh
时间:
2012-8-11 21:27
济南夜场招聘,济南翰林商务会所招聘夜场模特佳丽13156404415,400每台,小费日结无押金。qlktv.net
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5