加载中…
个人资料
shuang
shuang
  • 博客等级:
  • 博客积分:0
  • 博客访问:10,922
  • 关注人气:5
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

使用fminsearch函数计算距离给定30个点距离之和最小的点坐标

(2014-01-11 11:12:26)
标签:

fminsearch

最小距离

非线性优化

nelder-me

分类: Matlab项目经验

1.     项目概述

使用fminsearch函数计算距离给定30个点距离之和最小的点坐标。 

 

2.     关键词

     fminsearch;最小距离;非线性优化; Nelder-Mead 

 

3.     技术说明

fminsearch函数用于求解多维无约束的非线性优化问题其使用的算法是一种非梯度算法:Nelder-Mead单纯形法。该算法的详细帮助文件详见:

          http://www.docin.com/p-212866237.html

fminsearch函数的中文帮助文件详见 :

                 http://blog.sina.com.cn/s/blog_989593860101369r.html

 

4.     程序源代码

clc

clear

Data =  65.4000   28.3000
   62.9000   34.9000
   39.5000   49.9000
   43.3000   49.3000
   28.5000   32.9000
   75.3000   41.0000
   52.8000   30.2000
   57.5000   37.3000
   67.9000   26.9000
   79.2000   23.1000
   21.3000   38.1000
   62.8000   24.1000
   54.5000   50.8000
   75.2000   26.4000
   70.7000   27.7000
   71.1000   51.6000
   63.5000   24.5000
   69.3000   38.8000
   42.0000   43.1000
   57.2000   42.3000
   76.8000   31.4000
   76.2000   27.8000
   95.2000   34.1000
   93.0000   33.8000
   38.9000   65.3000
   43.5000   49.7000
   66.0000   45.8000
   64.3000   52.9000
   55.4000   56.4000
   73.2000   27.8000
   18.5000   45.5000
   24.0000   39.6000
   27.0000   55.6000
   38.0000   72.4000
   67.2000   65.3000
   94.0000   17.5000
   50.2000   43.8000
   40.1000   66.0000 ];

fun = @(x) sum( sqrt ( ( x(1)-Data(:,1) ).^2 + ( x(2)-Data(:,2) ).^2 ) );   % 以距离和为目标函数

x0(1) = mean(Data(:,1));   % 以横坐标平均值为横坐标初始值

x0(2) = mean(Data(:,2));   % 以横坐标平均值为横坐标初始值

x1 = fminsearch(fun,x0);   % 优化函数fun,找出最小值

plot(Data(:,1),Data(:,2),'o')   % 画出30个离散点

hold on

plot(x1(1),x1(2),'r*','LineWidth',5)          % 画出最优点

y1 = fun(x1);                   % 求解最优点距离平方和

for ii = 1:length(Data)
line([x1(1) Data(ii,1)],[x1(2) Data(ii,2)],'color','k')

end

text(x1(1),x1(2),['最短距离和为:' num2str(y1)] )    % 输出最优值提示

legend('数据点','最优点','最优点与给定点连线')        % 标注

juli = sqrt ( ( x1(1)-Data(:,1) ).^2 + ( x1(2)-Data(:,2) ).^2 );

disp('     X:       Y:        距离: ')

A = [Data,juli];

disp(A) 

 

5.     程序结果

使用fminsearch函数计算距离给定30个点距离之和最小的点坐标

6.     总结

优化问题初始值的选择很重要,初始值选择不当会大幅增大寻优步数、增加求解时间,甚至可能陷入局部最。该程序中将30个点的坐标均值作为fminsearch函数的寻优初始值,较大幅度的减少了寻优步数。

寻优初始值

(0,0)

寻优步数

101

 

寻优初始值

(57.9316, 40.8395)

寻优步数

34

30个点的坐标均值

最优点

(59.4173, 39.8114)

 

 

 

 

博文为原创,欢迎转载,转载注明出处,谢谢!

有Matlab/Simulink方面的技术问题,欢迎发送邮件至944077462@qq.com讨论。

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有