数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal普通函数调用效率
[打印本页]
作者:
forcal
时间:
2011-7-31 10:18
标题:
极限测试之Matlab与Forcal普通函数调用效率
数值计算,例如微积分、微分方程求解等存在大量的函数调用,故高效的函数调用对数值计算软件来讲是至关重要的。
' |* u- b+ V7 T3 A+ Z
9 v9 a# Z7 C) y4 j4 E; `
============
/ y$ }% w8 u( T Z- e3 Z! t
. M2 D- d" F0 y8 Q1 ^2 V: g7 x6 Q
Matlab 2009a的测试代码:
f=@(x,y,z,t)x+y+z;
& J$ y( S: T" w5 {* q! P* X
tic;
! C7 I5 _. V3 J' L h% H: Q
s=0;
- j" E4 ?' X( i% J( v" e
for x=0:1000
- z! r+ ^( `) {2 M# Z F! Z
for y=0:100
8 z( g* C& f( E# `. r
for z=0:100
6 S6 M8 c6 a+ M) M9 B
s=s+f(x,y,z);
# T( d L6 F- Y
end
' K0 s- P: v; v+ H( q7 T2 |2 G& J
end
5 _4 P" ?* _& c0 t* B3 {) R
end
1 I4 t8 G3 ~5 l# T, U
s
7 h: i, M+ V8 x& T. f8 a( L* z, K
toc
% |$ T( T; V6 C; x3 M( O/ ~
# r M+ \8 O L
s =
6 {1 e2 p1 m* S. m* P9 W
6.126720600000000e+009
4 @. M: }9 c0 |2 Q. Z( {' x
' s: P% D3 O! N! A0 I5 U& i7 E
Elapsed time is 9.546717 seconds.
复制代码
发现将函数写成m文件后效率会提高,如下例:
) Z9 i' Z+ b% [. \4 P
m函数:
%file xyz.m
. H4 A I3 l; ^9 ?8 y
function c=xyz(x,y,z)
/ I# ]2 g8 k4 O1 v$ T2 Q5 k1 d
c=x+y+z;
( O& x5 P4 y6 \, S) o- M9 z
end
复制代码
测试代码:
tic;
- o2 l. d" X& J: ~
s=0;
- N, e$ O' I1 H
for x=0:1000
; I' S' e9 B4 F- h4 M
for y=0:100
2 l& B: f, P. x7 g8 `# s
for z=0:100
$ L3 N! f W6 C. p( r# G. G
s=s+xyz(x,y,z);
; L, I, b" K: n! J& R
end
U* Y. \. i5 N, S8 |0 b$ g$ e& u
end
' U6 h" z: w; p! Y/ S" t
end
% o/ J/ f, I& w/ y. `
s
+ M- L: {8 a" s! N6 u( H( y- v
toc
! i4 L% e! z) V$ o9 A, ^
$ s7 I3 Z# Y9 ^
s =
o* m* c% X. w" l
6.126720600000000e+009
; x; O2 {2 o" H& D
) i5 l( p9 b) v: b
Elapsed time is 4.724592 seconds.
复制代码
==========
# p8 I! \7 _- x; n+ v) F
# q/ F3 e9 N: V' u2 Q
Forcal 9(OpenFC演示)代码:
f(x,y,z)=x+y+z;
0 S: k$ m6 U+ f$ l2 O' Q
mvar:
7 o# R9 G0 n) a2 h6 J
t=sys::clock(),
, z6 B3 Z8 `3 V2 a( [, G
s=0,
: j- F8 ^( N3 w4 I( u
x=0, while{x<=1000,
0 Y; @# T a& ^* c
y=0, while{y<=100,
9 S! K G/ f# W4 K7 T
z=0, while{z<=100,
) }0 T U: h' T3 h* z1 \, F8 c
s=s+f(x,y,z),
. s+ c4 d8 t8 q8 }& b2 b) G( R$ ~
z++
+ r: q, r: ~6 f; o
},
0 t* L; t4 N: U5 O
y++
# \/ [4 H/ }: w$ f" ~1 d
},
6 B4 B5 O2 ~' [8 }; N% o5 B
x++
# W$ n3 ?; J8 j( N, x) a
},
( e- k- j3 J2 A6 ]7 |- j
s;
& A' ^' E- O+ A% x0 K8 s
[sys::clock()-t]/1000;
复制代码
结果:
: ~# e2 P% A" [6 L7 ~( e) L
6126720600.
) y: P/ J7 i( l$ E) j- E
1.109 秒
5 V9 R1 D, q7 |; T( l" |. l- F
- a* K# [: R4 n7 {7 c6 y; u
二者效率有几倍的差距。
作者:
ehi28
时间:
2011-12-20 02:04
嗯,不错,支持一下.
+ |& e+ R7 O) @
作者:
alair005
时间:
2012-2-7 13:08
看来只有纯支持啦~~~~~~~~~~~~
5724979042219687
作者:
hxftntA
时间:
2019-5-28 17:44
* ~$ @8 ?5 P4 T
2 n$ j) t+ |' Q: W7 {3 k
" r' {( Q/ s2 E6 o# W5 P O
# F" I, a; e: ^) I: T
% b! b6 ~/ W2 P* ^5 n
( U' Y) y4 T; p) U0 O, [
$ r$ x% f. d% z B% l7 B) Y
" ~; E) i) ~( |: H0 F4 V
4 R' a0 I! J( [: z2 t. O2 {
1 f' P( s- w% F) B
% o. t" C) @) F" W2 Z
4 q6 k- _5 z' F& D. z7 O) P
6 ?% i" s; n6 H# g! h
. k+ H% T. R3 x
% j; R" m! ^# w; Y! b
; M* X& z$ y7 f, `0 c
- G" Z8 |: u8 X: e* K. T
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5