[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
- fsolve test failure, John W. Eaton, 2009/01/27
- Re: fsolve test failure, Jaroslav Hajek, 2009/01/27
- Re: fsolve test failure, Ben Abbott, 2009/01/27
- Re: fsolve test failure, Jaroslav Hajek, 2009/01/27
- Re: fsolve test failure,
John W. Eaton <=
- Message not available
- Re: fsolve test failure, John W. Eaton, 2009/01/29
- Re: fsolve test failure, Jaroslav Hajek, 2009/01/29
- Re: fsolve test failure, John W. Eaton, 2009/01/29
- Re: fsolve test failure, Jaroslav Hajek, 2009/01/29
- Re: fsolve test failure, John W. Eaton, 2009/01/29
- Re: fsolve test failure, Jaroslav Hajek, 2009/01/29
- Re: fsolve test failure, John W. Eaton, 2009/01/29
- Re: fsolve test failure, Jaroslav Hajek, 2009/01/29
- Re: fsolve test failure, John W. Eaton, 2009/01/29
- Re: fsolve test failure, John W. Eaton, 2009/01/29