数学建模社区-数学中国

标题: 极限测试之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次。
  1. !using("sys","string");
    2 U* A# z9 G" M2 P0 ~0 S
  2. mvar:
    : W, S5 y& E) x  l( z% U, _
  3. t0=clock();
    8 M. k2 _9 @* I' r
  4. main(:pf,a,i,s)=
    # C2 \! F: N! I
  5.   oo{pf=fcfor()},         //申请保存Forcal表达式句柄的FcData数据指针
      G" S( g+ i4 k9 J5 Z+ q
  6.   s=0, i=0,
    ' p# g. q& z: U- r+ a% G
  7.   while{++i<=10000,1 h7 v/ }! T! }! r+ {
  8.     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
  9.     a=HFor("f"),          //获得函数f的句柄
    4 x% M1 \$ P: U4 Y
  10.     s=s+a[1,0]            //动态调用函数f
    0 l- y" m( W( R: M; Z  j
  11.   },  i* S6 \1 _8 E/ N% _+ u
  12.   s;
    / l( ?- U0 a% o8 ]/ |: l
  13. [clock()-t0]/1000;
复制代码
结果:
+ a. G5 ~2 }( D9 I10000.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% ]: I3 ~3 v# d- Z. W$ k5 T5 L' E
程序动态生成函数的一个应用是:数据拟合中,常常要为数据寻找一个最佳的拟合公式,此时可按一定的规则生成一些函数,然后检查这些函数哪个最佳的。




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5