数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal动态生成函数的效率
[打印本页]
作者:
forcal
时间:
2011-8-3 07:40
标题:
极限测试之Matlab与Forcal动态生成函数的效率
程序动态生成一些函数,然后调用这些函数,体现了脚本的优势。
0 @' ~9 Q6 R. l6 m' ^* d4 ~
0 Y& ^' a# k: U! ?' B6 c5 P% v
以下Forcal程序动态编译了函数 f(x,y)=x+y ,然后执行该函数,共进行了10000次。
!using("sys","string");
; c# u" g; k; I7 [# Y' _
mvar:
/ X' d: d' R: ]9 p4 l& t; [& ?) h
t0=clock();
+ M- z7 l- M1 _. P
main(:pf,a,i,s)=
# R" F3 A3 s3 l9 D6 y
oo{pf=fcfor()}, //申请保存Forcal表达式句柄的FcData数据指针
) K3 n4 a9 q( s' f$ n( _ o
s=0, i=0,
! ?3 Z$ G+ k) q
while{++i<=10000,
* P' V0 a+ |$ T
oo{comfors(pf,ws("f(x,y)=")+ws("x+y"),2,100,0,0)}, //将Forcal动态字符串编译为全局的实数表达式
. m& @; |$ r8 _0 {+ n* x% p6 G, x; _
a=HFor("f"), //获得函数f的句柄
4 E9 F4 I( W8 H% f" O
s=s+a[1,0] //动态调用函数f
0 `6 _+ d% Z3 q& n
},
2 S! h" Z& [# A' y: i$ C4 N* U
s;
3 v& `! d1 N( ?6 F- f
[clock()-t0]/1000;
复制代码
结果:
9 j, i6 e' a& A' W
10000.
0 N+ ]7 | _ I
0.359 秒
- c3 N8 H1 N; u0 o& J0 l
N o! @ M+ q9 [' v7 z
matlab完成类似的功能参考:
http://forum.simwe.com/archiver/tid-983780.html
: M- q+ @8 q) @) r: l9 [+ [
* C# [$ ~/ |. z- m* E
由于matlab的函数必须存为磁盘文件才能使用(这应该是一个很大的缺点),故动态编译运行的效率必然很低。
: x$ R s$ |# n$ G' I" h: v
' o- U) w1 o: Z0 X, ]5 T/ G: I- y
程序动态生成函数的一个应用是:数据拟合中,常常要为数据寻找一个最佳的拟合公式,此时可按一定的规则生成一些函数,然后检查这些函数哪个最佳的。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5