octave-maintainers
[Top][All Lists]
Advanced

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

fsolve test failure


From: John W. Eaton
Subject: fsolve test failure
Date: Tue, 27 Jan 2009 11:31:07 -0500

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

I'm not sure, but it looks like this line

  ## Replace fun with a guarded version.
  fun = @(x) guarded_eval (fun, x);

should be

  ## Replace fun with a guarded version.
  fcn = @(x) guarded_eval (fcn, x);

as fun is not defined before this point, or used after it.

Also, in the default settings section

    x = optimset ("MaxIter", 400, "MaxFunEvals", Inf, \
    "Jacobian", "off", "TolX", 1e-7, "TolF", 1e-7,
    "OutputFcn", [], "Updating", "on", "FunValCheck", "off");
    return;

wouldn't it be better to set the default tolerances based on something
like sqrt (eps (class (x))?  Or, if fsolve should still work when
passed integer matrices, maybe something like

  if (isa (x, "single"))
    tol = sqrt (eps, "single");
  else
    tol = sqrt (eps);
  endif

?
  
jwe


reply via email to

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