- 积分
- 32
- 注册时间
- 2009-7-29
- 仿真币
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2010-11-28 15:06:18
|
显示全部楼层
来自 湖南湘潭
5# shamohu
"那段1stOpt代码运行了下,换一下其它算法结果似乎更快更好",
为什么说结果似乎更好呢?楼主没有明确说明。
其实从结果本身是看不出来的。
应该与实际值相比,才能判断准确程度。
3#的第三种方法最为准确(经理论推导的为实际值)。相应的1stopt代码和结果如下:
- constant L1 = 9, L2 = 10, beta1 = 3/5*pi;
- function L = L2/sin(pi - beta1 - alpha) + L1/sin(alpha);
- L2*cos(pi - beta1 - alpha)/(sin(pi - beta1 - alpha))^2 - L1*cos(alpha)/(sin(alpha))^2 = 0;
复制代码
====== 结果 ======
迭代数: 18
计算用时(时:分:秒:毫秒): 00:00:00:329
计算中止原因: 达到收敛判定标准
优化算法: 通用全局优化法(UGO1)
函数表达式 1: l -( 10/sin(pi - 1.88495559215388 - alpha) + 9/sin(alpha)) = 0
2: 10*cos(pi - 1.88495559215388 - alpha)/(sin(pi - 1.88495559215388 - alpha))^2 - 9*cos(alpha)/(sin(alpha))^2
-( 0) = 2.273985444E-10
目标函数值(最小): 1.26217744835362E-29
l: 32.3070077214581
alpha: 0.613180525650986
====== 计算结束 ======
可以看出3#的方法2也很准确(绘图并结合一维寻优方法,如黄金分割法、斐波纳契法等,操作较麻烦)。
问题是直接利用1stopt方法,操作最方便,但是算法选择不当,可能存在精度不足的问题。
这在一定程度上可以 用多次运行程序选择最佳结果的方法(1stopt中自动完成)来弥补。
相应的程序和结果如下:
- MultiRun = 10;// 运行10次,取其最优!
- constant L1 = 9, L2 = 10, beta1 = 3/5*pi;
- Parameter 0 < alpha < pi - beta1;
- minfunction L;
- L = L2/sin(pi - beta1 - alpha) + L1/sin(alpha);
复制代码
====== 结果 ======
重复计算最佳目标函数: 32.3070077214581
重复计算求得最佳目标函数次数: 2
重复计算最差目标函数: 63.3943822955649
重复计算平均目标函数: 35.9559572576879
重复计算总用时: 0:00:16
优化算法: 通用全局优化法(UGO2)
函数表达式: l
目标函数值(最小): 32.3070077214581
alpha: 0.613180520635929
l: 32.3070077214581
约束函数
1: l-(10/sin(pi - 1.88495559215388 - alpha) + 9/sin(alpha)) = 0
====== 计算结束 ======
由此可见,利用数值方法进行的寻优,有其特殊性,结果不一定是最优,应该加以验证,并设法提高其精度(如1stopt中的多次运算取其最优的做法)。 |
|