Use fminunc to find the point with the smallest sum of distances to each point matlab

clear;
clc;
x=rand(7,1);
y=rand(7,1);
dist=@(var) sum(sqrt((var(1)-x).^2+(var(2)-y).^2));%var(1)=x;var(2)=y  dist代表函数 sum(sqrt((var(1)-x).^2+(var(2)-y).^2))

var0=rand(2,1);  

[var,minDistance,exitflag]=fminunc(dist,var0) %var0是函数的初始值,求函数dist的最小值minDistance,以及对应的点var

plot(x,y,'o','markerfacecolor','r','markersize',6);%'o'代表点的形状,'markerfacecolor'代表点的颜色,'r'红色,'markersize'点的大小,6代表多大

hold on;

plot(var(1),var(2),'p','markerfacecolor','g')  %'p'代表形状

for i=1:7

plot([var(1),x(i)],[var(2),y(i)],':');

end

Insert picture description here

Guess you like

Origin blog.csdn.net/JGL121314/article/details/109828228