找回密码
 注册
Simdroid-非首页
查看: 91|回复: 1

Forcal全局优化库FcOpt更新

[复制链接]
发表于 2011-2-10 09:43:32 | 显示全部楼层 |阅读模式 来自 山东淄博
Forcal优化库FcOpt最近进行了更新,全局优化能力显著增强,使用更加方便,同时增加了隐函数全部解,非线性方程(组)全部解求解函数,更新了微分方程参数优化(拟合)实例。

参考:http://www.forcal.net/sysm/forcal9/fchtm/fcopt.htm
 楼主| 发表于 2011-2-20 18:56:07 | 显示全部楼层 来自 山东淄博
Simdroid开发平台
使用Forcal优化库FcOpt做优化时,无论简单的优化,还是复杂的优化(例如含积分的优化、共享参数优化、复数优化、微分方程参数优化等等),基本步骤都是一样的:

1、给出拟合数据,一般保存在数组中。如果没有数据,这一步就省了。
2、编写目标函数,做优化时就是要得到目标函数值最小时的最优参数值。自己写目标函数,似乎是麻烦了些,但非常灵活,前面提到的各种各样的优化都可以通过自己写目标函数来实现。正所谓以不变应万变也。
3、选择优化函数进行优化。

在FcOpt中,我最喜欢用的优化函数是Opt,下面给出一个使用Opt做优化的例子:

例子:拟合公式:y = (p1)+(p2*exp(-p3*x/p5)+p4/(1+p4*p5*x))

p1,p2,p3,p4,p5为待求参数

数据(x, y)
0,                0.928
0.0000098, 1.02
0.0000195, 1.12
0.0000293, 1.25
0.0000391, 1.42
0.0000488, 1.7
0.0000586, 2.01
0.0000684, 2.26
0.0000781, 2.46
0.0000879, 2.63
0.0000977, 2.82
0.0001074, 3.01
0.0001172, 3.2
0.000127,  3.41
0.0001367, 3.59
0.0001465, 3.72
0.0001562, 3.85
0.000166,  3.98
0.0001758, 4.08

Forcal代码:
  1. !using["fcopt","math"];
  2. init(::Array,max)= //准备数据
  3. {
  4.     max=19,
  5.     Array=arrayinit{2,max,2 :
  6.         0,         0.928,
  7.         0.0000098, 1.02,
  8.         0.0000195, 1.12,
  9.         0.0000293, 1.25,
  10.         0.0000391, 1.42,
  11.         0.0000488, 1.7,
  12.         0.0000586, 2.01,
  13.         0.0000684, 2.26,
  14.         0.0000781, 2.46,
  15.         0.0000879, 2.63,
  16.         0.0000977, 2.82,
  17.         0.0001074, 3.01,
  18.         0.0001172, 3.2,
  19.         0.000127,  3.41,
  20.         0.0001367, 3.59,
  21.         0.0001465, 3.72,
  22.         0.0001562, 3.85,
  23.         0.000166,  3.98,
  24.         0.0001758, 4.08
  25.     }.free()
  26. };
  27. f(p1,p2,p3,p4,p5 : i,s,x,y : Array,max)= //目标函数
  28. {
  29.     s=0,i=0,(i<max).while{
  30.         x=Array[i,0], y=Array[i,1],
  31.         s=s+[(p1)+(p2*exp(-p3*x/p5)+p4/(1+p4*p5*x))-y]^2,
  32.         i++
  33.     },
  34.     sqrt[s/max]
  35. };
  36. Opt[HFor("f"), optwaysimdeep, optwayconfra, optdeep,50]; //比较难的优化,我就这样使用Opt函数
复制代码

结果(需求解几次,前面的数是最优参数,最后一个数是目标函数值):

6.855486033798995 4.813449005068769 -54298054.6899329 -10.72898361613976 -1516.502649185066 3.337716353170544e-002

感觉做这个优化题,是稍稍有些难度的,换句话说,如果题目难度不超过此题,Forcal可以轻松求解。

喜欢优化的朋友可以尝试一下。

目前我知道1stOpt可以轻松求解此题,还有一位优化高手也可以轻松求解此题,还想知道更多可以求解此题的朋友或软件。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-6-20 12:06 , Processed in 0.029448 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表