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...