数学建模社区-数学中国

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

作者: forcal    时间: 2011-8-3 07:40
标题: 极限测试之Matlab与Forcal动态生成函数的效率
程序动态生成一些函数,然后调用这些函数,体现了脚本的优势。
( t4 l/ v( ^# g+ R
$ Q9 F+ [# X( \: b( {3 m. {* ~以下Forcal程序动态编译了函数 f(x,y)=x+y ,然后执行该函数,共进行了10000次。
  1. !using("sys","string");
    0 E$ z; c+ S3 A; i. a0 N
  2. mvar:
    $ P( \1 t4 _9 N& B* _/ i+ M
  3. t0=clock();
    0 q( V# P5 d' ~% T
  4. main(:pf,a,i,s)=
    " ?0 F; u7 A3 s( e% [+ |! p
  5.   oo{pf=fcfor()},         //申请保存Forcal表达式句柄的FcData数据指针
    # j/ F. D" M2 P1 V( o& U. b6 n! u3 e
  6.   s=0, i=0,
    * _; L$ P' q6 o2 \
  7.   while{++i<=10000,
    ; C5 Y0 ?9 e8 _* f6 A
  8.     oo{comfors(pf,ws("f(x,y)=")+ws("x+y"),2,100,0,0)},    //将Forcal动态字符串编译为全局的实数表达式
    % p" k* c; S/ r$ @5 n7 y# z" Q2 g
  9.     a=HFor("f"),          //获得函数f的句柄
    9 s7 m& K! L; ~% ?; Q, k
  10.     s=s+a[1,0]            //动态调用函数f
    2 l2 Y+ R5 G  Y! R5 U- C9 {6 S; ]# E
  11.   },4 n1 |9 o: u; R$ k1 v; g5 D
  12.   s;
      @" ~" H% y* C; H" D: j; _* _
  13. [clock()-t0]/1000;
复制代码
结果:( J) p* D9 v" F: V
10000.$ l0 |0 A+ n0 K
0.359  秒% Q2 l% C" R, H( j- C" T% W. E

! h; d6 B; [+ l, c7 \5 Zmatlab完成类似的功能参考:http://forum.simwe.com/archiver/tid-983780.html
% J# F) w4 }% }  g4 s" m7 R+ G. S
& S/ b4 y2 k  Y$ y由于matlab的函数必须存为磁盘文件才能使用(这应该是一个很大的缺点),故动态编译运行的效率必然很低。- y- E  I) c) R5 E

' ~$ e" i; B5 H5 V. c+ `程序动态生成函数的一个应用是:数据拟合中,常常要为数据寻找一个最佳的拟合公式,此时可按一定的规则生成一些函数,然后检查这些函数哪个最佳的。




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