Changeset 26552
- Timestamp:
- Jan 8, 2010, 4:45:56 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/20091201/psModules/src/imcombine/pmSubtractionEquation.c
r26547 r26552 543 543 for (int xOrder = 0; xOrder <= spatialOrder - yOrder; xOrder++, index += numKernels) { 544 544 // Contribution to chi^2: a_i^2 P_i 545 if (!isfinite(penalties->data.F32[i])) { 546 psAbort ("invalid penalty"); 547 } 545 psAssert(isfinite(penalties->data.F32[i]), "Invalid penalty"); 548 546 matrix->data.F64[index][index] -= norm * penalties->data.F32[i]; 549 547 } … … 1360 1358 #if 0 1361 1359 { 1362 solution = psMatrixSolveSVD(solution, sumMatrix, sumVector );1360 solution = psMatrixSolveSVD(solution, sumMatrix, sumVector, 1e-5); 1363 1361 if (!solution) { 1364 1362 psError(PS_ERR_UNKNOWN, false, "SVD solution of least-squares equation failed.\n"); … … 1367 1365 return NULL; 1368 1366 } 1367 1368 #ifdef TESTING 1369 { 1370 psImage *image = psImageAlloc(1, numParams + numParams2, PS_TYPE_F64); 1371 psFits *fits = psFitsOpen("solnVector.fits", "w"); 1372 for (int i = 0; i < numParams + numParams2; i++) { 1373 fprintf(stderr, "Solution %d: %lf\n", i, solution->data.F64[i]); 1374 image->data.F64[0][i] = solution->data.F64[i]; 1375 } 1376 psFitsWriteImage(fits, NULL, image, 0, NULL); 1377 psFree(image); 1378 psFitsClose(fits); 1379 } 1380 #endif 1369 1381 1370 1382 int numSpatial = PM_SUBTRACTION_POLYTERMS(kernels->spatialOrder); // Number of spatial variations … … 1405 1417 } 1406 1418 1407 #define TOL 1.0e- 51419 #define TOL 1.0e-3 1408 1420 int normIndex = PM_SUBTRACTION_INDEX_NORM(kernels); // Index for normalisation 1409 1421 double norm = fabs(solution->data.F64[normIndex]); // Normalisation … … 1429 1441 1430 1442 if (!mask1 && !mask2) { 1431 if (fabs(param1) < fabs(param2)) { 1432 psTrace("psModules.imcombine", 7, "Parameter %d: 1 < 2\n", i); 1443 if (fabs(param1) > fabs(param2)) { 1444 psTrace("psModules.imcombine", 7, "Parameter %d: 1 > 2\n", i); 1445 MASK_BASIS_2(i); 1446 } else { 1447 psTrace("psModules.imcombine", 7, "Parameter %d: 2 > 1\n", i); 1433 1448 MASK_BASIS_1(i); 1434 } else {1435 psTrace("psModules.imcombine", 7, "Parameter %d: 2 < 1\n", i);1436 MASK_BASIS_2(i);1437 1449 } 1438 1450 } 1439 1451 } 1452 1453 calculateEquationDual(&sumMatrix, &sumVector, sumMatrix1, sumMatrix2, 1454 sumMatrixX, sumVector1, sumVector2); 1440 1455 1441 1456 #ifdef TESTING … … 1456 1471 } 1457 1472 #endif 1458 1459 calculateEquationDual(&sumMatrix, &sumVector, sumMatrix1, sumMatrix2, 1460 sumMatrixX, sumVector1, sumVector2); 1461 } 1462 #endif 1463 1464 1465 solution = psMatrixSolveSVD(solution, sumMatrix, sumVector); 1473 } 1474 #endif 1475 1476 solution = psMatrixSolveSVD(solution, sumMatrix, sumVector, 1e-7); 1466 1477 if (!solution) { 1467 1478 psError(PS_ERR_UNKNOWN, false, "SVD solution of least-squares equation failed.\n"); … … 1484 1495 { 1485 1496 psImage *image = psImageAlloc(1, numParams + numParams2, PS_TYPE_F64); 1486 psFits *fits = psFitsOpen("solnVector .fits", "w");1497 psFits *fits = psFitsOpen("solnVectorFix.fits", "w"); 1487 1498 for (int i = 0; i < numParams + numParams2; i++) { 1488 1499 fprintf(stderr, "Solution %d: %lf\n", i, solution->data.F64[i]);
Note:
See TracChangeset
for help on using the changeset viewer.
