IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 3, 2006, 12:08:02 PM (20 years ago)
Author:
gusciora
Message:

From rel10_ifa

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/math/psMinimizeLMM.c

    r6484 r6509  
    1010 *  @author EAM, IfA
    1111 *
    12  *  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
    13  *  @date $Date: 2006-02-24 23:43:15 $
     12 *  @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
     13 *  @date $Date: 2006-03-03 22:08:02 $
    1414 *
    1515 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    239239    psF64 ymodel;
    240240    psVector *deriv = psVectorAlloc(params->n, PS_TYPE_F32);
    241     deriv->n = deriv->nalloc;
    242241
    243242    // zero alpha and beta for summing below
     
    302301NOTES: EAM: this is my re-implementation of MinLM
    303302 
    304 XXX: Must implement code to handle the constrain->min, ->max, ->delta members.
     303XXX: EAM : constraints added 2006.02.15
    305304 
    306305XXX: Put the ASSERTS in.
     
    329328    PS_ASSERT_VECTOR_TYPE(params, PS_TYPE_F32, false);
    330329    psVector *paramMask = NULL;
     330    psVector *paramDelta = NULL;
     331    psVector *paramMin = NULL;
     332    psVector *paramMax = NULL;
    331333    if (constrain != NULL) {
     334        // XXX EAM : fill out the asserts
     335        paramDelta = constrain->paramDelta;
     336        paramMin = constrain->paramMin;
     337        paramMax = constrain->paramMax;
    332338        paramMask = constrain->paramMask;
    333339        if (paramMask != NULL) {
    334340            PS_ASSERT_VECTOR_TYPE(paramMask, PS_TYPE_U8, false);
    335341            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");
    345342        }
    346343    }
     
    371368    psVector *Beta   = psVectorAlloc(params->n, PS_TYPE_F64);
    372369    psVector *Params = psVectorAlloc(params->n, PS_TYPE_F32);
    373     beta->n = beta->nalloc;
    374     Beta->n = Beta->nalloc;
    375     Params->n = Params->nalloc;
    376370    psVector *dy     = NULL;
    377371    psF64 Chisq = 0.0;
    378372    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 rows
    386     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     }
    401373
    402374    // why is this needed here??? the initial guess on params is provided by the user
     
    409381    } else {
    410382        dy = psVectorAlloc(y->n, PS_TYPE_F32);
    411         dy->n = dy->nalloc;
    412383        psVectorInit(dy, 1.0);
    413384    }
     
    439410        // set a new guess for Alpha, Beta, Params
    440411        p_psMinLM_GuessABP(Alpha, Beta, Params, alpha, beta, params, paramMask,
    441                            beta_lim, param_min, param_max, lambda);
     412                           paramDelta, paramMin, paramMax, lambda);
    442413
    443414        // measure linear model prediction
     
    496467    if (covar != NULL) {
    497468        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);
    499470    }
    500471
     
    507478    if (yWt == NULL) {
    508479        psFree(dy);
    509     }
    510     if (mustFree00 == true) {
    511         psFree(beta_lim);
    512         psFree(param_min);
    513         psFree(param_max);
    514480    }
    515481    if (min->iter == min->maxIter) {
Note: See TracChangeset for help on using the changeset viewer.