Changeset 6524
- Timestamp:
- Mar 6, 2006, 10:32:19 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
r6510 r6524 10 10 * @author EAM, IfA 11 11 * 12 * @version $Revision: 1. 8$ $Name: not supported by cvs2svn $13 * @date $Date: 2006-03-0 3 22:09:31$12 * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2006-03-06 20:32:19 $ 14 14 * 15 15 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 239 239 psF64 ymodel; 240 240 psVector *deriv = psVectorAlloc(params->n, PS_TYPE_F32); 241 deriv->n = deriv->nalloc;242 241 243 242 // zero alpha and beta for summing below … … 302 301 NOTES: EAM: this is my re-implementation of MinLM 303 302 304 XXX: Must implement code to handle the constrain->min, ->max, ->delta members.303 XXX: EAM : constraints added 2006.02.15 305 304 306 305 XXX: Put the ASSERTS in. … … 329 328 PS_ASSERT_VECTOR_TYPE(params, PS_TYPE_F32, false); 330 329 psVector *paramMask = NULL; 330 psVector *paramDelta = NULL; 331 psVector *paramMin = NULL; 332 psVector *paramMax = NULL; 331 333 if (constrain != NULL) { 334 // XXX EAM : fill out the asserts 335 paramDelta = constrain->paramDelta; 336 paramMin = constrain->paramMin; 337 paramMax = constrain->paramMax; 332 338 paramMask = constrain->paramMask; 333 339 if (paramMask != NULL) { 334 340 PS_ASSERT_VECTOR_TYPE(paramMask, PS_TYPE_U8, false); 335 341 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 342 } 346 343 } … … 371 368 psVector *Beta = psVectorAlloc(params->n, PS_TYPE_F64); 372 369 psVector *Params = psVectorAlloc(params->n, PS_TYPE_F32); 373 beta->n = beta->nalloc;374 Beta->n = Beta->nalloc;375 Params->n = Params->nalloc;376 370 psVector *dy = NULL; 377 371 psF64 Chisq = 0.0; 378 372 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 373 402 374 // why is this needed here??? the initial guess on params is provided by the user … … 409 381 } else { 410 382 dy = psVectorAlloc(y->n, PS_TYPE_F32); 411 dy->n = dy->nalloc;412 383 psVectorInit(dy, 1.0); 413 384 } … … 439 410 // set a new guess for Alpha, Beta, Params 440 411 p_psMinLM_GuessABP(Alpha, Beta, Params, alpha, beta, params, paramMask, 441 beta_lim, param_min, param_max, lambda);412 paramDelta, paramMin, paramMax, lambda); 442 413 443 414 // measure linear model prediction … … 496 467 if (covar != NULL) { 497 468 p_psMinLM_GuessABP(covar, Beta, Params, alpha, beta, params, paramMask, 498 beta_lim, param_min, param_max, 0.0);469 paramDelta, paramMin, paramMax, 0.0); 499 470 } 500 471 … … 507 478 if (yWt == NULL) { 508 479 psFree(dy); 509 }510 if (mustFree00 == true) {511 psFree(beta_lim);512 psFree(param_min);513 psFree(param_max);514 480 } 515 481 if (min->iter == min->maxIter) {
Note:
See TracChangeset
for help on using the changeset viewer.
