数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal编译计算含自变量的简单长表达式
[打印本页]
作者:
forcal
时间:
2011-7-30 12:07
标题:
极限测试之Matlab与Forcal编译计算含自变量的简单长表达式
Matlab 2009a编译了如下简单长函数,多次编译,耗时均大约为3分钟:
( m8 _$ E4 O' b* L0 ]( g
' J* E& f2 [( L- v) V7 j/ r. i9 }( x; Q
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+...
( K; L% v3 H+ [0 Q p, L
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+...
1 T3 J! h+ ]! h" F) A& s2 n: W# Q
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+...
* n4 I" B* ^, y2 M7 E9 m. H# @
... ...(省略)
* h1 D: ?1 k2 k, K( w
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 C% a5 }$ F/ n- O
1;
9 f$ ^8 Z* X- q+ b* h# |; M
6 H q8 g: w# C( t: t
完整的程序见附件:
多个x加1的Matlab代码.txt
(136.83 KB, 下载次数: 0)
2011-7-30 12:06 上传
点击文件名下载附件
下载积分: 体力 -2 点
3 K3 {$ A9 {% Q: n
* p- x% B) d/ l5 Z6 d
测试如下代码速度:
tic;
' F' P$ ?8 `2 a# i7 @
s=0;
4 j! k! k2 f) R9 f+ s1 Q
for i=0:1000
; U- E" Q: I$ }
s=s+f(1);
5 D* d) C3 ^! z" B, W! M7 A
end
H6 G) J& ^# u1 G- I. ^
s
0 _/ u B6 z( a3 g" m) ~5 S, H2 v
toc
9 l8 g; h' s: u1 m8 q" A! c$ p3 J
& h! `) @- B4 k: o- O
s =
! M, J3 C5 d) N- R% t* N" a
1 P. k6 g) k: m' r7 H; h+ H, t
67100033
/ ]% C7 w7 j5 @; g0 v
4 q$ I* Z7 X" g; K' N$ N- D, l* S
Elapsed time is 11.902260 seconds.
复制代码
======================
- e% z+ k) g+ |! c* J9 ?8 Q
* p5 b6 R7 H: i1 m$ u( V
Forcal 9(OpenFC演示)编译了如下简单长函数,第一次编译,耗时约0.688秒,以后编译耗时约6.3e-002秒:
2 D. m* v% C1 t) R2 ^
$ O* B0 G( W+ N" \# M x
f(x)=
- M5 ~' B/ E, u0 }( t- ?6 ^
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+
- Y0 Y; ]8 s4 c/ W1 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+
+ |8 q7 j) l% b
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 [4 u! X( J* H$ k
... ...(省略)
3 f" k' A% { O1 ^ p5 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+
t+ |. | Q5 i) b7 E" \
1;
% u- T! f X/ s& `0 f- S
1 v! `/ G: C; O
完整的程序见附件:
多个x加1的Forcal代码.txt
(133.36 KB, 下载次数: 0)
2011-7-30 12:06 上传
点击文件名下载附件
下载积分: 体力 -2 点
: C9 ~* b7 e7 G: O2 j
8 ^4 X/ s/ d& _4 V) ?7 c
测试如下代码速度:
mvar:
6 G* _7 V- n8 b C5 W# G% j
t0=sys::clock(),
g, Y' R, u% Z8 D- @
s=0, i=0, while{i<=1000, s=s+f(1), i++}, s;
) j- H2 y+ e) w( }
[sys::clock()-t0]/1000;
复制代码
结果:
4 S1 I6 N" ~$ N2 ]
67100033.
! `; n% s4 _/ Q
0.64 秒
. Q! B1 u, X* T w5 S$ l
7 \. ~# k) J+ F( |: m9 @2 W8 X8 _
==================
" N, z# I3 D+ A, P
- x+ K; ~% I1 q/ b+ g1 ~, F; ?; I
可以看出,Matlab运行大的程序,仅编译就会耗费不少时间。
3 [% Y* g) X/ m) L2 O+ F X m
( C+ l1 `1 t8 u# J! j% T/ O
==================
" Z# ]0 I. m0 r! i6 A# n
" `6 ?5 M8 l5 A/ A6 K d, G4 V
为什么Forcal第一次编译耗时较长(约0.688秒),而以后编译耗时较少(约6.3e-002秒)?
7 P( h. a, E9 i, O) u4 w4 O9 i) ~
! Z: H2 ^ p6 _. H9 P. z3 |, m1 K
Forcal编译器在初次使用时,给编译模块分配的内存较少,此时若所编译的表达式较短,则编译所用内存足够用,在编译时就不用再分配内存;若遇到一个较长的表达式,编译模块就要重新分配内存,直到能编译该表达式为止,故耗费了一些时间;以后,若遇到的表达式都短于以前曾编译的长表达式,就不再重新分配内存,故不再降低编译速度。
7 p3 Y+ j# c P2 g& B
8 s; I$ V( Y$ g. F0 Q0 [, Z5 A
目前,需重新初始化Forcal,才释放给编译模块分配的较大内存,但一般不需要这样做。
' f2 j" C5 D( t0 I' K6 D* \
8 y; D3 @9 w2 w' g: O C4 X
对于脚本,编译效率和运行效率同样重要。
作者:
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
如果跟导师讲不清楚,那么就把他搞胡涂吧!
5 N& l! l$ H. P( W+ H# k
7 K. b! [' ?9 L9 Y6 N0 R3 g9 v
来电来函..欢迎洽购...
) L0 ?6 n: v) I; U7 T, {9 w3 A
作者:
wangchen881202
时间:
2012-5-22 02:12
“拆东墙补西墙”之升级版“拆别人墙补自己墙”
+ }6 }6 v" O4 z0 E
1 W! {8 y2 S% y1 w
支持一下
& ^6 F2 e7 Q d: b& f2 l& X
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5