IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 2239


Ignore:
Timestamp:
Oct 29, 2004, 11:37:09 AM (22 years ago)
Author:
gusciora
Message:

Working bracket code.

Location:
trunk/psLib/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/dataManip/psMinimize.c

    r2238 r2239  
    99 *  @author GLG, MHPCC
    1010 *
    11  *  @version $Revision: 1.76 $ $Name: not supported by cvs2svn $
    12  *  @date $Date: 2004-10-29 21:19:49 $
     11 *  @version $Revision: 1.77 $ $Name: not supported by cvs2svn $
     12 *  @date $Date: 2004-10-29 21:37:09 $
    1313 *
    1414 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    12061206    psVector *tmp = NULL;
    12071207    psBool boolLineIsNull = true;
     1208    float prevMin = 0.0;
     1209    int countMin = 0;
    12081210
    12091211    psTrace(".psLib.dataManip.p_psDetermineBracket", 4,
     
    12241226
    12251227
    1226     determineINitialBracket(params, paramMask, line, coords, func, &a, &b, &fa, &fb);
    1227 
    12281228    a = -1.0;
    12291229    b = 0.0;
     
    12441244        fc = func(tmp, coords);
    12451245    } while (fabs(fc - fb) < FLT_EPSILON);
     1246
     1247    psTrace(".psLib.dataManip.p_psDetermineBracket", 6,
     1248            "initial (fa, Fb, Fc) is (%f, %f, %f)\n", fa, fb, fc);
    12461249
    12471250    if ((fb < fa) && (fb < fc)) {
     
    12571260    // The object of this code is to set the initial point a to 0.0, and
    12581261    // ensure that (fb < fa).
    1259     if (fc < fb) {
     1262    if (!(fc < fb)) {
    12601263        a = b;
    12611264        b = c;
     
    13011304            fb = fc;
    13021305        }
     1306
     1307        // This code maintains a count of how many times the minimum fc has
     1308        // statyed the same.  If it gets too high, we exit this loop.
     1309        if (fc == prevMin) {
     1310            countMin++;
     1311        } else {
     1312            countMin = 0;
     1313        }
     1314        prevMin = fc;
     1315        if (countMin == 10) {
     1316            bracket->data.F32[0] = a;
     1317            bracket->data.F32[1] = b;
     1318            bracket->data.F32[2] = c;
     1319            psFree(tmp);
     1320            psTrace(".psLib.dataManip.p_psDetermineBracket", 6,
     1321                    "---- p_psDetermineBracket() end ----\n");
     1322            return(bracket);
     1323        }
     1324
    13031325        iter++;
    13041326    }
     
    14011423        psFree(tmpn);
    14021424        psError(__func__, "(1) Could not bracket minimum.");
     1425        return(NAN);
    14031426    }
    14041427
     
    16121635                dummyMin.tol = 0.01;
    16131636                mul = p_psLineMin(&dummyMin, Q, v[i], myParamMask, coords, func);
     1637                if (isnan(mul)) {
     1638                    psError(__func__, "Could not perform line minimization (1).\n");
     1639                    psFree(pQP);
     1640                    psFree(u);
     1641                    psFree(Q);
     1642                    if (paramMask == NULL) {
     1643                        psFree(myParamMask);
     1644                    }
     1645                    for (i=0;i<numDims;i++) {
     1646                        psFree(v[i]);
     1647                    }
     1648                    psFree(v);
     1649                    return(false);
     1650                }
    16141651                if (fabs(dummyMin.value - currFuncVal) > biggestDiff) {
    16151652                    biggestDiff = fabs(dummyMin.value - currFuncVal);
     
    16431680
    16441681        mul = p_psLineMin(min, params, u, myParamMask, coords, func);
     1682        if (isnan(mul)) {
     1683            psError(__func__, "Could not perform line minimization. (2)\n");
     1684            psFree(pQP);
     1685            psFree(u);
     1686            psFree(Q);
     1687            if (paramMask == NULL) {
     1688                psFree(myParamMask);
     1689            }
     1690            for (i=0;i<numDims;i++) {
     1691                psFree(v[i]);
     1692            }
     1693            psFree(v);
     1694            return(false);
     1695        }
    16451696
    16461697        // 6:
  • trunk/psLib/src/math/psMinimize.c

    r2238 r2239  
    99 *  @author GLG, MHPCC
    1010 *
    11  *  @version $Revision: 1.76 $ $Name: not supported by cvs2svn $
    12  *  @date $Date: 2004-10-29 21:19:49 $
     11 *  @version $Revision: 1.77 $ $Name: not supported by cvs2svn $
     12 *  @date $Date: 2004-10-29 21:37:09 $
    1313 *
    1414 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    12061206    psVector *tmp = NULL;
    12071207    psBool boolLineIsNull = true;
     1208    float prevMin = 0.0;
     1209    int countMin = 0;
    12081210
    12091211    psTrace(".psLib.dataManip.p_psDetermineBracket", 4,
     
    12241226
    12251227
    1226     determineINitialBracket(params, paramMask, line, coords, func, &a, &b, &fa, &fb);
    1227 
    12281228    a = -1.0;
    12291229    b = 0.0;
     
    12441244        fc = func(tmp, coords);
    12451245    } while (fabs(fc - fb) < FLT_EPSILON);
     1246
     1247    psTrace(".psLib.dataManip.p_psDetermineBracket", 6,
     1248            "initial (fa, Fb, Fc) is (%f, %f, %f)\n", fa, fb, fc);
    12461249
    12471250    if ((fb < fa) && (fb < fc)) {
     
    12571260    // The object of this code is to set the initial point a to 0.0, and
    12581261    // ensure that (fb < fa).
    1259     if (fc < fb) {
     1262    if (!(fc < fb)) {
    12601263        a = b;
    12611264        b = c;
     
    13011304            fb = fc;
    13021305        }
     1306
     1307        // This code maintains a count of how many times the minimum fc has
     1308        // statyed the same.  If it gets too high, we exit this loop.
     1309        if (fc == prevMin) {
     1310            countMin++;
     1311        } else {
     1312            countMin = 0;
     1313        }
     1314        prevMin = fc;
     1315        if (countMin == 10) {
     1316            bracket->data.F32[0] = a;
     1317            bracket->data.F32[1] = b;
     1318            bracket->data.F32[2] = c;
     1319            psFree(tmp);
     1320            psTrace(".psLib.dataManip.p_psDetermineBracket", 6,
     1321                    "---- p_psDetermineBracket() end ----\n");
     1322            return(bracket);
     1323        }
     1324
    13031325        iter++;
    13041326    }
     
    14011423        psFree(tmpn);
    14021424        psError(__func__, "(1) Could not bracket minimum.");
     1425        return(NAN);
    14031426    }
    14041427
     
    16121635                dummyMin.tol = 0.01;
    16131636                mul = p_psLineMin(&dummyMin, Q, v[i], myParamMask, coords, func);
     1637                if (isnan(mul)) {
     1638                    psError(__func__, "Could not perform line minimization (1).\n");
     1639                    psFree(pQP);
     1640                    psFree(u);
     1641                    psFree(Q);
     1642                    if (paramMask == NULL) {
     1643                        psFree(myParamMask);
     1644                    }
     1645                    for (i=0;i<numDims;i++) {
     1646                        psFree(v[i]);
     1647                    }
     1648                    psFree(v);
     1649                    return(false);
     1650                }
    16141651                if (fabs(dummyMin.value - currFuncVal) > biggestDiff) {
    16151652                    biggestDiff = fabs(dummyMin.value - currFuncVal);
     
    16431680
    16441681        mul = p_psLineMin(min, params, u, myParamMask, coords, func);
     1682        if (isnan(mul)) {
     1683            psError(__func__, "Could not perform line minimization. (2)\n");
     1684            psFree(pQP);
     1685            psFree(u);
     1686            psFree(Q);
     1687            if (paramMask == NULL) {
     1688                psFree(myParamMask);
     1689            }
     1690            for (i=0;i<numDims;i++) {
     1691                psFree(v[i]);
     1692            }
     1693            psFree(v);
     1694            return(false);
     1695        }
    16451696
    16461697        // 6:
Note: See TracChangeset for help on using the changeset viewer.