Changeset 14320
- Timestamp:
- Jul 19, 2007, 2:22:24 PM (19 years ago)
- Location:
- trunk/psLib/src/math
- Files:
-
- 2 edited
-
psMinimizeLMM.c (modified) (12 diffs)
-
psMinimizeLMM.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/math/psMinimizeLMM.c
r13981 r14320 10 10 * @author EAM, IfA 11 11 * 12 * @version $Revision: 1.3 1$ $Name: not supported by cvs2svn $13 * @date $Date: 2007-0 6-26 19:27:04 $12 * @version $Revision: 1.32 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2007-07-20 00:22:24 $ 14 14 * 15 15 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 63 63 const psVector *paramMask, 64 64 psMinimizeLMLimitFunc checkLimits, 65 psF32 lambda) 65 psF32 lambda, 66 psF32 *dLinear) 66 67 { 67 68 PS_ASSERT_VECTOR_TYPE(Alpha, PS_TYPE_F32, false); … … 135 136 # endif 136 137 138 // measure linear model prediction 139 // (we must do this before truncating Beta below) 140 if (dLinear) { 141 *dLinear = psMinLM_dLinear(Beta, beta, paramMask, lambda); 142 } 143 137 144 // apply Beta to get new Params values 138 145 for (int j = 0; j < params->n; j++) { … … 196 203 } 197 204 198 bool rcBool = psMinLM_GuessABP(Alpha, delta, Params, alpha, beta, params, paramMask, NULL, 0.0 );205 bool rcBool = psMinLM_GuessABP(Alpha, delta, Params, alpha, beta, params, paramMask, NULL, 0.0, NULL); 199 206 if (rcBool == false) { 200 207 psTrace ("psLib.math", 5, "psMinLM_GuessABP() returned FALSE.\n"); … … 223 230 const psVector *Beta, 224 231 const psVector *beta, 232 const psVector *paramMask, 225 233 psF32 lambda) 226 234 { … … 230 238 psF32 *B = Beta->data.F32; 231 239 psF32 *b = beta->data.F32; 240 241 float dh = 0.0, sh = 0.0, Sh = 0.0; 232 242 for (int i = 0; i < beta->n; i++) { 243 if ((paramMask != NULL) && (paramMask->data.U8[i])) continue; 244 dh = lambda*B[i] + b[i]; 245 sh = 0.5*B[i]*dh; 246 Sh += sh; 247 // fprintf (stderr, "%f, %f * %f %f %f * : %f : %f + %f\n", B[i], b[i], dh, sh, Sh, lambda*PS_SQR(B[i]) + B[i]*b[i], lambda*PS_SQR(B[i]), B[i]*b[i]); 233 248 dLinear += lambda*PS_SQR(B[i]) + B[i]*b[i]; 234 249 } … … 391 406 psF32 Chisq = 0.0; 392 407 psF32 lambda = 0.001; 408 psF32 dLinear = 0.0; 393 409 394 410 // the user provides the error or NULL. we need to convert … … 422 438 423 439 // set a new guess for Alpha, Beta, Params 424 if (!psMinLM_GuessABP(Alpha, Beta, Params, alpha, beta, params, paramMask, checkLimits, lambda )) {440 if (!psMinLM_GuessABP(Alpha, Beta, Params, alpha, beta, params, paramMask, checkLimits, lambda, &dLinear)) { 425 441 min->iter ++; 426 442 lambda *= 10.0; … … 428 444 } 429 445 430 // measure linear model prediction431 psF32 dLinear = psMinLM_dLinear(Beta, beta, lambda);432 433 446 // dump some useful info if trace is defined 434 447 if (psTraceGetLevel("psLib.math") >= 6) { 435 p_psImagePrint(psTraceGetDestination(), Alpha, "alpha guess (1)"); 436 p_psVectorPrint(psTraceGetDestination(), Beta, "beta guess (1)"); 448 p_psImagePrint(psTraceGetDestination(), Alpha, "Alpha guess (1)"); 449 p_psVectorPrint(psTraceGetDestination(), Beta, "Beta guess (1)"); 450 p_psVectorPrint(psTraceGetDestination(), beta, "beta current (1)"); 437 451 } 438 452 if (psTraceGetLevel("psLib.math") >= 5) { … … 454 468 psF32 rho = (min->value - Chisq) / dLinear; 455 469 456 psTrace("psLib.math", 5, "last chisq: %f, new chisq %f, delta: %f, rho: %f\n", min->value,457 Chisq, min->lastDelta, rho);470 psTrace("psLib.math", 5, "last chisq: %f, new chisq %f, delta: %f, dLinear: %f, rho: %f, lambda: %f\n", min->value, 471 Chisq, min->lastDelta, dLinear, rho, lambda); 458 472 459 473 // dump some useful info if trace is defined … … 470 484 beta = psVectorCopy(beta, Beta, PS_TYPE_F32); 471 485 params = psVectorCopy(params, Params, PS_TYPE_F32); 472 lambda *= 0. 1;486 lambda *= 0.25; 473 487 } else { 474 488 lambda *= 10.0; … … 480 494 // construct & return the covariance matrix (if requested) 481 495 if (covar != NULL) { 482 if (!psMinLM_GuessABP(covar, Beta, Params, alpha, beta, params, paramMask, NULL, 0.0 )) {496 if (!psMinLM_GuessABP(covar, Beta, Params, alpha, beta, params, paramMask, NULL, 0.0, NULL)) { 483 497 psTrace ("psLib.math", 5, "failure to calculate covariance matrix\n"); 484 498 } -
trunk/psLib/src/math/psMinimizeLMM.h
r13981 r14320 7 7 * @author GLG, MHPCC 8 8 * 9 * @version $Revision: 1.1 0$ $Name: not supported by cvs2svn $10 * @date $Date: 2007-0 6-26 19:27:04 $9 * @version $Revision: 1.11 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2007-07-20 00:22:24 $ 11 11 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii 12 12 */ … … 165 165 const psVector *paramMask, 166 166 psMinimizeLMLimitFunc checkLimits, 167 psF32 lambda 167 psF32 lambda, 168 psF32 *dLinear 168 169 ); 169 170 … … 171 172 const psVector *Beta, 172 173 const psVector *beta, 174 const psVector *paramMask, 173 175 psF32 lambda); 174 176
Note:
See TracChangeset
for help on using the changeset viewer.
