数学建模社区-数学中国
标题:
极限测试之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次。
!using("sys","string");
1 x- q% ?4 c7 V! V( [
mvar:
: J8 `5 }: G! v3 f* w0 ^8 W) p4 J
t0=clock();
) h1 ~, }* l6 R% z3 h
main(:pf,a,i,s)=
- c( g- H" G6 _! r0 {3 L" @
oo{pf=fcfor()}, //申请保存Forcal表达式句柄的FcData数据指针
) r8 [- `1 m/ W& ]/ z
s=0, i=0,
% U) Z( V* B% |6 N& `$ n2 x: d
while{++i<=10000,
9 q( ~2 k; z) S2 d% M' R3 j4 Z
oo{comfors(pf,ws("f(x,y)=")+ws("x+y"),2,100,0,0)}, //将Forcal动态字符串编译为全局的实数表达式
* ^: S" ^9 e) J+ W2 B6 Y
a=HFor("f"), //获得函数f的句柄
4 Z1 T8 y! U3 @9 j9 u
s=s+a[1,0] //动态调用函数f
9 [0 c( {# Q B3 Y
},
- R8 C& P9 y! u
s;
( D' g1 k6 u* r% Z
[clock()-t0]/1000;
复制代码
结果:
! A5 ?; }5 h; v2 C. M! G$ a
10000.
3 \1 }9 O7 l& G6 n0 \
0.359 秒
% b4 b$ l/ i1 z) Q0 x
3 A% ^5 Q6 b' f: F
matlab完成类似的功能参考:
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