数学建模社区-数学中国
标题:
极限测试之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次。
!using("sys","string");
0 E$ z; c+ S3 A; i. a0 N
mvar:
$ P( \1 t4 _9 N& B* _/ i+ M
t0=clock();
0 q( V# P5 d' ~% T
main(:pf,a,i,s)=
" ?0 F; u7 A3 s( e% [+ |! p
oo{pf=fcfor()}, //申请保存Forcal表达式句柄的FcData数据指针
# j/ F. D" M2 P1 V( o& U. b6 n! u3 e
s=0, i=0,
* _; L$ P' q6 o2 \
while{++i<=10000,
; C5 Y0 ?9 e8 _* f6 A
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
a=HFor("f"), //获得函数f的句柄
9 s7 m& K! L; ~% ?; Q, k
s=s+a[1,0] //动态调用函数f
2 l2 Y+ R5 G Y! R5 U- C9 {6 S; ]# E
},
4 n1 |9 o: u; R$ k1 v; g5 D
s;
@" ~" H% y* C; H" D: j; _* _
[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 Z
matlab完成类似的功能参考:
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