已知22个点的经纬度,存在一个点到这22个点的距离之和最小,用Matlab求这个点的经纬度和最小的距离

已知22个点的经纬度,存在一个点到这22个点的距离之和最小,用Matlab求这个点的经纬度和最小的距离

问题描述:

如何定义函数?
能否利用费马点,如果可以,如何编写代码
如何画出这22个点和费马点在经纬图的点

可以参考早年我写的博客:


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) 

链接 http://blog.sina.com.cn/s/blog_460be01b0101dhqa.html