Changeset 2239
- Timestamp:
- Oct 29, 2004, 11:37:09 AM (22 years ago)
- Location:
- trunk/psLib/src
- Files:
-
- 2 edited
-
dataManip/psMinimize.c (modified) (9 diffs)
-
math/psMinimize.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/dataManip/psMinimize.c
r2238 r2239 9 9 * @author GLG, MHPCC 10 10 * 11 * @version $Revision: 1.7 6$ $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 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 1206 1206 psVector *tmp = NULL; 1207 1207 psBool boolLineIsNull = true; 1208 float prevMin = 0.0; 1209 int countMin = 0; 1208 1210 1209 1211 psTrace(".psLib.dataManip.p_psDetermineBracket", 4, … … 1224 1226 1225 1227 1226 determineINitialBracket(params, paramMask, line, coords, func, &a, &b, &fa, &fb);1227 1228 1228 a = -1.0; 1229 1229 b = 0.0; … … 1244 1244 fc = func(tmp, coords); 1245 1245 } 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); 1246 1249 1247 1250 if ((fb < fa) && (fb < fc)) { … … 1257 1260 // The object of this code is to set the initial point a to 0.0, and 1258 1261 // ensure that (fb < fa). 1259 if ( fc < fb) {1262 if (!(fc < fb)) { 1260 1263 a = b; 1261 1264 b = c; … … 1301 1304 fb = fc; 1302 1305 } 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 1303 1325 iter++; 1304 1326 } … … 1401 1423 psFree(tmpn); 1402 1424 psError(__func__, "(1) Could not bracket minimum."); 1425 return(NAN); 1403 1426 } 1404 1427 … … 1612 1635 dummyMin.tol = 0.01; 1613 1636 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 } 1614 1651 if (fabs(dummyMin.value - currFuncVal) > biggestDiff) { 1615 1652 biggestDiff = fabs(dummyMin.value - currFuncVal); … … 1643 1680 1644 1681 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 } 1645 1696 1646 1697 // 6: -
trunk/psLib/src/math/psMinimize.c
r2238 r2239 9 9 * @author GLG, MHPCC 10 10 * 11 * @version $Revision: 1.7 6$ $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 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 1206 1206 psVector *tmp = NULL; 1207 1207 psBool boolLineIsNull = true; 1208 float prevMin = 0.0; 1209 int countMin = 0; 1208 1210 1209 1211 psTrace(".psLib.dataManip.p_psDetermineBracket", 4, … … 1224 1226 1225 1227 1226 determineINitialBracket(params, paramMask, line, coords, func, &a, &b, &fa, &fb);1227 1228 1228 a = -1.0; 1229 1229 b = 0.0; … … 1244 1244 fc = func(tmp, coords); 1245 1245 } 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); 1246 1249 1247 1250 if ((fb < fa) && (fb < fc)) { … … 1257 1260 // The object of this code is to set the initial point a to 0.0, and 1258 1261 // ensure that (fb < fa). 1259 if ( fc < fb) {1262 if (!(fc < fb)) { 1260 1263 a = b; 1261 1264 b = c; … … 1301 1304 fb = fc; 1302 1305 } 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 1303 1325 iter++; 1304 1326 } … … 1401 1423 psFree(tmpn); 1402 1424 psError(__func__, "(1) Could not bracket minimum."); 1425 return(NAN); 1403 1426 } 1404 1427 … … 1612 1635 dummyMin.tol = 0.01; 1613 1636 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 } 1614 1651 if (fabs(dummyMin.value - currFuncVal) > biggestDiff) { 1615 1652 biggestDiff = fabs(dummyMin.value - currFuncVal); … … 1643 1680 1644 1681 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 } 1645 1696 1646 1697 // 6:
Note:
See TracChangeset
for help on using the changeset viewer.
