forcal 发表于 2011-8-3 07:40

极限测试之Matlab与Forcal动态生成函数的效率

程序动态生成一些函数,然后调用这些函数,体现了脚本的优势。

以下Forcal程序动态编译了函数 f(x,y)=x+y ,然后执行该函数,共进行了10000次。!using("sys","string");
mvar:
t0=clock();
main(:pf,a,i,s)=
  oo{pf=fcfor()},         //申请保存Forcal表达式句柄的FcData数据指针
  s=0, i=0,
  while{++i<=10000,
    oo{comfors(pf,ws("f(x,y)=")+ws("x+y"),2,100,0,0)},    //将Forcal动态字符串编译为全局的实数表达式
    a=HFor("f"),          //获得函数f的句柄
    s=s+a            //动态调用函数f
  },
  s;
/1000;结果:
10000.
0.359  秒

matlab完成类似的功能参考:http://forum.simwe.com/archiver/tid-983780.html

由于matlab的函数必须存为磁盘文件才能使用(这应该是一个很大的缺点),故动态编译运行的效率必然很低。

程序动态生成函数的一个应用是:数据拟合中,常常要为数据寻找一个最佳的拟合公式,此时可按一定的规则生成一些函数,然后检查这些函数哪个最佳的。
页: [1]
查看完整版本: 极限测试之Matlab与Forcal动态生成函数的效率