Changeset 6526
- Timestamp:
- Mar 6, 2006, 10:40:50 AM (20 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/math/psMinimizeLMM.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/math/psMinimizeLMM.c
r6525 r6526 10 10 * @author EAM, IfA 11 11 * 12 * @version $Revision: 1.1 0$ $Name: not supported by cvs2svn $13 * @date $Date: 2006-03-06 20: 32:36$12 * @version $Revision: 1.11 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2006-03-06 20:40:50 $ 14 14 * 15 15 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 159 159 psImage *Alpha = psImageAlloc (params->n, params->n, PS_TYPE_F64); 160 160 psVector *beta = psVectorAlloc(params->n, PS_TYPE_F64); 161 beta->n = beta->nalloc; 161 162 psVector *Params = psVectorAlloc(params->n, PS_TYPE_F64); 163 Params->n = Params->nalloc; 162 164 psVector *dy = NULL; 163 165 psBool rc = true; … … 169 171 } else { 170 172 dy = psVectorAlloc(y->n, PS_TYPE_F32); 173 dy->n = dy->nalloc; 171 174 psVectorInit(dy, 1.0); 172 175 } … … 302 305 NOTES: EAM: this is my re-implementation of MinLM 303 306 304 XXX: Must implement code to handle the constrain->min, ->max, ->delta members.307 XXX: EAM : constraints added 2006.02.15 305 308 306 309 XXX: Put the ASSERTS in. … … 329 332 PS_ASSERT_VECTOR_TYPE(params, PS_TYPE_F32, false); 330 333 psVector *paramMask = NULL; 334 psVector *paramDelta = NULL; 335 psVector *paramMin = NULL; 336 psVector *paramMax = NULL; 331 337 if (constrain != NULL) { 338 // XXX EAM : fill out the asserts 339 paramDelta = constrain->paramDelta; 340 paramMin = constrain->paramMin; 341 paramMax = constrain->paramMax; 332 342 paramMask = constrain->paramMask; 333 343 if (paramMask != NULL) { 334 344 PS_ASSERT_VECTOR_TYPE(paramMask, PS_TYPE_U8, false); 335 345 PS_ASSERT_VECTORS_SIZE_EQUAL(params, paramMask, false); 336 }337 if (constrain->paramMin != NULL) {338 psLogMsg(__func__, PS_LOG_WARN, "WARNING: the constrain->paramMin vector is currently ignored.\n");339 }340 if (constrain->paramMax != NULL) {341 psLogMsg(__func__, PS_LOG_WARN, "WARNING: the constrain->paramMax vector is currently ignored.\n");342 }343 if (constrain->paramDelta != NULL) {344 psLogMsg(__func__, PS_LOG_WARN, "WARNING: the constrain->paramDelta vector is currently ignored.\n");345 346 } 346 347 } … … 369 370 psImage *Alpha = psImageAlloc(params->n, params->n, PS_TYPE_F64); 370 371 psVector *beta = psVectorAlloc(params->n, PS_TYPE_F64); 372 beta->n = beta->nalloc; 371 373 psVector *Beta = psVectorAlloc(params->n, PS_TYPE_F64); 374 beta->n = beta->nalloc; 372 375 psVector *Params = psVectorAlloc(params->n, PS_TYPE_F32); 373 beta->n = beta->nalloc;374 Beta->n = Beta->nalloc;375 376 Params->n = Params->nalloc; 376 377 psVector *dy = NULL; 377 378 psF64 Chisq = 0.0; 378 379 psF64 lambda = 0.001; 379 // XXX: Code this properly. Don't use mustFree00.380 psBool mustFree00 = false;381 psVector *beta_lim = NULL;382 psVector *param_min = NULL;383 psVector *param_max = NULL;384 385 // if we are provided a covar image, we expect to find these three vectors in first three rows386 if (covar != NULL) {387 mustFree00 = true;388 beta_lim = psVectorAlloc(params->n, PS_TYPE_F32);389 param_min = psVectorAlloc(params->n, PS_TYPE_F32);390 param_max = psVectorAlloc(params->n, PS_TYPE_F32);391 beta_lim->n = beta_lim->nalloc;392 param_min->n = param_min->nalloc;393 param_max->n = param_max->nalloc;394 for (int i = 0; i < params->n; i++) {395 beta_lim->data.F32[i] = covar->data.F64[0][i];396 param_min->data.F32[i] = covar->data.F64[1][i];397 param_max->data.F32[i] = covar->data.F64[2][i];398 }399 psImageRecycle(covar, params->n, params->n, PS_TYPE_F64);400 }401 380 402 381 // why is this needed here??? the initial guess on params is provided by the user … … 439 418 // set a new guess for Alpha, Beta, Params 440 419 p_psMinLM_GuessABP(Alpha, Beta, Params, alpha, beta, params, paramMask, 441 beta_lim, param_min, param_max, lambda);420 paramDelta, paramMin, paramMax, lambda); 442 421 443 422 // measure linear model prediction … … 496 475 if (covar != NULL) { 497 476 p_psMinLM_GuessABP(covar, Beta, Params, alpha, beta, params, paramMask, 498 beta_lim, param_min, param_max, 0.0);477 paramDelta, paramMin, paramMax, 0.0); 499 478 } 500 479 … … 507 486 if (yWt == NULL) { 508 487 psFree(dy); 509 }510 if (mustFree00 == true) {511 psFree(beta_lim);512 psFree(param_min);513 psFree(param_max);514 488 } 515 489 if (min->iter == min->maxIter) {
Note:
See TracChangeset
for help on using the changeset viewer.
