数学建模社区-数学中国

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

作者: forcal    时间: 2011-8-3 07:40
标题: 极限测试之Matlab与Forcal动态生成函数的效率
程序动态生成一些函数,然后调用这些函数,体现了脚本的优势。0 C/ T, N5 V8 i! K4 F5 X/ a
8 r/ Z3 T  n' O; c# s* C; F, J
以下Forcal程序动态编译了函数 f(x,y)=x+y ,然后执行该函数,共进行了10000次。
  1. !using("sys","string");# O5 u8 W% D! o6 J+ q3 x& Z
  2. mvar:& c& g+ {3 y, ^1 A, {6 X% l
  3. t0=clock();
    2 c3 B4 X1 ]) y  R9 n
  4. main(:pf,a,i,s)=
    ) X7 x7 b5 {- u
  5.   oo{pf=fcfor()},         //申请保存Forcal表达式句柄的FcData数据指针: W& I5 c5 V  Z
  6.   s=0, i=0,
    3 p/ W( ^) [" V4 J% e' S% d
  7.   while{++i<=10000,
    # v3 Z: I" G  j, h3 c4 `
  8.     oo{comfors(pf,ws("f(x,y)=")+ws("x+y"),2,100,0,0)},    //将Forcal动态字符串编译为全局的实数表达式+ f  E8 e% v3 V$ E* F; r% t
  9.     a=HFor("f"),          //获得函数f的句柄
    & E% E# j6 [+ E/ ?
  10.     s=s+a[1,0]            //动态调用函数f
    : ~# x& M# R& e/ m: }
  11.   },
    9 a/ A" V* D' W
  12.   s;3 o9 c3 n- {' _9 T' a/ }
  13. [clock()-t0]/1000;
复制代码
结果:% i! A- n$ U. Y& N' `" V
10000.
8 D* m* A- ^8 D: d( \5 o0.359  秒, y2 z' c" o* B- |
% b" F2 F+ ~& G6 Y) U, {0 E) l
matlab完成类似的功能参考:http://forum.simwe.com/archiver/tid-983780.html5 S$ i% z6 R$ e5 ^2 n7 b
. b8 ~! l4 W2 h6 h7 ?) ~. x) `
由于matlab的函数必须存为磁盘文件才能使用(这应该是一个很大的缺点),故动态编译运行的效率必然很低。# s8 I. T8 g& j# J/ b3 R+ T

) x8 a2 M; s8 \程序动态生成函数的一个应用是:数据拟合中,常常要为数据寻找一个最佳的拟合公式,此时可按一定的规则生成一些函数,然后检查这些函数哪个最佳的。




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