octave-maintainers
[Top][All Lists]
Advanced

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

Re: fsolve test failure


From: John W. Eaton
Subject: Re: fsolve test failure
Date: Tue, 27 Jan 2009 16:24:03 -0500

On 27-Jan-2009, Jaroslav Hajek wrote:

| On Tue, Jan 27, 2009 at 9:10 PM, Ben Abbott <address@hidden> wrote:
| >
| > On Tuesday, January 27, 2009, at 02:57PM, "Jaroslav Hajek" <address@hidden> 
wrote:
| >>On Tue, Jan 27, 2009 at 5:31 PM, John W. Eaton <address@hidden> wrote:
| >>> After updating and rebuilding today, the following test is failing for
| >>> me:
| >>>
| >>>  function retval = f (p)
| >>>    x = p(1);
| >>>    y = p(2);
| >>>    z = p(3);
| >>>    w = p(4);
| >>>    retval = zeros (4, 1);
| >>>    retval(1) = 3*x + 4*y + exp (z + w) - 1.007;
| >>>    retval(2) = 6*x - 4*y + exp (3*z + w) - 11;
| >>>    retval(3) = x^4 - 4*y^2 + 6*z - 8*w - 20;
| >>>    retval(4) = x^2 + 2*y^3 + z - w - 4;
| >>>  endfunction
| >>>
| >>>  test
| >>>   x_opt = [ -0.767297326653401, 0.590671081117440, 1.47190018629642, 
-1.52719341133957 ];
| >>>   tol = 1.0e-5;
| >>>   [x, fval, info] = fsolve (@f, [-1, 1, 2, -1]);
| >>>   assert (info > 0);
| >>>   assert (norm (x - x_opt, Inf) < tol);
| >>>   assert (norm (fval) < tol);
| >>>
| >>>  octave> info
| >>>  info =  1
| >>>  octave> norm (x - x_opt, Inf), tol
| >>>  ans =  1.6079e-05
| >>>  tol =  1.0000e-05
| >>>  octave> norm (fval), tol
| >>>  ans =  1.0665e-04
| >>>  tol =  1.0000e-05
| >>>
| >>
| >>That's weird, because I get something different:
| >>octave:5> info
| >>info =  1
| >>octave:6> norm(x-x_opt, Inf)
| >>ans =  4.1002e-07
| >>octave:7> norm (fval)
| >>ans =  3.4606e-06
| >>
| >>Do you have qrupdate linked to Octave? That could maybe explain the
| >>differences...
| >>otherwise, we can check per line where the numbers start diverting.
| >
| > I do not have qrupdate, but get something slightly smaller than did jwe.
| >
| > octave> norm (x - x_opt, Inf)
| > ans = 1.5482e-4
| >
| > Would it be helpful for me to deeper to determine why the optimization 
terminated?
| >
| > Ben
| >
| 
| Definitely. First of all, I suggest you try running with
| optimset("Updating", "off").
| In fact, I realize that for such small systems qrupdate is not even
| used, so I don't understand where the differences come from. Perhaps
| displaying the sequence of x could shed some light here...

I inserted "x" at the top of the main while loop, and fn, tolf, n, xn,
tolf*n*xn, just before the spot where info is set to 1, and this is
what I see:

  octave>  [x, fval, info] = fsolve (@f, [-1, 1, 2, -1], optimset ("updating", 
"off"));
  x =

    -1
     1
     2
    -1

  x =

    -0.95626
     0.62802
     1.70291
    -1.28386

  x =

    -1.8090
     1.2704
     1.6532
    -1.3059

  x =

    -1.6296
     1.2151
     1.5720
    -1.4385

  x =

    -1.43941
     0.95247
     1.56360
    -1.41601

  x =

    -1.10610
     0.83547
     1.54197
    -1.53893

  x =

    -0.77262
     0.59393
     1.47167
    -1.52390

  fn =  1.0665e-04
  tolf =  1.0000e-07
  n =  4
  xn =  693.95
  ans =  2.7758e-04

  octave> norm (fval), tol
  ans =  1.0665e-04
  tol =  1.0000e-05
  octave> norm (x - x_opt, Inf), tol
  ans =  1.6079e-05
  tol =  1.0000e-05
  octave> info
  info =  1

Does that help?

jwe


reply via email to

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