数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal矩阵运算效率测试
[打印本页]
作者:
forcal
时间:
2011-8-1 08:00
标题:
极限测试之Matlab与Forcal矩阵运算效率测试
1、小矩阵大运算量测试
8 e3 V, C( M# J& D! x& U3 M
- h% `( V% _& u) a* t$ ?
Matlab 2009a代码及结果:
clear all
( x; b2 T9 C$ Z. k6 W g, {
tic
" U/ g- b9 z& c6 Z, Z' }6 z1 k
k = zeros(5,5); % //生成5×5全0矩阵
/ n6 Q3 D3 u& g+ w3 B: Y O1 V
% 循环计算以下程序段100000次:
9 R; @+ x( I6 I" k( o4 M2 W
for m = 1:100000
$ \1 V( W1 Q% J6 _5 H; m" t# ]
a = rand(5,7);
5 K$ v! T# y" ]" Z
b = rand(7,5);%//生成5×7矩阵a,7×5矩阵b,用0~1之间的随机数初始化
- L/ a# R! m1 e1 n) y
k = k + a * b + a(1:5, 2:6) * b(2:6, 1:5) - a(:, 7) * b(3, :);
: n0 I1 r; p, U* _2 `9 { @3 O- m$ Q
end
! Y8 W0 w: \* q' a9 A
k
+ b0 L4 \. v9 O$ L
toc
# Q. i1 j8 `: ?6 v& ?
% m4 j% J: |& C+ V: b3 u+ w
k =
' K- D2 U) b$ t- q t( d: G0 w& q
' a/ J( j! W" E8 h* e. \- R
1.0e+005 *
8 K2 Z, u: ?8 I8 n. @* u) m0 g/ P
! b. N6 x- J9 n% V* H% a) x) R$ Q
2.7525 2.7559 2.7481 2.7525 2.7511
' h3 ]( Y! f+ l* _+ ]* c# d
2.7527 2.7535 2.7430 2.7545 2.7484
! p; O$ P9 J- ]4 X- h( m
2.7493 2.7553 2.7440 2.7513 2.7485
; w- `8 n8 z, ?3 ]. e5 a/ P
2.7481 2.7506 2.7425 2.7457 2.7460
, [8 @; C$ G/ L9 ^
2.7506 2.7525 2.7429 2.7488 2.7451
9 c; o7 t2 t, W# P1 \
2 x1 F1 R* i0 j9 n0 _, l
Elapsed time is 1.979852 seconds.
复制代码
===================
- b" d3 F ^' r" ]; O$ A8 I4 W
# A% o9 G; L6 P7 ~& l7 G
Forcal(OpenFC演示)代码:
!using["math","sys"];
9 u a5 a& b& W" p* {
(:t0,k,i,a,b)=
8 V' [& D m6 I% b
{
! f5 @2 a5 t2 e9 c2 h- G& J a
t0=clock(),
9 [6 E+ j/ z4 P/ a
k=zeros[5,5],
" m9 A7 I4 @$ w, N5 Y
i=0,(i<100000).while{
; e2 m# ^' X5 i5 d' |
oo{
X4 p3 k( d7 Y/ d" | L
a=rand[5,7], b=rand[7,5],
) H6 A# O% ]0 ~/ G: X
k.=k+a*b+a(0,4:1,5)*b(1,5:0,4)-a(neg:6)*b(3:neg)
: ~9 I3 k$ O4 m; }
},
' G5 N4 Y3 p9 Y. ]9 O
i++
' W1 w- N0 Y* e8 o8 @- ~
},
4 A$ C$ W" [( `8 E# ^
k.outm().delete(),
5 H4 L. W, e; q. l
[clock()-t0]/1000
% q: N9 ]9 c6 Q7 X7 ]
};
复制代码
结果:
274978 274892 274913 274949 274953
- u4 \3 O. F( h9 k0 n% ^
274994 275050 275001 275037 274892
5 U* |* d& C/ ]+ [
275001 275063 275019 274963 274971
* u* w3 P+ A9 N7 Y; O3 _
274945 274999 275017 274983 274982
$ p" s7 {% e+ y. g
275009 274984 274971 274955 274923
; z Z o0 F: y2 M( B; @/ [/ s
+ W9 {1 {! p6 V7 O, e+ P
3.516 秒
复制代码
此类运算Forcal的效率有Matlab的一半稍多一点。
3 ?. c$ T/ W# A1 t2 [% {
5 d( Q" c0 \/ Z+ |
==================
$ {' r) r+ k5 _/ N4 @1 s
==================
[5 R% |; [2 Z1 o; L: L! `
& O* c2 B$ O0 p& y U( I( A
2、大型矩阵乘
$ Z% u% _8 |% v5 @$ }
3 t, [* Q N2 I. n n) w
Matlab 2009a代码及结果:
clear all
. P0 `& h6 ~! `% ^& Q' T7 a
a = rand(1000,1000);
, K1 l; R% [- B: W4 {! _! {/ Q
b = rand(1000,1000);
* N- s+ j5 E; F# w0 S
tic
$ m' u0 X% P- h$ ~2 t
k = a * b;
# w8 [0 k* ^- V/ u" W% W$ O
k(1:3, 5:9)
3 Y3 A* K/ G: F, [5 x
toc
& }9 J0 h" N6 ~$ x7 @
, S, c& K' o8 r5 @& g' t( S' r
ans =
/ y1 u. i! [3 I) q0 U. s( ~( y% ^3 L
9 P2 V( z: r; R7 U- `
246.1003 244.3288 252.9674 258.1527 243.9345
' x" O5 h; R- A" d
246.7404 236.1487 249.7140 251.3887 246.0294
" P2 e; d# ?2 l
249.4205 240.5515 252.5847 257.0065 249.7137
1 I0 Q( g2 M. e" N/ H0 B; ]% i
& K6 U9 Y, z4 i$ Z& J# N" x3 G+ C/ V
Elapsed time is 0.310022 seconds.
复制代码
===================
0 r4 b% w0 b5 Z+ u3 R8 ~' u8 B
# i9 T; [: j" q
Forcal(OpenFC演示)代码:
!using["math","sys"];
5 T2 [/ Y8 L. j! P# C& C" u+ d
main(:a,b,k,t0)=
8 u! ^2 `- L3 w; |$ C" a
oo{
- l n* c. U% X/ M" I: [
a=rand[1000,1000], b=rand[1000,1000],
/ R- E( B8 k c6 C$ I
t0=clock(),
; \ q0 r7 V- H5 l3 c( d. G4 S- D
k=a*b, //矩阵乘
* Z6 I3 D c- T" @( y+ l/ i# y
k[1,3:5,9].outm()
( v" {" Z8 V* |% _" Z
},
! ^: N( F! ~: A
[clock()-t0]/1000;
复制代码
结果:
247.009 245.731 242.454 247.412 244.482
6 n/ F5 y/ k% F+ d- ?, E
258.268 255.417 253.738 255.159 253.042
I0 o6 i+ j3 R) ]: m
258.088 252.324 248.927 252.392 247.731
% w, ~9 M$ P. r0 I( f/ T
& q: L- V3 a+ e1 G* L
2.25
复制代码
此类运算Matlab的速度约是Forcal的7倍多。
5 {9 U0 e; ]1 W0 r" L+ c
! f- k# X& W; I$ Z: B( G: _$ N" g
==================
: `0 }" Q9 [: y$ Q! p$ O& i
==================
! }- s" k# u* }2 | E
# s* C% _/ I9 M j+ S
矩阵运算是Matlab的优势。不过,个人认为,矩阵计算速度取决于算法,矩阵算法只是众多数值算法的一种,不属于语言的基本特性。然而,拥有高效的矩阵算法是matlab的骄傲,就像优化算法是1stopt的骄傲一样。
" V: G( Z. e8 ~. ^" D5 f
, ^1 v! z* p8 r0 G* e) }; E
Forcal的矩阵乘是用普通的矩阵乘经过改进而成的,效率自然低,但所有的数值算法包括矩阵运算是由Forcal扩展库实现的,只要有高效的算法,Forcal便可大展身手,为所有这些算法提高更高效的服务。
+ }( u$ L' j: x2 @! F
8 E: U G% |1 ~" Z# ^: m$ ~
除了矩阵运算,Matlab还有许多非语言特性的优势,例如函数图形功能(不包括其GUI,Forcal是嵌入式脚本,C/C++、Delphi等的GUI就是Forcal的GUI)、符号计算功能、控制仿真、金融建模等等。这些实用方便的算法模块使matlab获得了广大用户的青睐。
作者:
chairong
时间:
2011-8-1 10:38
这个不错啊 嘻嘻。。。
3 H3 R3 j" p" D
7 u/ N C* Z. t4 }6 q
作者:
发现者2011
时间:
2011-8-1 14:04
henhao ............
+ h5 m! `) r _1 ?
作者:
碧天云淡
时间:
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