fminsearch does not move

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

fminsearch does not move

Martijn Brouwer-9
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
Reply | Threaded
Open this post in threaded view
|

Re: fminsearch does not move

Juan Pablo Carbajal
On Wed, Oct 10, 2012 at 5:37 PM, Martijn Brouwer
<[hidden email]> 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.
> 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

Hi,
I do not have an answer for you but alternatives.

Have you tried using regress_gp (it is a simple implementation of
regression using gaussian processes). See the demos for nonlinear
regression.
https://sourceforge.net/p/octave/code/11233/tree/trunk/octave-forge/main/statistics/inst/regress_gp.m

Also you could try using sqp for the optimization.

Cheers

--
M. Sc. Juan Pablo Carbajal
-----
PhD Student
University of Z├╝rich
http://ailab.ifi.uzh.ch/carbajal/
_______________________________________________
Help-octave mailing list
[hidden email]
https://mailman.cae.wisc.edu/listinfo/help-octave
Reply | Threaded
Open this post in threaded view
|

Re: fminsearch does not move

Olaf Till-2
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