数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal编译计算含自变量的简单长表达式
[打印本页]
作者:
forcal
时间:
2011-7-30 12:07
标题:
极限测试之Matlab与Forcal编译计算含自变量的简单长表达式
Matlab 2009a编译了如下简单长函数,多次编译,耗时均大约为3分钟:
* c/ D) @9 ~7 f. M4 m
& s7 ]5 ^& P3 l& x
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+...
; f! N+ ^) S* ~6 B) [% K
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+...
+ Q' Z7 G2 N- 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+...
# {. N4 P; \/ I/ ?( E2 Z$ T8 T; I
... ...(省略)
4 t- k0 h8 b6 I1 [: 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+...
. d4 ]0 U5 j. B5 m
1;
6 ?$ D; O& k5 S: C# F
+ K% m& i- ~9 u! n) s6 |
完整的程序见附件:
多个x加1的Matlab代码.txt
(136.83 KB, 下载次数: 0)
2011-7-30 12:06 上传
点击文件名下载附件
下载积分: 体力 -2 点
5 M" m1 C7 x6 [9 R
4 K2 Q& t8 \$ M5 e8 E$ F
测试如下代码速度:
tic;
" g) ?) q2 I7 g4 l2 r2 T- ?8 Q
s=0;
5 M8 C- v ?+ P) E3 h
for i=0:1000
4 e2 {; J* A7 o/ ~; e; {
s=s+f(1);
% I1 ]3 r) {8 e
end
4 H0 ?" Z" @' S2 P$ V, P
s
9 N9 @5 R3 P! Y1 F! \
toc
" G4 Q- f" Z' k' |9 u
# F( B0 T! Z" G
s =
5 x& ?# T* _. W
5 H1 }7 k" \# w5 B
67100033
) z. ]% f$ O: c
8 k% J# L% X0 ?, N8 J
Elapsed time is 11.902260 seconds.
复制代码
======================
& r4 J4 p# ?) b' B6 w: B& d: V3 h! v
. d: S4 G/ b) F+ r4 \
Forcal 9(OpenFC演示)编译了如下简单长函数,第一次编译,耗时约0.688秒,以后编译耗时约6.3e-002秒:
( D/ Q) I; Z, T0 B3 [5 j
K( t, }+ L: t. n8 N& T
f(x)=
9 O. o! I1 Z/ p2 Z
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 k1 v1 B- y9 r& X( ^3 L3 h
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+
& s# B* R0 c+ B7 G9 Z
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 S8 Z, o h* A# k) p& Z V
... ...(省略)
) F, Y# W6 }2 [! W; O8 P" [
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 R. C0 o& N! b
1;
; b4 v0 i2 n$ v: H' L9 I
6 ~+ i- @% I# v, W- ~ W5 s7 T: Z
完整的程序见附件:
多个x加1的Forcal代码.txt
(133.36 KB, 下载次数: 0)
2011-7-30 12:06 上传
点击文件名下载附件
下载积分: 体力 -2 点
8 ?" R! g- |3 m7 |8 Z
6 i7 @% R+ j% z* c1 a- x0 k2 A
测试如下代码速度:
mvar:
+ y h: L/ D: ^) V3 w
t0=sys::clock(),
0 L$ z: b. O) X) w; _( H/ J
s=0, i=0, while{i<=1000, s=s+f(1), i++}, s;
6 n$ R- y6 l1 d
[sys::clock()-t0]/1000;
复制代码
结果:
, r( G0 W! v, ]7 t; T, j9 ^# g
67100033.
C+ I7 i2 M4 x9 u( p6 H5 p& |
0.64 秒
, g' ]; c- D& F- H+ q0 |
' r% P3 x9 A. q. O
==================
2 Y/ I1 O2 ?% p$ O) U+ I( q+ S& \
( O% T; a6 l- S5 A [) z% {
可以看出,Matlab运行大的程序,仅编译就会耗费不少时间。
4 k/ Q- J W/ ] W
/ \( Q1 B( N# N0 k/ L
==================
- p3 r' Y, G3 ?' @$ l
/ O1 J$ e1 ?5 d8 H8 `; f `
为什么Forcal第一次编译耗时较长(约0.688秒),而以后编译耗时较少(约6.3e-002秒)?
J0 |: ~* h% |6 V2 w
7 c0 J. b5 ^: K
Forcal编译器在初次使用时,给编译模块分配的内存较少,此时若所编译的表达式较短,则编译所用内存足够用,在编译时就不用再分配内存;若遇到一个较长的表达式,编译模块就要重新分配内存,直到能编译该表达式为止,故耗费了一些时间;以后,若遇到的表达式都短于以前曾编译的长表达式,就不再重新分配内存,故不再降低编译速度。
! W& I' p8 Y& u `% r
7 x J- Y) x0 p+ h
目前,需重新初始化Forcal,才释放给编译模块分配的较大内存,但一般不需要这样做。
5 H6 D. c9 T# e6 b2 {
# v& |8 t( N5 O, Y; c+ g; z) Z5 ~
对于脚本,编译效率和运行效率同样重要。
作者:
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
如果跟导师讲不清楚,那么就把他搞胡涂吧!
; C: R, T" v$ n1 T0 u9 E
, T, j6 d6 A& z. R
来电来函..欢迎洽购...
* C% J0 `% @6 \; ^$ I5 t
作者:
wangchen881202
时间:
2012-5-22 02:12
“拆东墙补西墙”之升级版“拆别人墙补自己墙”
" s0 |& b( h- U1 R* n- h
+ ?$ D8 [- i4 Y( W9 D. Y% q
支持一下
( w. j+ G- v4 A* X* W8 O2 s
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5