数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal动态生成函数的效率
[打印本页]
作者:
forcal
时间:
2011-8-3 07:40
标题:
极限测试之Matlab与Forcal动态生成函数的效率
程序动态生成一些函数,然后调用这些函数,体现了脚本的优势。
/ o$ D, r; [$ b( j
/ t( T) u' V( b7 g+ U' y4 q
以下Forcal程序动态编译了函数 f(x,y)=x+y ,然后执行该函数,共进行了10000次。
!using("sys","string");
2 U* A# z9 G" M2 P0 ~0 S
mvar:
: W, S5 y& E) x l( z% U, _
t0=clock();
8 M. k2 _9 @* I' r
main(:pf,a,i,s)=
# C2 \! F: N! I
oo{pf=fcfor()}, //申请保存Forcal表达式句柄的FcData数据指针
G" S( g+ i4 k9 J5 Z+ q
s=0, i=0,
' p# g. q& z: U- r+ a% G
while{++i<=10000,
1 h7 v/ }! T! }! r+ {
oo{comfors(pf,ws("f(x,y)=")+ws("x+y"),2,100,0,0)}, //将Forcal动态字符串编译为全局的实数表达式
7 Z: l% l+ R! z4 J4 B- }8 W5 R
a=HFor("f"), //获得函数f的句柄
4 x% M1 \$ P: U4 Y
s=s+a[1,0] //动态调用函数f
0 l- y" m( W( R: M; Z j
},
i* S6 \1 _8 E/ N% _+ u
s;
/ l( ?- U0 a% o8 ]/ |: l
[clock()-t0]/1000;
复制代码
结果:
+ a. G5 ~2 }( D9 I
10000.
1 k% F [$ f& A* O4 r _
0.359 秒
6 D" U1 R: q8 D( A
) k' X6 Q6 ?9 L; p4 ~
matlab完成类似的功能参考:
http://forum.simwe.com/archiver/tid-983780.html
: @4 U, H+ t3 T: E/ R3 K* |. | [
, X: p; ^( \' y6 u
由于matlab的函数必须存为磁盘文件才能使用(这应该是一个很大的缺点),故动态编译运行的效率必然很低。
) c3 L6 ]6 f) w5 D% ]: I
3 ~3 v# d- Z. W$ k5 T5 L' E
程序动态生成函数的一个应用是:数据拟合中,常常要为数据寻找一个最佳的拟合公式,此时可按一定的规则生成一些函数,然后检查这些函数哪个最佳的。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5