fminsearch does not move Classic List Threaded 3 messages Open this post in threaded view
|

fminsearch does not move

 Hi, I am trying to do a 2D non-linear least squares optimisation. I have image data and would like to subtract a profile that is defined using 6 parameters. For 1D data I always use leasqr, but as far as I could determine fminsearch or fmins are the best options for optimisation on a 2D domain. The problem I encounter is that the final fitting parameters returned by fminsearch are identical to the initial parameters. What is wrong here? Martijn function z=profile(xx, yy, rr, p)   z = p(1)*(1 + p(2)*xx + p(3)*yy + p(4)*xx.^2 + p(5)*yy.^2).*exp(rr*p(6)); end f = @(p) sum(sum((QImg - profile(xx,yy,r, p)).^2))/n; p0=[1, sx, sy, sx2, sy2, 0]; z0 = profile(xx,yy,r, p0); p = fminsearch(f, p0); xx, yy, and r are predefined matrices with the x, y and radial coordinates of the pixels. From commandline I can evaluate f(p), but apparently fmisearch has a problem with my function. _______________________________________________ Help-octave mailing list [hidden email] https://mailman.cae.wisc.edu/listinfo/help-octave
 In reply to this post by Martijn Brouwer-9 On Wed, Oct 10, 2012 at 05:37:26PM +0200, Martijn Brouwer wrote: > Hi, > I am trying to do a 2D non-linear least squares optimisation. I have > image data and would like to subtract a profile that is defined using 6 > parameters. For 1D data I always use leasqr, but as far as I could > determine fminsearch or fmins are the best options for optimisation on a > 2D domain. You have 6 parameters and you choose to use a scalar objective function. The distances from your profile seem to be calculated from one-dimensional values. What then do you mean by "2D optimization"? And what made you think that fminsearch is best for this? > The problem I encounter is that the final fitting parameters returned by > fminsearch are identical to the initial parameters. What is wrong here? fminsearch by default uses a gradient-free algorithm, which is usually inferior to a gradient-based one. Your objective function seems to be continuous, so I'd see no reason to use a gradient-free algorithm. > Martijn > > > function z=profile(xx, yy, rr, p) >   z = p(1)*(1 + p(2)*xx + p(3)*yy + p(4)*xx.^2 + > p(5)*yy.^2).*exp(rr*p(6)); > end > > f = @(p) sum(sum((QImg - profile(xx,yy,r, p)).^2))/n; You could use this objective function with sqp or the default algorithm of nonlin_min. A possibly better option is to use the matrix of differences QImg - profile(xx,yy,r, p) directly as a model function and use the default algorithm of nonlin_residmin. leasqr uses the same algorithm but needs the specification of a matrix of observations, which would have to be set to all zeros in your case. > p0=[1, sx, sy, sx2, sy2, 0]; > > z0 = profile(xx,yy,r, p0); > > p = fminsearch(f, p0); > > > xx, yy, and r are predefined matrices with the x, y and radial > coordinates of the pixels. From commandline I can evaluate f(p), but > apparently fmisearch has a problem with my function. BTW you have sent the same message 3 times yesterday. Regards, Olaf -- public key id EAFE0591, e.g. on x-hkp://pool.sks-keyservers.net _______________________________________________ Help-octave mailing list [hidden email] https://mailman.cae.wisc.edu/listinfo/help-octave signature.asc (853 bytes) Download Attachment