数学建模社区-数学中国

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

作者: forcal    时间: 2011-8-3 07:40
标题: 极限测试之Matlab与Forcal动态生成函数的效率
程序动态生成一些函数,然后调用这些函数,体现了脚本的优势。
% |& S- I* I: @: x
# Y8 ^8 n+ ?2 |! ?3 G8 k: a8 u以下Forcal程序动态编译了函数 f(x,y)=x+y ,然后执行该函数,共进行了10000次。
  1. !using("sys","string");1 x- q% ?4 c7 V! V( [
  2. mvar:
    : J8 `5 }: G! v3 f* w0 ^8 W) p4 J
  3. t0=clock();) h1 ~, }* l6 R% z3 h
  4. main(:pf,a,i,s)=- c( g- H" G6 _! r0 {3 L" @
  5.   oo{pf=fcfor()},         //申请保存Forcal表达式句柄的FcData数据指针
    ) r8 [- `1 m/ W& ]/ z
  6.   s=0, i=0,% U) Z( V* B% |6 N& `$ n2 x: d
  7.   while{++i<=10000,
    9 q( ~2 k; z) S2 d% M' R3 j4 Z
  8.     oo{comfors(pf,ws("f(x,y)=")+ws("x+y"),2,100,0,0)},    //将Forcal动态字符串编译为全局的实数表达式
    * ^: S" ^9 e) J+ W2 B6 Y
  9.     a=HFor("f"),          //获得函数f的句柄
    4 Z1 T8 y! U3 @9 j9 u
  10.     s=s+a[1,0]            //动态调用函数f
    9 [0 c( {# Q  B3 Y
  11.   },- R8 C& P9 y! u
  12.   s;( D' g1 k6 u* r% Z
  13. [clock()-t0]/1000;
复制代码
结果:
! A5 ?; }5 h; v2 C. M! G$ a10000.3 \1 }9 O7 l& G6 n0 \
0.359  秒
% b4 b$ l/ i1 z) Q0 x
3 A% ^5 Q6 b' f: Fmatlab完成类似的功能参考:http://forum.simwe.com/archiver/tid-983780.html) \5 x9 \( }$ {
2 f, F  y6 Y6 ~# W5 q& C( l0 }
由于matlab的函数必须存为磁盘文件才能使用(这应该是一个很大的缺点),故动态编译运行的效率必然很低。" A6 ^& @- z# c

3 C9 z3 w0 \2 h7 B程序动态生成函数的一个应用是:数据拟合中,常常要为数据寻找一个最佳的拟合公式,此时可按一定的规则生成一些函数,然后检查这些函数哪个最佳的。




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