数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal普通函数调用效率
[打印本页]
作者:
forcal
时间:
2011-7-31 10:18
标题:
极限测试之Matlab与Forcal普通函数调用效率
数值计算,例如微积分、微分方程求解等存在大量的函数调用,故高效的函数调用对数值计算软件来讲是至关重要的。
7 b+ T8 [+ L1 i9 M! E, {
% J: Q4 E" ]6 {, A
============
3 I* _; F1 x2 ~! j1 d8 a
" ]' p2 Z7 k% S- O1 }
Matlab 2009a的测试代码:
f=@(x,y,z,t)x+y+z;
' U. J0 Q7 B( Y( c
tic;
# t% S! `3 o9 f1 D O- ^
s=0;
8 ~1 @* S3 h" a" b
for x=0:1000
4 C+ K$ S8 s# m, B3 r
for y=0:100
/ m7 O- [" }5 J7 |7 v# h* G
for z=0:100
# {( C% l$ H8 m% {) K. J
s=s+f(x,y,z);
, j; u, i$ F, \9 Y% b$ w
end
3 X6 l% n# ]7 _2 X0 v; P3 m
end
5 c$ C2 [6 ~' O% O6 z
end
O: O! z- z7 N+ H4 f
s
* w9 D% z) Z4 P% M O- X
toc
6 [7 [8 H; P- {" o* ]* U
2 t% T0 s& Y1 ~: B
s =
, G+ X7 E- ~( [ I$ c+ G s
6.126720600000000e+009
( m: f% m2 j; {- t, |$ P5 Z
/ H7 ~, }" I8 b' Q1 W9 F
Elapsed time is 9.546717 seconds.
复制代码
发现将函数写成m文件后效率会提高,如下例:
7 |1 s+ {: @ u. b/ E* I
m函数:
%file xyz.m
9 e1 a' g; \) K% c2 d6 ?. i9 D
function c=xyz(x,y,z)
9 m$ _4 A' e9 P2 D2 p$ M
c=x+y+z;
( o/ ~( {2 }7 o" M. ~
end
复制代码
测试代码:
tic;
2 ]4 U1 ?9 y: P
s=0;
/ J' t0 o c Q) N
for x=0:1000
/ e2 v3 M3 n2 I% R: V
for y=0:100
: X3 |2 I9 l6 T6 |( }" a/ H
for z=0:100
& j+ `7 }7 a. M; d$ ^
s=s+xyz(x,y,z);
" s' V# [! t! H
end
* Y# `; U3 _8 r; C
end
' b `8 U# P8 N+ a
end
( K8 K% L+ b$ ]# i
s
& L% N# [/ |' P h0 Q6 `
toc
/ K+ ]3 P/ g9 z- ~" V
% N' g' x u2 A
s =
9 z$ I% T( p) B: X
6.126720600000000e+009
( q. w# i/ X6 S- P
! `0 y$ d" a3 D5 n2 U2 J0 k, U
Elapsed time is 4.724592 seconds.
复制代码
==========
8 I) p3 S6 {2 n4 W
( [' m/ D# x& K' S( C+ G% ]; g, j
Forcal 9(OpenFC演示)代码:
f(x,y,z)=x+y+z;
' s9 R P% E& o. [& {
mvar:
, g( k, x9 E! u0 Q1 ~) m
t=sys::clock(),
$ R' p% G/ P/ e' D6 g: N
s=0,
4 X) p- Y- v+ n( \$ F/ h1 ]0 p
x=0, while{x<=1000,
2 x/ a# S0 L+ e( J
y=0, while{y<=100,
; V* v+ `- @+ P4 P" x# C/ d
z=0, while{z<=100,
- T6 o* {% I; _$ @
s=s+f(x,y,z),
+ Q6 k2 R/ k9 t/ n% Y
z++
" s+ \4 I* s+ u" ]7 W; m
},
( U6 L5 h. c( Z" y* {3 ~
y++
. K3 r$ J& q9 D; l! l/ S
},
( h7 @# U2 M5 A2 S+ A, N
x++
! U9 I# v. [* `. E3 Y% ]! c% [
},
6 j. Y& J. T& }+ L: @7 P9 f% K
s;
" J& B0 M4 K; p
[sys::clock()-t]/1000;
复制代码
结果:
( ]5 k$ T5 V) Y$ C* \, |
6126720600.
1 Z" c) c# w5 F, Z) O# z0 }
1.109 秒
# j4 F a) n \$ Y }
) ]3 U6 k+ ^, O
二者效率有几倍的差距。
作者:
ehi28
时间:
2011-12-20 02:04
嗯,不错,支持一下.
! s* U* H; C' S
作者:
alair005
时间:
2012-2-7 13:08
看来只有纯支持啦~~~~~~~~~~~~
5724979042219687
作者:
hxftntA
时间:
2019-5-28 17:44
1 o% T6 @0 z1 l! v# K
; ^0 X! T& k7 z( r
4 ^ Q5 e8 g0 X7 _
0 f1 {/ K. p7 ?: H. L6 l
% {# w4 i7 V N0 p8 v) J
9 z7 s+ c) y' B2 x6 m
% h; B* q/ }% }
/ w5 U' p" G" z$ r% D" d+ M3 }' `
) H: A8 m0 [7 E* J& W" F
1 ^% u8 l9 m( ~! e: Q/ a
: w+ B: v. s# ^% M
/ S8 d8 k* p! b$ g% J T
: v* B/ s8 U% ~8 K" F4 ^' c
# v( o/ L: f# t5 E! z
7 G9 j- r" n9 y% Y
/ n6 r; z1 @2 {. S( C& g
. I7 }7 ^4 C6 G5 a- Z
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5