数学建模社区-数学中国

标题: 极限测试之Matlab与Forcal动态生成函数的效率 [打印本页]

作者: forcal    时间: 2011-8-3 07:40
标题: 极限测试之Matlab与Forcal动态生成函数的效率
程序动态生成一些函数,然后调用这些函数,体现了脚本的优势。0 @' ~9 Q6 R. l6 m' ^* d4 ~
0 Y& ^' a# k: U! ?' B6 c5 P% v
以下Forcal程序动态编译了函数 f(x,y)=x+y ,然后执行该函数,共进行了10000次。
  1. !using("sys","string");
    ; c# u" g; k; I7 [# Y' _
  2. mvar:
    / X' d: d' R: ]9 p4 l& t; [& ?) h
  3. t0=clock();
    + M- z7 l- M1 _. P
  4. main(:pf,a,i,s)=
    # R" F3 A3 s3 l9 D6 y
  5.   oo{pf=fcfor()},         //申请保存Forcal表达式句柄的FcData数据指针) K3 n4 a9 q( s' f$ n( _  o
  6.   s=0, i=0,! ?3 Z$ G+ k) q
  7.   while{++i<=10000,* P' V0 a+ |$ T
  8.     oo{comfors(pf,ws("f(x,y)=")+ws("x+y"),2,100,0,0)},    //将Forcal动态字符串编译为全局的实数表达式. m& @; |$ r8 _0 {+ n* x% p6 G, x; _
  9.     a=HFor("f"),          //获得函数f的句柄4 E9 F4 I( W8 H% f" O
  10.     s=s+a[1,0]            //动态调用函数f0 `6 _+ d% Z3 q& n
  11.   },2 S! h" Z& [# A' y: i$ C4 N* U
  12.   s;
    3 v& `! d1 N( ?6 F- f
  13. [clock()-t0]/1000;
复制代码
结果:9 j, i6 e' a& A' W
10000.0 N+ ]7 |  _  I
0.359  秒- c3 N8 H1 N; u0 o& J0 l

  N  o! @  M+ q9 [' v7 zmatlab完成类似的功能参考:http://forum.simwe.com/archiver/tid-983780.html
: M- q+ @8 q) @) r: l9 [+ [* C# [$ ~/ |. z- m* E
由于matlab的函数必须存为磁盘文件才能使用(这应该是一个很大的缺点),故动态编译运行的效率必然很低。: x$ R  s$ |# n$ G' I" h: v

' o- U) w1 o: Z0 X, ]5 T/ G: I- y程序动态生成函数的一个应用是:数据拟合中,常常要为数据寻找一个最佳的拟合公式,此时可按一定的规则生成一些函数,然后检查这些函数哪个最佳的。




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