数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal编译计算含自变量的简单长表达式
[打印本页]
作者:
forcal
时间:
2011-7-30 12:07
标题:
极限测试之Matlab与Forcal编译计算含自变量的简单长表达式
Matlab 2009a编译了如下简单长函数,多次编译,耗时均大约为3分钟:
+ P1 N# b" Z, G, X" b
$ M# A: _7 w, [ L
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+...
6 a! [0 B+ N( K5 V2 u7 m
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+...
; h1 E. i$ Y: x5 K0 S
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+...
! l, e8 l% D7 [9 J4 x0 f4 d
... ...(省略)
: D# o' k* E# X( 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+ `/ d9 Y; u+ K
1;
8 a ?2 t, M0 C: p# U- l/ P1 w
# d; @' ^$ W" ]* n4 n* A1 [
完整的程序见附件:
多个x加1的Matlab代码.txt
(136.83 KB, 下载次数: 0)
2011-7-30 12:06 上传
点击文件名下载附件
下载积分: 体力 -2 点
8 k' J; y% R% B) D; X) y( Y
4 H. Z7 l9 c, i& `
测试如下代码速度:
tic;
2 c: u' i0 l/ S4 ~5 @" ~
s=0;
' N( B/ ?" T l! a
for i=0:1000
) M0 w2 M9 d0 ~8 V8 q0 H; T, T! J
s=s+f(1);
g! I9 ~0 t+ L+ q) z6 V
end
1 ^5 Z# w. E! D/ e' G
s
" h/ s3 m% h) X6 `
toc
" \# ?. j) \0 v5 X" I2 E. ^
+ c1 Y9 x- A4 w0 M! F/ c9 Y
s =
" h, {9 }( p w6 ~( j
% v, e" U. ~+ u |4 Z
67100033
- A- h" t2 k! Y2 V+ q: t+ S' q
8 H- B1 ` _& y7 U! c9 Q: U
Elapsed time is 11.902260 seconds.
复制代码
======================
: M6 U3 e' L5 a( g; x K
6 P ^; Z( S/ q5 R. j; {
Forcal 9(OpenFC演示)编译了如下简单长函数,第一次编译,耗时约0.688秒,以后编译耗时约6.3e-002秒:
2 }& `+ `" @9 Q6 _
5 n6 F G, T. R- U/ e
f(x)=
; m/ U7 V4 ~- T& ]* d3 l3 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+
8 {& t9 H7 t1 L+ a+ N
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+
- o5 u* w* p F" H. D6 {3 M
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+
" X8 u& ^1 u! G* G: Z* Q7 U; k: h
... ...(省略)
9 {7 j, g( U9 J
x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+x+1+
. G8 w6 ]" ~; Y4 `9 r! q
1;
( P7 C2 U$ h) ], _' P$ O+ |
# h' p) ~3 U+ O( j& o* E# d1 B
完整的程序见附件:
多个x加1的Forcal代码.txt
(133.36 KB, 下载次数: 0)
2011-7-30 12:06 上传
点击文件名下载附件
下载积分: 体力 -2 点
u0 J$ M' l; M& ~$ i
2 O R( L V* S. T6 E
测试如下代码速度:
mvar:
) s8 I) u; ]8 z( a
t0=sys::clock(),
' m6 i* m* d# p4 V B( Z( ~
s=0, i=0, while{i<=1000, s=s+f(1), i++}, s;
6 x- K! R) R7 X) z# Z" c, _
[sys::clock()-t0]/1000;
复制代码
结果:
: N5 A% @+ d, H0 h
67100033.
0 V3 E: v) Q$ }, ^
0.64 秒
1 x/ F- e2 b9 V+ s
0 [& m' L8 q9 k9 K; u
==================
- g: K" o- L: r J8 f# }3 A
8 N" q! m+ P$ R, `8 Y
可以看出,Matlab运行大的程序,仅编译就会耗费不少时间。
3 ^2 x' z \8 p* [0 b
6 b, C% F' E, ^" c
==================
% Q; G- P- l4 S# h, t
6 P, n0 B8 [, b4 C3 C. q
为什么Forcal第一次编译耗时较长(约0.688秒),而以后编译耗时较少(约6.3e-002秒)?
0 C& W) J2 _# Q2 F
/ j# ~6 u8 M- M9 x5 G
Forcal编译器在初次使用时,给编译模块分配的内存较少,此时若所编译的表达式较短,则编译所用内存足够用,在编译时就不用再分配内存;若遇到一个较长的表达式,编译模块就要重新分配内存,直到能编译该表达式为止,故耗费了一些时间;以后,若遇到的表达式都短于以前曾编译的长表达式,就不再重新分配内存,故不再降低编译速度。
5 d1 o$ Q1 S4 L7 X
1 ~ K/ h+ l1 T G9 X9 s
目前,需重新初始化Forcal,才释放给编译模块分配的较大内存,但一般不需要这样做。
6 T7 _, ]1 t+ l' B: G4 y
/ V" e# b, z- H: x( w6 C$ ~
对于脚本,编译效率和运行效率同样重要。
作者:
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
如果跟导师讲不清楚,那么就把他搞胡涂吧!
# w' S4 Q9 z- |: _
7 G1 c$ _7 a0 w, O* B. Q
来电来函..欢迎洽购...
3 Y5 |% z5 ^0 j {/ d7 R
作者:
wangchen881202
时间:
2012-5-22 02:12
“拆东墙补西墙”之升级版“拆别人墙补自己墙”
7 Y: E9 C3 t, q F6 J
! ]* r: _$ m" v' D5 w- l
支持一下
3 E) D7 ^$ V1 _8 S
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5