Path: news.mathworks.com!not-for-mail From: <HIDDEN> Newsgroups: comp.soft-sys.matlab Subject: Re: fminsearch and functions Date: Fri, 1 Feb 2013 07:06:05 +0000 (UTC) Organization: Graco Inc Lines: 52 Message-ID: <kefpgt$l4h$1@newscl01ah.mathworks.com> References: <kee7p4$iju$1@newscl01ah.mathworks.com> <keeclp$945$1@newscl01ah.mathworks.com> Reply-To: <HIDDEN> NNTP-Posting-Host: www-00-blr.mathworks.com Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: newscl01ah.mathworks.com 1359702365 21649 172.30.248.45 (1 Feb 2013 07:06:05 GMT) X-Complaints-To: news@mathworks.com NNTP-Posting-Date: Fri, 1 Feb 2013 07:06:05 +0000 (UTC) X-Newsreader: MATLAB Central Newsreader 977404 Xref: news.mathworks.com comp.soft-sys.matlab:787906 Alan_Weiss <aweiss@mathworks.com> wrote in message <keeclp$945$1@newscl01ah.mathworks.com>... > On 1/31/2013 11:57 AM, Robert Ahrens wrote: > > I should preface this post by saying that I have never used fminsearch > > for multivariable functions and I am not a heavy user of anonymous > > functions. > > > > I have defined a function myfun2: > > > > function f = myfun2(x,y,xc,yc) > > > > n = length(x) > > f = sqrt((sum((sqrt((xc - x).^2 + (yc - y).^2) - ... > > sum(sqrt((xc - x).^2 + (yc - y).^2)/n)).^2)/n)) > > end > > > > where x and y are vectors (of length upwards of 10,000) and xc and yc > > are scalars. Basically, I have known x and y vectors and I want to > > find xc and yc such that f is minimized. I've read through the > > fminsearch documentation and posts on the Matlab newgroups and I have > > not been able to find any information as to how to do so. > > > > Any and all help is appreciated. > > Bob > There is an example showing you exactly how to do this case: > http://www.mathworks.com/help/matlab/math/example-curve-fitting-via-optimization.html > > The main idea is fminsearch wants a function of one variable, say x. > I believe, from your description, that the variables you want to > minimize are xc and yc. > So in your function you should write something like > > function f = myfun3(x,xdata,ydata) > > xc = x(1) % the first scalar variable > yc = x(2) % the second variable > n = length(xdata); > ... > > Put the xdata and ydata vectors in your workspace, create an initial > guess x0, then call > > xolution = fminsearch(@(x)myfun3(x,xdata,ydata),x0) > > For more information about passing parameters xdata and ydata this way, see > http://www.mathworks.com/help/optim/ug/passing-extra-parameters.html#bskkr4z > > Alan Weiss > MATLAB mathematical toolbox documentation If you really have upwards of 10,000 data points, you may want to tic/toc your function for fminsearch to minimize.... If you are in the 0.1 sec range, do not freak out if fminsearch takes some time.... Like hours...