IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 6942


Ignore:
Timestamp:
Apr 21, 2006, 11:18:44 AM (20 years ago)
Author:
magnier
Message:

modification of singular matrix handling

File:
1 edited

Legend:

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

    r6901 r6942  
    1010 *  @author EAM, IfA
    1111 *
    12  *  @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
    13  *  @date $Date: 2006-04-19 18:31:17 $
     12 *  @version $Revision: 1.13 $ $Name: not supported by cvs2svn $
     13 *  @date $Date: 2006-04-21 21:18:44 $
    1414 *
    1515 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    6262    psF64 lambda)
    6363{
    64     # define USE_LU_DECOMP 1
     64    # define USE_LU_DECOMP 0
    6565    # if (USE_LU_DECOMP)
    6666        psVector *LUv = NULL;
     
    115115
    116116    if (false == psGaussJordan(Alpha, Beta)) {
    117         psError(PS_ERR_UNKNOWN, false, "psMatrixInvert() returned NULL\n");
     117        psTrace (__func__, 4, "singular matrix in Guess ABP\n");
    118118        return(false);
    119119    }
     
    141141        }
    142142    }
     143
    143144
    144145    return(true);
     
    178179    psF64 rcF64 = p_psMinLM_SetABX(alpha, beta, params, paramMask, x, y, dy, func);
    179180    if (isnan(rcF64)) {
    180         psError(PS_ERR_UNKNOWN, false, "p_psMinLM_SetABX() returned a NAN.\n");
     181        psTrace (__func__, 5, "p_psMinLM_SetABX() returned a NAN.\n");
    181182        rc = false;
    182183    }
     
    185186    psBool rcBool = p_psMinLM_GuessABP(Alpha, delta, Params, alpha, beta, params, paramMask, NULL, NULL, NULL, 0.0);
    186187    if (rcBool == false) {
    187         psError(PS_ERR_UNKNOWN, false, "p_psMinLM_GuessABP() returned FALSE.\n");
     188        psTrace (__func__, 5, "p_psMinLM_GuessABP() returned FALSE.\n");
    188189        rc = false;
    189190    }
     
    424425
    425426        // set a new guess for Alpha, Beta, Params
    426         p_psMinLM_GuessABP(Alpha, Beta, Params, alpha, beta, params, paramMask,
    427                            paramDelta, paramMin, paramMax, lambda);
     427        if (!p_psMinLM_GuessABP(Alpha, Beta, Params, alpha, beta, params, paramMask,
     428                                paramDelta, paramMin, paramMax, lambda)) {
     429            min->iter ++;
     430            lambda *= 10.0;
     431            continue;
     432        }
    428433
    429434        // measure linear model prediction
     
    486491    // construct & return the covariance matrix (if requested)
    487492    if (covar != NULL) {
    488         p_psMinLM_GuessABP(covar, Beta, Params, alpha, beta, params, paramMask,
    489                            paramDelta, paramMin, paramMax, 0.0);
     493        if (!p_psMinLM_GuessABP(covar, Beta, Params, alpha, beta, params, paramMask,
     494                                paramDelta, paramMin, paramMax, 0.0)) {
     495            psTrace (__func__, 5, "failure to calculate covariance matrix\n");
     496        }
    490497    }
    491498
     
    538545        for (j = 0; j < Nx; j++) {
    539546            if (!isfinite(matrix[i][j])) {
    540                 psError(PS_ERR_UNKNOWN, false, "Input matrix contains NaNs: matrix[%d][%d] is %.2f\n", i, j, matrix[i][j]);
     547                psTrace (__func__, 3, "Input matrix contains NaNs: matrix[%d][%d] is %.2f\n", i, j, matrix[i][j]);
    541548                goto fescape;
    542549            }
     
    551558                    } else {
    552559                        if (ipiv[k] > 1) {
    553                             psError(PS_ERR_UNKNOWN, false, "Singular Matrix (1).\n");
     560                            psTrace (__func__, 3, "Singular Matrix (1).\n");
    554561                            goto fescape;
    555562                        }
     
    568575        indxc[i] = icol;
    569576        if (matrix[icol][icol] == 0.0) {
    570             psError(PS_ERR_UNKNOWN, false, "Singular Matrix (2).\n");
     577            psTrace (__func__, 3, "Singular Matrix (2).\n");
    571578            goto fescape;
    572579        }
Note: See TracChangeset for help on using the changeset viewer.