# Error with using fminsearch

4 views (last 30 days)
Berenice Oseguera on 22 Dec 2019
Commented: Berenice Oseguera on 23 Dec 2019
I am working on finding the point that is the closest to 15 locations (minimum distance from all). The x- and y-coordinates are stored in 2 variables. I created the function and extracted the scalar variables from the vector but I am getting an error stating that there are not enough input arguments. The function definition and code are below:
function distance=mindistance(xv)
x=xv(1);
y=xv(2);
% extracting scaler variables from vector in fminsearch
xcoordinates=table2array(sources(:,3));
ycoordinates=table2array(sources(:,4));
distance=sqrt(((x-xcoordinates).^2)+((y-ycoordinates).^2));
end
xvg=[-2000 1500];
[xvmin,minD]=fminsearch(mindistance,xvg);

Walter Roberson on 22 Dec 2019
Edited: Walter Roberson on 22 Dec 2019
For one definition of "minimum distance from all":
function [xvmin, minD] = mindistance_driver
xcoordinates = sources{:,3};
ycoordinates = source{:,4};
xvg=[mean(xcoordinates), mean(ycoordinates)];
[xvmin, minD]=fminsearch( @(x) mindistance(x, xcoordinates, ycoordinates), xvg);
end
function distance = mindistance(xv, xcoordinates, ycoordinates)
x=xv(1);
y=xv(2);
distance = sum( sqrt(((x-xcoordinates).^2)+((y-ycoordinates).^2)) );
end
There are other definitions that can be computed much more efficiently. In particular, if you use
distance = sqrt( sum( ((x-xcoordinates).^2)+((y-ycoordinates).^2) ) );
then you can demonstrate that mean(x) and mean(y) are the optimal coordinates, without needing to do any searching.

#### 1 Comment

Berenice Oseguera on 23 Dec 2019
Thank you! This worked!

per isakson on 22 Dec 2019
Edited: per isakson on 22 Dec 2019
Replace
[xvmin,minD]=fminsearch(mindistance,xvg);
by
[xvmin,minD]=fminsearch('mindistance',xvg);
or
[xvmin,minD]=fminsearch(@mindistance,xvg);