help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: bfgsmin


From: Bertrand Roessli
Subject: Re: bfgsmin
Date: Mon, 16 Mar 2009 14:44:21 +0100

Hello,

Thanks for trying the code. 

I have the latest package from octave sourceforge (optim 1.04) and
octave 3.1.54.

The thing is that on my laptop the result depends on the random
numbers...

e.g. If I run leasqrexample 2 times I get 

first run:
---------
octave:1> leasqrexamp
------------------------------------------------
bfgsmin final results: 14 iterations

function value: 0.00775013

STRONG CONVERGENCE
Function conv 1  Param conv 1  Gradient conv 1

          param    gradient (n)          change
        9.73062         0.00000         0.00000
        0.09587        -0.00000         0.00000
ans =

   9.730625
   0.095865

Elapsed time is 0.15632 seconds.

Second run:
-----------
octave:2> leasqrexamp
error: __bfgsmin_gradient: gradient contains NaNs or Inf
error: feval: function `chi2' not found
error: octave_base_value::double_value (): wrong type argument `<unknown
type>'

Any idea?

Bertrand
 
On Mon, 2009-03-16 at 05:43 -0700, Michael Creel wrote:
> 
> 
> Bertrand Roessli wrote:
> > 
> > Hello,
> > 
> > I am happy to see that there is some discussion about data fitting. 
> > 
> > With the octave-forge package, bfgsmin_example works fine. 
> > However, if I try to fit an exponential function (from leasqrexample.m),
> > bfgsmin is unable to converge (which is easily done with the other
> > available functions (simplex, samin,...). 
> > 
> > The main problem seems to originate from the numerical derivatives.
> > The output reads
> > 
> > octave:1> leasqrexamp
> > chisq =  0.86656
> > chisq =  0.86656
> > chisq =  0.86656
> > chisq =  0.86657
> > chisq =  0.86657
> > chisq =  0.86656
> > error: __bfgsmin_gradient: gradient contains NaNs or Inf
> > error: feval: function `chi2' not found
> > error: octave_base_value::double_value (): wrong type argument `<unknown
> > type>'
> > warning: __bfgsmin_obj: objective function could not be evaluated -
> > setting to DBL_MAX
> > error: feval: function `chi2' not found
> > 
> > If somebody has an idea I would appreciate. 
> > 
> > This is the code
> > ----------------
> > 
> > 1;
> > function [obj_value]=chi2(p,x,y)
> > 
> > f=leasqrfunc(x,p);
> > v=length(y);
> > wt=1./sqrt(y); 
> > chisq=sum(((y.-real(f)).*wt).^2 )/v
> > 
> > obj_value=chisq;
> > 
> > endfunction
> > 
> > 
> > t = [1:100];
> > p=[10; 0.1];
> > data=leasqrfunc(t,p);
> > 
> > %fprintf(1,'\nAdding Random Noise.\n data=data+0.05*rand(1,100);\n');
> > data=data+0.05*rand(1,100);
> > plot(t,data,"@12");
> > fflush(stdout);
> > pause;
> > 
> > control = {-1;1};  # maxiters, verbosity, conv. reg., arg_to_min
> > 
> > tic;
> > param=[11;1];
> > bfgsmin("chi2",{param,t,data},control)
> > toc
> > 
> >  
> > function y = leasqrfunc(x,p)
> > % leasqrfunc : this is a function of 'x' and 'p' parameters for
> > leasqrexamp.
> > 
> > % Description: leasqr example fit function
> > 
> > % example of function.
> > y=p(1)*exp(-p(2)*x);
> > 
> > endfunction
> > 
> > 
> > 
> 
> Hmm, I ran your code and it works for me:
> chisq =  0.0084524                             
> chisq =  0.0084524                             
> chisq =  0.0084524                             
> chisq =  0.0084524                             
> chisq =  0.0084524                             
> chisq =  0.0084524                             
> chisq =  0.0084524                             
> ------------------------------------------------
> bfgsmin iteration 15  convergence (f g p): 1 1 1
> 
> function value: 0.00845243  stepsize: 0.1375  
> 
>           param    gradient (n)          change
>         9.69388        -0.00000         0.00000
>         0.09558         0.00001        -0.00000
> ------------------------------------------------
> bfgsmin final results: 15 iterations
> 
> function value: 0.00845243
> 
> STRONG CONVERGENCE
> Function conv 1  Param conv 1  Gradient conv 1
> 
>           param    gradient (n)          change
>         9.69388        -0.00000         0.00000
>         0.09558         0.00001        -0.00000
> ans =
> 
>    9.693878
>    0.095576
> 
> Elapsed time is 0.084275 seconds.
> octave:3>
> 
> Maybe you have an old version of bfgsmin? Every once in a while I find a bug
> and fix it. I believe that it has been in pretty good shape for a while now.
> Michael
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]