声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 6345|回复: 10

[综合讨论] 求助fminsearch用法,如何求得全局极小值

[复制链接]
发表于 2011-1-18 16:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
     matlab下,我用fminsearch求得的是局部极小值,且在给出的初始点附近,初始值的选取影响太大。请各位高手大侠们给指点下,如何求得全局极小值?
代码如下:
l=[991.7843  863.0463  802.1390  848.0684  818.4741  947.4123  886.3842  998.2794];
c=3*10^8;  
for j=1:8
    t(j)=l(j)/c;   
end
R=850;  
r=100;

for j=1:8
        cosq(j)=(R^2-r^2+(t(j)*c-r)^2)/(2*(t(j)*c-r)*R);   
end
  f=@(R)(-((t(1)*c)^2-R^2)*(R^2*c+(t(1)*c)^3-2*t(1)*c^2*R*cosq(1))/(8*pi*100*(R*cosq(1)-t(1)*c)^3))*(((t(2)*c)^2-R^2)*(R^2*c+(t(2)*c)^3-2*t(2)*c^2*R*cosq(2))/(8*pi*100*(R*cosq(2)-t(2)*c)^3))*(((t(3)*c)^2-R^2)*(R^2*c+(t(3)*c)^3-2*t(3)*c^2*R*cosq(3))/(8*pi*100*(R*cosq(3)-t(3)*c)^3))*(((t(4)*c)^2-R^2)*(R^2*c+(t(4)*c)^3-2*t(4)*c^2*R*cosq(4))/(8*pi*100*(R*cosq(4)-t(4)*c)^3))*(((t(5)*c)^2-R^2)*(R^2*c+(t(5)*c)^3-2*t(5)*c^2*R*cosq(5))/(8*pi*100*(R*cosq(5)-t(5)*c)^3))*(((t(6)*c)^2-R^2)*(R^2*c+(t(6)*c)^3-2*t(6)*c^2*R*cosq(6))/(8*pi*100*(R*cosq(6)-t(6)*c)^3))*(((t(7)*c)^2-R^2)*(R^2*c+(t(7)*c)^3-2*t(7)*c^2*R*cosq(7))/(8*pi*100*(R*cosq(7)-t(7)*c)^3))*(((t(8)*c)^2-R^2)*(R^2*c+(t(8)*c)^3-2*t(8)*c^2*R*cosq(8))/(8*pi*100*(R*cosq(8)-t(8)*c)^3));
[y,n]=fminsearch(f,900);%求y

结果是:y =864.6721

当输入的是 [y,n]=fminsearch(f,850);时y= 847.8084

当初始值分别设为700, 750,  800,  850,900, 950时发现结果分别为:
             864.6721,864.6721,847.8084,847.8084,864.6721,1.0033e+003
   
  
回复
分享到:

使用道具 举报

发表于 2011-1-18 17:50 | 显示全部楼层
试下1stOpt,全局优化能力很强。
发表于 2011-1-18 18:28 | 显示全部楼层
几件事情不大明白:
1.

  1. c=3*10^8
  2. for j=1:8
  3.     t(j)=l(j)/c;   
  4. end
复制代码
这是哪本书上或者何人教出来的神奇用法?如果是书,书可以卖废纸;如果是老师,可快递“误人子弟”的牌匾一块。
2.
  1. Optimization terminated: mesh size less than options.TolMesh.
  2. x =
  3.   864.6738
  4. fval =
  5. -1.6544e+097
  6. exitflag =
  7.      1
复制代码
这样的优化结果,不知道有什么意义?

评分

1

查看全部评分

发表于 2011-1-18 22:08 | 显示全部楼层
好像只是局部最优解吧!
 楼主| 发表于 2011-1-18 22:31 | 显示全部楼层
回复 3 # bainhome 的帖子

c=3*10^8
for j=1:8
    t(j)=l(j)/c;   
end
是为了得到8种情况下的时间,l是我直接从我的程序中得到的,我给出的程序只是部分,我的目的是为找出使目标函数最小的R(最小值点y)
发表于 2011-1-18 22:42 | 显示全部楼层
hoho...What a cute answer.
But...Would this code below be nicer?
  1. l=[...]
  2. c=3e8
  3. t=l/c
复制代码
发表于 2011-1-19 00:28 | 显示全部楼层
回复 5 # btee123 的帖子

初学者常忽略的小问题, 看看下帖LZ应该就知道LS大牛的质疑
matlab矢量化编程技巧集锦
http://forum.vibunion.com/thread-41583-1-1.html
发表于 2011-1-19 10:04 | 显示全部楼层
本帖最后由 rocwoods 于 2011-1-19 10:07 编辑

还好l长度只是8,问题的严重性被掩盖了。
回楼主,bainhome的质疑就是两点:
1、MATLAB不要当成C使。典型的向量除以标量:t = l/c;即可,没必要整个循环。
2、即使非要整循环,t没有预分配内存,l向量要是很长的话,效率成千上万倍的降低。

评分

1

查看全部评分

发表于 2011-1-19 11:19 | 显示全部楼层
本帖最后由 bainhome 于 2011-1-19 11:29 编辑

补充一下,我第二个问题,一楼同学估计也压根没看懂:
fval的数值在x=864.6738时,达到-1.6544e+097,这样的目标函数值,即使所给出的不同初始点数值,算得结果都接近-inf,这又能算哪门子的极值点?只不过到了一个绝对值很大的地方,MATLAB认为函数值已经足够小,没法算下去,随机停下来了而已。
所以不妨从函数本身开始检查,而不是纠结于初始点的选取,也许能更快接近问题的本质。

评分

1

查看全部评分

 楼主| 发表于 2011-1-19 12:56 | 显示全部楼层
谢谢 各位的帮助,小弟受益很多,祝各位新年快乐~~
发表于 2011-1-20 23:42 | 显示全部楼层

别怪初学者没看懂, 说小声些, 个人也没仔细了解!?:@L
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-27 14:53 , Processed in 0.093319 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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