数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal编译计算含自变量的简单长表达式
[打印本页]
作者:
forcal
时间:
2011-7-30 12:07
标题:
极限测试之Matlab与Forcal编译计算含自变量的简单长表达式
Matlab 2009a编译了如下简单长函数,多次编译,耗时均大约为3分钟:
2 P7 Q0 ?5 [3 t+ T
" T( t" X z' Y
f=@(x)x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+...
3 |& u5 S3 B. f, @6 V
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+...
+ f& k- @' x7 i# Z, O" k/ O- y, V
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+...
( d& W1 M, U' ~1 Y% @' T$ H9 D+ _2 m
... ...(省略)
3 J, I a8 |) K9 f/ R8 C
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+...
4 J9 q+ u! O6 {0 l" y* W2 z4 j& O9 z
1;
! i8 d" R8 e& N
& C! F2 f6 H: E; M
完整的程序见附件:
多个x加1的Matlab代码.txt
(136.83 KB, 下载次数: 0)
2011-7-30 12:06 上传
点击文件名下载附件
下载积分: 体力 -2 点
* }$ I, w6 q* x, F9 c% T" ]0 @# o, T
S% l4 x1 h3 v4 L. e! B
测试如下代码速度:
tic;
3 z" i( U7 Y/ z `; ~. s: N2 b
s=0;
' E, K, \0 y8 f Y" _! n [3 v, M
for i=0:1000
5 L3 J0 q4 _# X5 i! D
s=s+f(1);
/ u- g0 M6 o6 b7 q u- V
end
" V0 W8 p3 _2 E- ^8 {' o/ a
s
2 v# ]" z b3 x3 l+ I
toc
# X# o* R! }6 r5 ?0 d& s
" V$ M/ m2 f7 e/ @
s =
) w3 ]- j9 I9 [! G5 m
: @+ Q) f: j8 j2 t. v
67100033
' Q) p8 W2 {2 o) P' V2 e/ F
; }0 R, k, S( f/ R- N: m6 S* J: g% h
Elapsed time is 11.902260 seconds.
复制代码
======================
& C! n! @$ |( h: U! i4 D
4 F8 e |! {& Y6 h% S
Forcal 9(OpenFC演示)编译了如下简单长函数,第一次编译,耗时约0.688秒,以后编译耗时约6.3e-002秒:
4 f; W3 |8 R! O! l0 Q. r/ h
% d3 o5 R8 B; w3 l: [ {0 R
f(x)=
: q3 Z: b" z$ y% \
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+
; r5 R) s0 d* J' |# U
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+
. n+ s3 V( P$ S, i
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+
9 |7 N& g. O' C* a* p% K5 P* j7 {
... ...(省略)
. e7 @' D( m+ J, v' Z* V/ _; R
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+
2 H# u! F9 P( N7 u
1;
6 M, l0 b4 x) ]
9 d' Q5 g# @7 w' N% q9 n; _% Z
完整的程序见附件:
多个x加1的Forcal代码.txt
(133.36 KB, 下载次数: 0)
2011-7-30 12:06 上传
点击文件名下载附件
下载积分: 体力 -2 点
9 v) t+ y+ V" M2 c- r0 [
: y( D3 a# \/ q" o
测试如下代码速度:
mvar:
; D/ P! g9 U5 M) `9 L7 C. }
t0=sys::clock(),
+ @6 Y5 [- n8 Z
s=0, i=0, while{i<=1000, s=s+f(1), i++}, s;
5 G% l' P+ v2 s- t/ ^
[sys::clock()-t0]/1000;
复制代码
结果:
# R6 ^+ f% K" H) i& @0 B1 }
67100033.
6 ^- ]+ e8 F8 u9 j f2 t
0.64 秒
+ Q9 y& i+ t: K1 t, u s! i3 M9 T
4 p6 i4 y3 R, U+ f: ^2 q ]
==================
. u8 F4 Q+ p7 U+ b' N, f
/ w" J$ |- Z( Y7 h8 p7 D- A8 u
可以看出,Matlab运行大的程序,仅编译就会耗费不少时间。
: A1 x6 J6 A9 ~ y$ i Z7 R
3 J( M. j$ _3 p: F- q* V
==================
0 { F( d6 ^9 E
9 Q. q& p; m$ d; o- V( J
为什么Forcal第一次编译耗时较长(约0.688秒),而以后编译耗时较少(约6.3e-002秒)?
9 V2 l) G# L d
5 D0 |9 Z G: d. Z
Forcal编译器在初次使用时,给编译模块分配的内存较少,此时若所编译的表达式较短,则编译所用内存足够用,在编译时就不用再分配内存;若遇到一个较长的表达式,编译模块就要重新分配内存,直到能编译该表达式为止,故耗费了一些时间;以后,若遇到的表达式都短于以前曾编译的长表达式,就不再重新分配内存,故不再降低编译速度。
# Q$ f. u4 B( n
, R5 D5 [% M" u7 a9 Q( j
目前,需重新初始化Forcal,才释放给编译模块分配的较大内存,但一般不需要这样做。
1 F8 T0 a- C7 h
( _$ b: X. |* ?$ E3 O7 P) d0 Q/ @
对于脚本,编译效率和运行效率同样重要。
作者:
jmedwardliu1205
时间:
2011-7-30 22:40
geilivable
作者:
alair005
时间:
2012-2-7 13:16
谢谢楼主分享!!!
7678657192398405
作者:
安平池伟
时间:
2012-4-16 13:00
没来得急看,应该不错,先帮你顶
作者:
yunbuhuiku
时间:
2012-5-18 07:53
如果跟导师讲不清楚,那么就把他搞胡涂吧!
- n$ L1 F9 ^9 [% Z- ~" l! m
' V. e. u4 @, }+ V }
来电来函..欢迎洽购...
& A9 R# [& N6 g E: V" S
作者:
wangchen881202
时间:
2012-5-22 02:12
“拆东墙补西墙”之升级版“拆别人墙补自己墙”
8 I8 l2 y( U* G) \# p" ~, T
+ _- {) x0 s7 I) m: ?# T2 s
支持一下
" q. K' d. M8 G1 m8 R4 _
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5