Changeset 1991 for trunk/psLib/src/dataManip/psMinimize.c
- Timestamp:
- Oct 6, 2004, 1:29:16 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/dataManip/psMinimize.c (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/dataManip/psMinimize.c
r1982 r1991 9 9 * @author GLF, MHPCC 10 10 * 11 * @version $Revision: 1.5 5$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-10-06 2 1:30:53$11 * @version $Revision: 1.56 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-10-06 23:29:16 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 1297 1297 1298 1298 XXX: Define constants for default dummy number of iterations and tolerance. 1299 1300 XXX: Must define behavior on various NULL inputs. 1299 1301 *****************************************************************************/ 1300 1302 bool psMinimizePowell(psMinimization *min, … … 1304 1306 psMinimizePowellFunc func) 1305 1307 { 1308 PS_CHECK_NULL_VECTOR_RETURN_NULL(params); 1309 PS_CHECK_EMPTY_VECTOR_RETURN_NULL(params); 1310 PS_CHECK_NULL_PTR_RETURN_NULL(min); 1311 PS_CHECK_NULL_PTR_RETURN_NULL(coords); 1312 PS_CHECK_NULL_PTR_RETURN_NULL(func); 1313 1306 1314 int numDims = params->n; 1307 1315 int i = 0; … … 1311 1319 psVector *Q = NULL; 1312 1320 psVector *u = NULL; 1321 psVector *myParamMask = NULL; // XXX: Use a recylced vector here. 1313 1322 psMinimization dummyMin; 1314 1323 float mul = 0.0; … … 1333 1342 Q = psVectorAlloc(numDims, PS_TYPE_F32); 1334 1343 1344 if (paramMask == NULL) { 1345 myParamMask = psVectorAlloc(params->n, PS_TYPE_U8); 1346 for (i=0;i<myParamMask->n;i++) { 1347 myParamMask->data.U8[i] = 0; 1348 } 1349 } else { 1350 myParamMask = (psVector *) paramMask; 1351 } 1352 PS_CHECK_VECTOR_SIZE_EQUAL_RETURN_NULL(params, myParamMask); 1353 1335 1354 // 1: Set v[i] to be the unit vectors for each dimension in params 1336 1355 v = (psVector **) psAlloc(params->n * sizeof(psVector **)); … … 1348 1367 // 2: Set Q to be the initial params (P in the ADD) 1349 1368 for (i=0;i<numDims;i++) { 1350 if ( paramMask->data.U8[i] == 0) {1369 if (myParamMask->data.U8[i] == 0) { 1351 1370 Q->data.F32[i] = params->data.F32[i]; 1352 1371 } … … 1368 1387 biggestIter = 0; 1369 1388 for (i=0;i<numDims;i++) { 1370 if ( paramMask->data.U8[i] == 0) {1389 if (myParamMask->data.U8[i] == 0) { 1371 1390 dummyMin.maxIter = 100; 1372 1391 dummyMin.tol = 0.01; 1373 mul = p_psLineMin(&dummyMin, Q, v[i], paramMask, coords, func);1392 mul = p_psLineMin(&dummyMin, Q, v[i], myParamMask, coords, func); 1374 1393 if (fabs(dummyMin.value - currFuncVal) > biggestDiff) { 1375 1394 biggestDiff = fabs(dummyMin.value - currFuncVal); … … 1382 1401 // 4: Set the vector u = Q - P 1383 1402 for (i=0;i<numDims;i++) { 1384 if ( paramMask->data.U8[i] == 0) {1403 if (myParamMask->data.U8[i] == 0) { 1385 1404 u->data.F32[i] = Q->data.F32[i] - params->data.F32[i]; 1386 1405 … … 1402 1421 } 1403 1422 1404 mul = p_psLineMin(min, params, u, paramMask, coords, func);1423 mul = p_psLineMin(min, params, u, myParamMask, coords, func); 1405 1424 1406 1425 // 6: … … 1413 1432 psFree(pQP); 1414 1433 psFree(Q); 1434 if (paramMask == NULL) { 1435 psFree(myParamMask); 1436 } 1415 1437 psTrace(".psLib.dataManip.psMinimizePowell", 4, 1416 1438 "---- psMinimizePowell() end (true) ----\n"); … … 1419 1441 1420 1442 for (i=0;i<numDims;i++) { 1421 if ( paramMask->data.U8[i] == 0) {1443 if (myParamMask->data.U8[i] == 0) { 1422 1444 pQP->data.F32[i] = (2 * Q->data.F32[i]) - params->data.F32[i]; 1423 1445 } else { … … 1434 1456 if (term1 < term2) { 1435 1457 for (i=0;i<numDims;i++) { 1436 if ( paramMask->data.U8[i] == 0) {1458 if (myParamMask->data.U8[i] == 0) { 1437 1459 v[biggestIter]->data.F32[i] = u->data.F32[i]; 1438 1460 } … … 1442 1464 // 7: Set P to Q 1443 1465 for (i=0;i<numDims;i++) { 1444 if ( paramMask->data.U8[i] == 0) {1466 if (myParamMask->data.U8[i] == 0) { 1445 1467 params->data.F32[i] = Q->data.F32[i]; 1446 1468 } … … 1458 1480 psTrace(".psLib.dataManip.psMinimizePowell", 4, 1459 1481 "---- psMinimizePowell() end (true) ----\n"); 1482 if (paramMask == NULL) { 1483 psFree(myParamMask); 1484 } 1460 1485 return(true); 1461 1486 } 1462 1487 } 1463 1488 1489 if (paramMask == NULL) { 1490 psFree(myParamMask); 1491 } 1464 1492 for (i=0;i<numDims;i++) { 1465 1493 psFree(v[i]);
Note:
See TracChangeset
for help on using the changeset viewer.
