Changeset 4321 for trunk/psLib/src/math
- Timestamp:
- Jun 20, 2005, 12:42:30 PM (21 years ago)
- Location:
- trunk/psLib/src/math
- Files:
-
- 4 edited
-
psMatrix.c (modified) (11 diffs)
-
psMatrix.h (modified) (4 diffs)
-
psMinimize.c (modified) (5 diffs)
-
psMinimize.h (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/math/psMatrix.c
r4160 r4321 21 21 * @author Robert DeSonia, MHPCC 22 22 * 23 * @version $Revision: 1.3 1$ $Name: not supported by cvs2svn $24 * @date $Date: 2005-06- 08 22:28:07$23 * @version $Revision: 1.32 $ $Name: not supported by cvs2svn $ 24 * @date $Date: 2005-06-20 22:42:29 $ 25 25 * 26 26 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 191 191 psS32 numCols = 0; 192 192 gsl_matrix *lu = NULL; 193 gsl_permutation perm ;193 gsl_permutation permGSL; 194 194 195 195 … … 212 212 213 213 // Initialize GSL data 214 perm .size = numCols;214 permGSL.size = numCols; 215 215 if (sizeof(size_t) == 4) { 216 216 *outPerm = psVectorRecycle(*outPerm, numCols, PS_TYPE_S32); … … 225 225 226 226 (*outPerm)->n = numCols; 227 perm .data = (psPtr)((*outPerm)->data.U8);227 permGSL.data = (psPtr)((*outPerm)->data.U8); 228 228 lu = gsl_matrix_alloc(numRows, numCols); 229 229 … … 232 232 233 233 // Calculate LU decomposition 234 gsl_linalg_LU_decomp(lu, &perm , &signum); // N.B., uses Gaussian Elimination with partial pivoting.234 gsl_linalg_LU_decomp(lu, &permGSL, &signum); // N.B., uses Gaussian Elimination with partial pivoting. 235 235 236 236 // Copy GSL matrix data to psImage data … … 298 298 } 299 299 300 psImage* psMatrixInvert(psImage* outImage, const psImage* inImage, psF32*det)300 psImage* psMatrixInvert(psImage* outImage, const psImage* inImage, float *det) 301 301 { 302 302 psS32 signum = 0; … … 346 346 } 347 347 348 psF32 *psMatrixDeterminant(const psImage* inImage)348 float *psMatrixDeterminant(const psImage* in) 349 349 { 350 350 psS32 signum = 0; … … 357 357 #define DETERMINANT_EXIT { return NULL; } 358 358 // Error checks 359 PS_ASSERT_GENERAL_IMAGE_NON_NULL(in Image, DETERMINANT_EXIT);360 PS_CHECK_DIMEN_AND_TYPE(in Image, PS_DIMEN_IMAGE, DETERMINANT_EXIT);361 PS_ASSERT_GENERAL_IMAGE_NON_EMPTY(in Image, DETERMINANT_EXIT);362 PS_CHECK_SQUARE(in Image, DETERMINANT_EXIT);359 PS_ASSERT_GENERAL_IMAGE_NON_NULL(in, DETERMINANT_EXIT); 360 PS_CHECK_DIMEN_AND_TYPE(in, PS_DIMEN_IMAGE, DETERMINANT_EXIT); 361 PS_ASSERT_GENERAL_IMAGE_NON_EMPTY(in, DETERMINANT_EXIT); 362 PS_CHECK_SQUARE(in, DETERMINANT_EXIT); 363 363 364 364 // Initialize data 365 numRows = in Image->numRows;366 numCols = in Image->numCols;365 numRows = in->numRows; 366 numCols = in->numCols; 367 367 368 368 // Allocate GSL structs 369 369 perm = gsl_permutation_alloc(numRows); 370 370 lu = gsl_matrix_alloc(numRows, numCols); 371 psImageToGslMatrix(lu, in Image);371 psImageToGslMatrix(lu, in); 372 372 373 373 // Calculate determinant … … 480 480 } 481 481 482 psImage* psMatrixEigenvectors(psImage* out Image, psImage* inImage)482 psImage* psMatrixEigenvectors(psImage* out, psImage* in) 483 483 { 484 484 psS32 numRows = 0; … … 486 486 gsl_vector *eVals = NULL; 487 487 gsl_eigen_symmv_workspace *w = NULL; 488 gsl_matrix *out = NULL;489 gsl_matrix *in = NULL;490 491 #define EIGENVECTORS_CLEANUP { psFree(out Image); return NULL; }492 // Error checks 493 PS_ASSERT_GENERAL_IMAGE_NON_NULL(in Image, EIGENVECTORS_CLEANUP);494 PS_CHECK_DIMEN_AND_TYPE(in Image, PS_DIMEN_IMAGE, EIGENVECTORS_CLEANUP);495 PS_ASSERT_GENERAL_IMAGE_NON_EMPTY(in Image, EIGENVECTORS_CLEANUP);496 PS_CHECK_POINTERS(in Image, outImage, EIGENVECTORS_CLEANUP);497 498 out Image = psImageRecycle(outImage, inImage->numCols, inImage->numRows, inImage->type.type);488 gsl_matrix *outGSL = NULL; 489 gsl_matrix *inGSL = NULL; 490 491 #define EIGENVECTORS_CLEANUP { psFree(out); return NULL; } 492 // Error checks 493 PS_ASSERT_GENERAL_IMAGE_NON_NULL(in, EIGENVECTORS_CLEANUP); 494 PS_CHECK_DIMEN_AND_TYPE(in, PS_DIMEN_IMAGE, EIGENVECTORS_CLEANUP); 495 PS_ASSERT_GENERAL_IMAGE_NON_EMPTY(in, EIGENVECTORS_CLEANUP); 496 PS_CHECK_POINTERS(in, out, EIGENVECTORS_CLEANUP); 497 498 out = psImageRecycle(out, in->numCols, in->numRows, in->type.type); 499 499 500 500 // Initialize data 501 numRows = in Image->numRows;502 numCols = in Image->numCols;503 504 in = gsl_matrix_alloc(numRows, numCols);505 psImageToGslMatrix(in , inImage);506 out = gsl_matrix_alloc(numRows, numCols);501 numRows = in->numRows; 502 numCols = in->numCols; 503 504 inGSL = gsl_matrix_alloc(numRows, numCols); 505 psImageToGslMatrix(inGSL, in); 506 outGSL = gsl_matrix_alloc(numRows, numCols); 507 507 508 508 // Allocate GSL structs … … 511 511 512 512 // Non-square matrices not allowed 513 PS_CHECK_SQUARE(in Image, EIGENVECTORS_CLEANUP);514 PS_CHECK_SQUARE(out Image, EIGENVECTORS_CLEANUP);513 PS_CHECK_SQUARE(in, EIGENVECTORS_CLEANUP); 514 PS_CHECK_SQUARE(out, EIGENVECTORS_CLEANUP); 515 515 516 516 // Calculate Eigenvalues and Eigenvectors...Eigenvalues not currently used 517 gsl_eigen_symmv(in , eVals, out, w);517 gsl_eigen_symmv(inGSL, eVals, outGSL, w); 518 518 519 519 // Copy GSL matrix data to psImage data 520 gslMatrixToPsImage(out Image, out);520 gslMatrixToPsImage(out, outGSL); 521 521 522 522 // Free GSL structs 523 gsl_matrix_free(in );524 gsl_matrix_free(out );523 gsl_matrix_free(inGSL); 524 gsl_matrix_free(outGSL); 525 525 gsl_eigen_symmv_free(w); 526 526 gsl_vector_free(eVals); 527 527 528 return out Image;528 return out; 529 529 } 530 530 -
trunk/psLib/src/math/psMatrix.h
r4162 r4321 21 21 * @author Ross Harman, MHPCC 22 22 * 23 * @version $Revision: 1.1 6$ $Name: not supported by cvs2svn $24 * @date $Date: 2005-06- 08 23:40:45$23 * @version $Revision: 1.17 $ $Name: not supported by cvs2svn $ 24 * @date $Date: 2005-06-20 22:42:29 $ 25 25 * 26 26 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 76 76 psImage* outImage, ///< Image to return, or NULL for in-place substitution. 77 77 const psImage* inImage, ///< Image to be inverted 78 psF32*det ///< Determinant to return, or NULL78 float *det ///< Determinant to return, or NULL 79 79 ); 80 80 … … 87 87 * @return float: Determinant from psImage. 88 88 */ 89 psF32*psMatrixDeterminant(90 const psImage* in Matrix///< Image used to calculate determinant.89 float *psMatrixDeterminant( 90 const psImage* in ///< Image used to calculate determinant. 91 91 ); 92 92 … … 129 129 */ 130 130 psImage* psMatrixEigenvectors( 131 psImage* out Image,///< Eigenvectors to return, or NULL.132 psImage* in Image///< Input image.131 psImage* out, ///< Eigenvectors to return, or NULL. 132 psImage* in ///< Input image. 133 133 ); 134 134 -
trunk/psLib/src/math/psMinimize.c
r4225 r4321 9 9 * @author GLG, MHPCC 10 10 * 11 * @version $Revision: 1.12 2$ $Name: not supported by cvs2svn $12 * @date $Date: 2005-06- 13 20:18:18$11 * @version $Revision: 1.123 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2005-06-20 22:42:30 $ 13 13 * 14 14 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 562 562 563 563 // XXX EAM this is my re-implementation of MinLM 564 psBool psMinimizeLMChi2(psMinimization *min,565 psImage *covar,566 psVector *params,567 const psVector *paramMask,568 const psArray *x,569 const psVector *y,570 const psVector *yErr,571 psMinimizeLMChi2Func func)564 bool psMinimizeLMChi2(psMinimization *min, 565 psImage *covar, 566 psVector *params, 567 const psVector *paramMask, 568 const psArray *x, 569 const psVector *y, 570 const psVector *yErr, 571 psMinimizeLMChi2Func func) 572 572 { 573 573 PS_ASSERT_PTR_NON_NULL(min, NULL); … … 1426 1426 /****************************************************************************** 1427 1427 *****************************************************************************/ 1428 psMinimization *psMinimizationAlloc( psS32maxIter,1429 psF32tol)1428 psMinimization *psMinimizationAlloc(int maxIter, 1429 float tol) 1430 1430 { 1431 1431 PS_ASSERT_INT_NONNEGATIVE(maxIter, NULL); … … 1912 1912 #define PS_MINIMIZE_POWELL_LINEMIN_ERROR_TOLERANCE 0.01 1913 1913 1914 psBool psMinimizePowell(psMinimization *min,1915 psVector *params,1916 const psVector *paramMask,1917 const psArray *coords,1918 psMinimizePowellFunc func)1914 bool psMinimizePowell(psMinimization *min, 1915 psVector *params, 1916 const psVector *paramMask, 1917 const psArray *coords, 1918 psMinimizePowellFunc func) 1919 1919 { 1920 1920 PS_ASSERT_PTR_NON_NULL(min, NULL); … … 2189 2189 psMinimizePowell(). 2190 2190 *****************************************************************************/ 2191 psBool psMinimizeChi2Powell(psMinimization *min,2192 psVector *params,2193 const psVector *paramMask,2194 const psArray *coords,2195 const psVector *value,2196 const psVector *error,2197 psMinimizeChi2PowellFunc func)2191 bool psMinimizeChi2Powell(psMinimization *min, 2192 psVector *params, 2193 const psVector *paramMask, 2194 const psArray *coords, 2195 const psVector *value, 2196 const psVector *error, 2197 psMinimizeChi2PowellFunc model) 2198 2198 { 2199 2199 myValue = (psVector *) value; 2200 2200 myError = (psVector *) error; 2201 2201 2202 Chi2PowellFunc = func;2202 Chi2PowellFunc = model; 2203 2203 2204 2204 return(psMinimizePowell(min, params, paramMask, coords, myPowellChi2Func)); -
trunk/psLib/src/math/psMinimize.h
r4285 r4321 8 8 * @author GLG, MHPCC 9 9 * 10 * @version $Revision: 1.4 6$ $Name: not supported by cvs2svn $11 * @date $Date: 2005-06- 16 03:51:58$10 * @version $Revision: 1.47 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2005-06-20 22:42:30 $ 12 12 * 13 13 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 56 56 */ 57 57 psMinimization *psMinimizationAlloc( 58 psS32 maxIter,///< Number of minimization iterations to perform.59 psF32tol ///< Requested error tolerance58 int maxIter, ///< Number of minimization iterations to perform. 59 float tol ///< Requested error tolerance 60 60 ); 61 61 … … 111 111 * @return psBool: True if successful. 112 112 */ 113 psBool psMinimizeLMChi2(113 bool psMinimizeLMChi2( 114 114 psMinimization *min, ///< Minimization specification 115 115 psImage *covar, ///< Covariance matrix … … 167 167 * @return psBool: True if successful. 168 168 */ 169 psBool psMinimizePowell(169 bool psMinimizePowell( 170 170 psMinimization *min, ///< Minimization specification 171 171 psVector *params, ///< "Best guess" for parameters that minimize func … … 211 211 * @return psBool: True is successful. 212 212 */ 213 psBool psMinimizeChi2Powell(213 bool psMinimizeChi2Powell( 214 214 psMinimization *min, ///< Minimization specification 215 215 psVector *params, ///< "Best guess" for parameters that minimize func … … 218 218 const psVector *value, ///< Measured values at the coordinates 219 219 const psVector *error, ///< Errors in the measure values (or NULL) 220 psMinimizeChi2PowellFunc func///< Specified function220 psMinimizeChi2PowellFunc model ///< Specified function 221 221 ); 222 222
Note:
See TracChangeset
for help on using the changeset viewer.
