Changeset 1781
- Timestamp:
- Sep 10, 2004, 12:26:09 PM (22 years ago)
- Location:
- trunk/psLib
- Files:
-
- 6 edited
-
src/dataManip/psFunctions.c (modified) (21 diffs)
-
src/dataManip/psMinimize.c (modified) (7 diffs)
-
src/math/psMinimize.c (modified) (7 diffs)
-
src/math/psPolynomial.c (modified) (21 diffs)
-
src/math/psSpline.c (modified) (21 diffs)
-
test/dataManip/tst_psFunc04.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/dataManip/psFunctions.c
r1775 r1781 7 7 * polynomials. It also contains a Gaussian functions. 8 8 * 9 * @version $Revision: 1.3 3$ $Name: not supported by cvs2svn $10 * @date $Date: 2004-09-10 02:52:02$9 * @version $Revision: 1.34 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2004-09-10 22:25:59 $ 11 11 * 12 12 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 441 441 float xSum = 1.0; 442 442 443 psTrace(".psLib.dataManip.psFunctions.p_psOrdPolynomial1DEval", 4, 444 "---- Calling p_psOrdPolynomial1DEval(%f)\n", x); 445 psTrace(".psLib.dataManip.psFunctions.p_psOrdPolynomial1DEval", 4, 446 "Polynomial order is %d\n", myPoly->n); 447 for (loop_x = 0; loop_x < myPoly->n; loop_x++) { 448 psTrace(".psLib.dataManip.psFunctions.p_psOrdPolynomial1DEval", 4, 449 "Polynomial coeff[%d] is %f\n", loop_x, myPoly->coeff[loop_x]); 450 } 451 452 443 453 if (NULL == myPoly) { 444 454 psAbort(__func__, "psPolynomial1DEval(): myPoly is NULL\n"); … … 455 465 456 466 for (loop_x = 0; loop_x < myPoly->n; loop_x++) { 457 if (myPoly->mask[loop_x] != 0) {467 if (myPoly->mask[loop_x] == 0) { 458 468 polySum += xSum * myPoly->coeff[loop_x]; 459 469 xSum *= x; … … 535 545 ySum = xSum; 536 546 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 537 if (myPoly->mask[loop_x][loop_y] != 0) {547 if (myPoly->mask[loop_x][loop_y] == 0) { 538 548 polySum += ySum * myPoly->coeff[loop_x][loop_y]; 539 549 ySum *= y; … … 564 574 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 565 575 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 566 if (myPoly->mask[loop_x][loop_y] != 0) {576 if (myPoly->mask[loop_x][loop_y] == 0) { 567 577 polySum += myPoly->coeff[loop_x][loop_y] * 568 578 psPolynomial1DEval(x, chebPolys[loop_x]) * … … 639 649 zSum = ySum; 640 650 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 641 if (myPoly->mask[loop_x][loop_y][loop_z] != 0) {651 if (myPoly->mask[loop_x][loop_y][loop_z] == 0) { 642 652 polySum += zSum * myPoly->coeff[loop_x][loop_y][loop_z]; 643 653 zSum *= z; … … 675 685 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 676 686 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 677 if (myPoly->mask[loop_x][loop_y][loop_z] != 0) {687 if (myPoly->mask[loop_x][loop_y][loop_z] == 0) { 678 688 polySum += myPoly->coeff[loop_x][loop_y][loop_z] * 679 689 psPolynomial1DEval(x, chebPolys[loop_x]) * … … 768 778 zSum = ySum; 769 779 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 770 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] != 0) {780 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 771 781 polySum += zSum * myPoly->coeff[loop_w][loop_x][loop_y][loop_z]; 772 782 zSum *= z; … … 811 821 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 812 822 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 813 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] != 0) {823 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 814 824 polySum += myPoly->coeff[loop_w][loop_x][loop_y][loop_z] * 815 825 psPolynomial1DEval(w, chebPolys[loop_w]) * … … 1129 1139 1130 1140 for (loop_x = 0; loop_x < myPoly->n; loop_x++) { 1131 if (myPoly->mask[loop_x] != 0) {1141 if (myPoly->mask[loop_x] == 0) { 1132 1142 polySum += xSum * myPoly->coeff[loop_x]; 1133 1143 xSum *= x; … … 1210 1220 ySum = xSum; 1211 1221 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 1212 if (myPoly->mask[loop_x][loop_y] != 0) {1222 if (myPoly->mask[loop_x][loop_y] == 0) { 1213 1223 polySum += ySum * myPoly->coeff[loop_x][loop_y]; 1214 1224 ySum *= y; … … 1239 1249 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 1240 1250 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 1241 if (myPoly->mask[loop_x][loop_y] != 0) {1251 if (myPoly->mask[loop_x][loop_y] == 0) { 1242 1252 polySum += myPoly->coeff[loop_x][loop_y] * 1243 1253 psPolynomial1DEval(x, chebPolys[loop_x]) * … … 1313 1323 zSum = ySum; 1314 1324 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 1315 if (myPoly->mask[loop_x][loop_y][loop_z] != 0) {1325 if (myPoly->mask[loop_x][loop_y][loop_z] == 0) { 1316 1326 polySum += zSum * myPoly->coeff[loop_x][loop_y][loop_z]; 1317 1327 zSum *= z; … … 1349 1359 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 1350 1360 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 1351 if (myPoly->mask[loop_x][loop_y][loop_z] != 0) {1361 if (myPoly->mask[loop_x][loop_y][loop_z] == 0) { 1352 1362 polySum += myPoly->coeff[loop_x][loop_y][loop_z] * 1353 1363 psPolynomial1DEval(x, chebPolys[loop_x]) * … … 1444 1454 zSum = ySum; 1445 1455 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 1446 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] != 0) {1456 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 1447 1457 polySum += zSum * myPoly->coeff[loop_w][loop_x][loop_y][loop_z]; 1448 1458 zSum *= z; … … 1487 1497 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 1488 1498 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 1489 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] != 0) {1499 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 1490 1500 polySum += myPoly->coeff[loop_w][loop_x][loop_y][loop_z] * 1491 1501 psPolynomial1DEval(w, chebPolys[loop_w]) * … … 1608 1618 tmp->domains = (float *) psAlloc((numSplines+1) * sizeof(float)); 1609 1619 width = (max - min) / ((float) numSplines); 1610 tmpDomain = min; 1611 for (i=0;i<numSplines+1;i++) { 1620 1621 (tmp->domains)[0] = min; 1622 tmpDomain = min+width; 1623 for (i=1;i<numSplines+1;i++) { 1612 1624 (tmp->domains)[i] = tmpDomain; 1613 1625 tmpDomain+= width; 1614 1626 } 1627 (tmp->domains)[numSplines] = max; 1615 1628 1616 1629 return(tmp); … … 1661 1674 int mid; 1662 1675 1676 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, 1677 "---- Calling VectorBinDisect(%f)\n", x); 1678 1663 1679 if ((x < bins[0]) || 1664 1680 (x > bins[numBins-1])) { … … 1670 1686 1671 1687 min = 0; 1672 max = numBins-1; 1673 mid = (max-min)/2; 1674 1675 while (min+1 < max) { 1676 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, "(min, max) is (%d, %d)\n", min, max); 1677 mid = (max-min)/2; 1678 1679 if (x < bins[mid]) { 1680 max = mid; 1688 max = numBins-2; 1689 mid = ((max+1)-min)/2; 1690 1691 while (min != max) { 1692 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, 1693 "(min, mid, max) is (%d, %d, %d): (x, bins) is (%f, %f)\n", 1694 min, mid, max, x, bins[mid]); 1695 1696 if (x == bins[mid]) { 1697 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, 1698 "---- Exiting VectorBinDisect(): bin %d\n", min); 1699 return(min); 1700 } else if (x < bins[mid]) { 1701 max = mid-1; 1681 1702 } else { 1682 1703 min = mid; 1683 1704 } 1684 } 1685 1705 mid = ((max+1)+min)/2; 1706 } 1707 1708 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, 1709 "---- Exiting VectorBinDisect(): bin %d\n", min); 1686 1710 return(min); 1687 1711 } … … 1733 1757 float slope; 1734 1758 1759 psTrace(".psLib.dataManip.psFunctions.psSpline1DGen", 4, 1760 "---- Calling psSpline1DGen()\n"); 1761 1735 1762 if (data->n != (1 + spline->n)) { 1736 1763 psLogMsg(__func__, PS_LOG_WARN, … … 1744 1771 slope = (data->data.F32[i+1] - data->data.F32[i]) / 1745 1772 (spline->domains[i+1] - spline->domains[i]); 1746 (spline->spline[ 0])->coeff[0] = data->data.F32[i] -1773 (spline->spline[i])->coeff[0] = data->data.F32[i] - 1747 1774 (slope * spline->domains[i]); 1748 (spline->spline[0])->coeff[1] = slope; 1749 } 1775 //printf("HMMM (%f, %f, %f)\n", data->data.F32[i], slope, spline->domains[i]); 1776 1777 (spline->spline[i])->coeff[1] = slope; 1778 psTrace(".psLib.dataManip.psFunctions.psSpline1DGen", 4, 1779 "---- spline %d coeffs are (%f, %f)\n", i, 1780 (spline->spline[i])->coeff[0], 1781 (spline->spline[i])->coeff[1]); 1782 } 1783 psTrace(".psLib.dataManip.psFunctions.psSpline1DGen", 4, 1784 "---- Exiting psSpline1DGen()\n"); 1750 1785 return((psSpline1D *) spline); 1751 1786 } else if (4 == (spline->spline[0])->n) { -
trunk/psLib/src/dataManip/psMinimize.c
r1775 r1781 9 9 * @author George Gusciora, MHPCC 10 10 * 11 * @version $Revision: 1.3 6$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-09-10 02:52:02$11 * @version $Revision: 1.37 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-09-10 22:25:59 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 845 845 } 846 846 /****************************************************************************** 847 This routine will take an procedure which calculates an arbitrary function 848 and it's derivative and minimize it. 849 847 850 GUS 851 852 XXX: Do this: 853 After checking that all entries in the paramMask are 1 or 0, when 854 forming the A matrix from alpha, try this: 855 856 A[i][i] = (1 + lambda*paramask[i]) * alpha[i][i]; 857 858 848 859 *****************************************************************************/ 849 860 bool psMinimizeLM(psMinimization *min, … … 857 868 psVector *perm = psVectorAlloc(params->n, PS_TYPE_F32); 858 869 psVector *newParams = psVectorAlloc(params->n, PS_TYPE_F32); 870 psVector *origParams = psVectorAlloc(params->n, PS_TYPE_F32); 859 871 psImage *alpha = psImageAlloc(params->n, params->n, PS_TYPE_F32); 860 872 psImage *A = psImageAlloc(params->n, params->n, PS_TYPE_F32); … … 869 881 float lamda = 1.0; 870 882 883 for (i=0;i<params->n;i++) { 884 origParams->data.F32[i] = params->data.F32[i]; 885 } 886 871 887 min->lastDelta = -HUGE; 872 888 min->iter = 0; 873 889 min->value = func(deriv, params, coords); 890 for (i=0;i<params->n;i++) { 891 if ((paramMask != NULL) && 892 (paramMask->data.U8[i] != 0)) { 893 deriv->data.F32[i] = 0.0; 894 } 895 } 874 896 875 897 while ((min->lastDelta > min->tol) && … … 897 919 newParams = psMatrixLUSolve(newParams, aOut, beta, perm); 898 920 921 for (i=0;i<params->n;i++) { 922 if ((paramMask != NULL) && 923 (paramMask->data.U8[i] != 0)) { 924 newParams->data.F32[i] = origParams->data.F32[i]; 925 } 926 } 927 899 928 oldValue = min->value; 900 929 newValue = func(newDeriv, newParams, coords); 930 for (i=0;i<params->n;i++) { 931 if ((paramMask != NULL) && 932 (paramMask->data.U8[i] != 0)) { 933 deriv->data.F32[i] = 0.0; 934 } 935 } 936 901 937 if (oldValue > newValue) { 902 938 min->lastDelta = oldValue - newValue; 903 939 min->value = newValue; 904 940 941 // No need to check the paramMask here since we already did so 942 // before the last function evaluation. 905 943 for (i=0;i<params->n;i++) { 906 944 params->data.F32[i] = newParams->data.F32[i]; … … 918 956 psFree(perm); 919 957 psFree(newParams); 958 psFree(origParams); 920 959 psFree(alpha); 921 960 psFree(A); … … 1769 1808 1770 1809 The basic idea is calculate chi-squared for a set of params/coords/errors. 1771 This functions uses global evariables to receive the function pointer, the1810 This functions uses global variables to receive the function pointer, the 1772 1811 data values, and the data errors. 1773 1812 *****************************************************************************/ -
trunk/psLib/src/math/psMinimize.c
r1775 r1781 9 9 * @author George Gusciora, MHPCC 10 10 * 11 * @version $Revision: 1.3 6$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-09-10 02:52:02$11 * @version $Revision: 1.37 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-09-10 22:25:59 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 845 845 } 846 846 /****************************************************************************** 847 This routine will take an procedure which calculates an arbitrary function 848 and it's derivative and minimize it. 849 847 850 GUS 851 852 XXX: Do this: 853 After checking that all entries in the paramMask are 1 or 0, when 854 forming the A matrix from alpha, try this: 855 856 A[i][i] = (1 + lambda*paramask[i]) * alpha[i][i]; 857 858 848 859 *****************************************************************************/ 849 860 bool psMinimizeLM(psMinimization *min, … … 857 868 psVector *perm = psVectorAlloc(params->n, PS_TYPE_F32); 858 869 psVector *newParams = psVectorAlloc(params->n, PS_TYPE_F32); 870 psVector *origParams = psVectorAlloc(params->n, PS_TYPE_F32); 859 871 psImage *alpha = psImageAlloc(params->n, params->n, PS_TYPE_F32); 860 872 psImage *A = psImageAlloc(params->n, params->n, PS_TYPE_F32); … … 869 881 float lamda = 1.0; 870 882 883 for (i=0;i<params->n;i++) { 884 origParams->data.F32[i] = params->data.F32[i]; 885 } 886 871 887 min->lastDelta = -HUGE; 872 888 min->iter = 0; 873 889 min->value = func(deriv, params, coords); 890 for (i=0;i<params->n;i++) { 891 if ((paramMask != NULL) && 892 (paramMask->data.U8[i] != 0)) { 893 deriv->data.F32[i] = 0.0; 894 } 895 } 874 896 875 897 while ((min->lastDelta > min->tol) && … … 897 919 newParams = psMatrixLUSolve(newParams, aOut, beta, perm); 898 920 921 for (i=0;i<params->n;i++) { 922 if ((paramMask != NULL) && 923 (paramMask->data.U8[i] != 0)) { 924 newParams->data.F32[i] = origParams->data.F32[i]; 925 } 926 } 927 899 928 oldValue = min->value; 900 929 newValue = func(newDeriv, newParams, coords); 930 for (i=0;i<params->n;i++) { 931 if ((paramMask != NULL) && 932 (paramMask->data.U8[i] != 0)) { 933 deriv->data.F32[i] = 0.0; 934 } 935 } 936 901 937 if (oldValue > newValue) { 902 938 min->lastDelta = oldValue - newValue; 903 939 min->value = newValue; 904 940 941 // No need to check the paramMask here since we already did so 942 // before the last function evaluation. 905 943 for (i=0;i<params->n;i++) { 906 944 params->data.F32[i] = newParams->data.F32[i]; … … 918 956 psFree(perm); 919 957 psFree(newParams); 958 psFree(origParams); 920 959 psFree(alpha); 921 960 psFree(A); … … 1769 1808 1770 1809 The basic idea is calculate chi-squared for a set of params/coords/errors. 1771 This functions uses global evariables to receive the function pointer, the1810 This functions uses global variables to receive the function pointer, the 1772 1811 data values, and the data errors. 1773 1812 *****************************************************************************/ -
trunk/psLib/src/math/psPolynomial.c
r1775 r1781 7 7 * polynomials. It also contains a Gaussian functions. 8 8 * 9 * @version $Revision: 1.3 3$ $Name: not supported by cvs2svn $10 * @date $Date: 2004-09-10 02:52:02$9 * @version $Revision: 1.34 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2004-09-10 22:25:59 $ 11 11 * 12 12 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 441 441 float xSum = 1.0; 442 442 443 psTrace(".psLib.dataManip.psFunctions.p_psOrdPolynomial1DEval", 4, 444 "---- Calling p_psOrdPolynomial1DEval(%f)\n", x); 445 psTrace(".psLib.dataManip.psFunctions.p_psOrdPolynomial1DEval", 4, 446 "Polynomial order is %d\n", myPoly->n); 447 for (loop_x = 0; loop_x < myPoly->n; loop_x++) { 448 psTrace(".psLib.dataManip.psFunctions.p_psOrdPolynomial1DEval", 4, 449 "Polynomial coeff[%d] is %f\n", loop_x, myPoly->coeff[loop_x]); 450 } 451 452 443 453 if (NULL == myPoly) { 444 454 psAbort(__func__, "psPolynomial1DEval(): myPoly is NULL\n"); … … 455 465 456 466 for (loop_x = 0; loop_x < myPoly->n; loop_x++) { 457 if (myPoly->mask[loop_x] != 0) {467 if (myPoly->mask[loop_x] == 0) { 458 468 polySum += xSum * myPoly->coeff[loop_x]; 459 469 xSum *= x; … … 535 545 ySum = xSum; 536 546 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 537 if (myPoly->mask[loop_x][loop_y] != 0) {547 if (myPoly->mask[loop_x][loop_y] == 0) { 538 548 polySum += ySum * myPoly->coeff[loop_x][loop_y]; 539 549 ySum *= y; … … 564 574 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 565 575 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 566 if (myPoly->mask[loop_x][loop_y] != 0) {576 if (myPoly->mask[loop_x][loop_y] == 0) { 567 577 polySum += myPoly->coeff[loop_x][loop_y] * 568 578 psPolynomial1DEval(x, chebPolys[loop_x]) * … … 639 649 zSum = ySum; 640 650 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 641 if (myPoly->mask[loop_x][loop_y][loop_z] != 0) {651 if (myPoly->mask[loop_x][loop_y][loop_z] == 0) { 642 652 polySum += zSum * myPoly->coeff[loop_x][loop_y][loop_z]; 643 653 zSum *= z; … … 675 685 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 676 686 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 677 if (myPoly->mask[loop_x][loop_y][loop_z] != 0) {687 if (myPoly->mask[loop_x][loop_y][loop_z] == 0) { 678 688 polySum += myPoly->coeff[loop_x][loop_y][loop_z] * 679 689 psPolynomial1DEval(x, chebPolys[loop_x]) * … … 768 778 zSum = ySum; 769 779 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 770 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] != 0) {780 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 771 781 polySum += zSum * myPoly->coeff[loop_w][loop_x][loop_y][loop_z]; 772 782 zSum *= z; … … 811 821 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 812 822 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 813 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] != 0) {823 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 814 824 polySum += myPoly->coeff[loop_w][loop_x][loop_y][loop_z] * 815 825 psPolynomial1DEval(w, chebPolys[loop_w]) * … … 1129 1139 1130 1140 for (loop_x = 0; loop_x < myPoly->n; loop_x++) { 1131 if (myPoly->mask[loop_x] != 0) {1141 if (myPoly->mask[loop_x] == 0) { 1132 1142 polySum += xSum * myPoly->coeff[loop_x]; 1133 1143 xSum *= x; … … 1210 1220 ySum = xSum; 1211 1221 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 1212 if (myPoly->mask[loop_x][loop_y] != 0) {1222 if (myPoly->mask[loop_x][loop_y] == 0) { 1213 1223 polySum += ySum * myPoly->coeff[loop_x][loop_y]; 1214 1224 ySum *= y; … … 1239 1249 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 1240 1250 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 1241 if (myPoly->mask[loop_x][loop_y] != 0) {1251 if (myPoly->mask[loop_x][loop_y] == 0) { 1242 1252 polySum += myPoly->coeff[loop_x][loop_y] * 1243 1253 psPolynomial1DEval(x, chebPolys[loop_x]) * … … 1313 1323 zSum = ySum; 1314 1324 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 1315 if (myPoly->mask[loop_x][loop_y][loop_z] != 0) {1325 if (myPoly->mask[loop_x][loop_y][loop_z] == 0) { 1316 1326 polySum += zSum * myPoly->coeff[loop_x][loop_y][loop_z]; 1317 1327 zSum *= z; … … 1349 1359 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 1350 1360 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 1351 if (myPoly->mask[loop_x][loop_y][loop_z] != 0) {1361 if (myPoly->mask[loop_x][loop_y][loop_z] == 0) { 1352 1362 polySum += myPoly->coeff[loop_x][loop_y][loop_z] * 1353 1363 psPolynomial1DEval(x, chebPolys[loop_x]) * … … 1444 1454 zSum = ySum; 1445 1455 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 1446 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] != 0) {1456 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 1447 1457 polySum += zSum * myPoly->coeff[loop_w][loop_x][loop_y][loop_z]; 1448 1458 zSum *= z; … … 1487 1497 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 1488 1498 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 1489 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] != 0) {1499 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 1490 1500 polySum += myPoly->coeff[loop_w][loop_x][loop_y][loop_z] * 1491 1501 psPolynomial1DEval(w, chebPolys[loop_w]) * … … 1608 1618 tmp->domains = (float *) psAlloc((numSplines+1) * sizeof(float)); 1609 1619 width = (max - min) / ((float) numSplines); 1610 tmpDomain = min; 1611 for (i=0;i<numSplines+1;i++) { 1620 1621 (tmp->domains)[0] = min; 1622 tmpDomain = min+width; 1623 for (i=1;i<numSplines+1;i++) { 1612 1624 (tmp->domains)[i] = tmpDomain; 1613 1625 tmpDomain+= width; 1614 1626 } 1627 (tmp->domains)[numSplines] = max; 1615 1628 1616 1629 return(tmp); … … 1661 1674 int mid; 1662 1675 1676 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, 1677 "---- Calling VectorBinDisect(%f)\n", x); 1678 1663 1679 if ((x < bins[0]) || 1664 1680 (x > bins[numBins-1])) { … … 1670 1686 1671 1687 min = 0; 1672 max = numBins-1; 1673 mid = (max-min)/2; 1674 1675 while (min+1 < max) { 1676 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, "(min, max) is (%d, %d)\n", min, max); 1677 mid = (max-min)/2; 1678 1679 if (x < bins[mid]) { 1680 max = mid; 1688 max = numBins-2; 1689 mid = ((max+1)-min)/2; 1690 1691 while (min != max) { 1692 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, 1693 "(min, mid, max) is (%d, %d, %d): (x, bins) is (%f, %f)\n", 1694 min, mid, max, x, bins[mid]); 1695 1696 if (x == bins[mid]) { 1697 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, 1698 "---- Exiting VectorBinDisect(): bin %d\n", min); 1699 return(min); 1700 } else if (x < bins[mid]) { 1701 max = mid-1; 1681 1702 } else { 1682 1703 min = mid; 1683 1704 } 1684 } 1685 1705 mid = ((max+1)+min)/2; 1706 } 1707 1708 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, 1709 "---- Exiting VectorBinDisect(): bin %d\n", min); 1686 1710 return(min); 1687 1711 } … … 1733 1757 float slope; 1734 1758 1759 psTrace(".psLib.dataManip.psFunctions.psSpline1DGen", 4, 1760 "---- Calling psSpline1DGen()\n"); 1761 1735 1762 if (data->n != (1 + spline->n)) { 1736 1763 psLogMsg(__func__, PS_LOG_WARN, … … 1744 1771 slope = (data->data.F32[i+1] - data->data.F32[i]) / 1745 1772 (spline->domains[i+1] - spline->domains[i]); 1746 (spline->spline[ 0])->coeff[0] = data->data.F32[i] -1773 (spline->spline[i])->coeff[0] = data->data.F32[i] - 1747 1774 (slope * spline->domains[i]); 1748 (spline->spline[0])->coeff[1] = slope; 1749 } 1775 //printf("HMMM (%f, %f, %f)\n", data->data.F32[i], slope, spline->domains[i]); 1776 1777 (spline->spline[i])->coeff[1] = slope; 1778 psTrace(".psLib.dataManip.psFunctions.psSpline1DGen", 4, 1779 "---- spline %d coeffs are (%f, %f)\n", i, 1780 (spline->spline[i])->coeff[0], 1781 (spline->spline[i])->coeff[1]); 1782 } 1783 psTrace(".psLib.dataManip.psFunctions.psSpline1DGen", 4, 1784 "---- Exiting psSpline1DGen()\n"); 1750 1785 return((psSpline1D *) spline); 1751 1786 } else if (4 == (spline->spline[0])->n) { -
trunk/psLib/src/math/psSpline.c
r1775 r1781 7 7 * polynomials. It also contains a Gaussian functions. 8 8 * 9 * @version $Revision: 1.3 3$ $Name: not supported by cvs2svn $10 * @date $Date: 2004-09-10 02:52:02$9 * @version $Revision: 1.34 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2004-09-10 22:25:59 $ 11 11 * 12 12 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 441 441 float xSum = 1.0; 442 442 443 psTrace(".psLib.dataManip.psFunctions.p_psOrdPolynomial1DEval", 4, 444 "---- Calling p_psOrdPolynomial1DEval(%f)\n", x); 445 psTrace(".psLib.dataManip.psFunctions.p_psOrdPolynomial1DEval", 4, 446 "Polynomial order is %d\n", myPoly->n); 447 for (loop_x = 0; loop_x < myPoly->n; loop_x++) { 448 psTrace(".psLib.dataManip.psFunctions.p_psOrdPolynomial1DEval", 4, 449 "Polynomial coeff[%d] is %f\n", loop_x, myPoly->coeff[loop_x]); 450 } 451 452 443 453 if (NULL == myPoly) { 444 454 psAbort(__func__, "psPolynomial1DEval(): myPoly is NULL\n"); … … 455 465 456 466 for (loop_x = 0; loop_x < myPoly->n; loop_x++) { 457 if (myPoly->mask[loop_x] != 0) {467 if (myPoly->mask[loop_x] == 0) { 458 468 polySum += xSum * myPoly->coeff[loop_x]; 459 469 xSum *= x; … … 535 545 ySum = xSum; 536 546 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 537 if (myPoly->mask[loop_x][loop_y] != 0) {547 if (myPoly->mask[loop_x][loop_y] == 0) { 538 548 polySum += ySum * myPoly->coeff[loop_x][loop_y]; 539 549 ySum *= y; … … 564 574 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 565 575 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 566 if (myPoly->mask[loop_x][loop_y] != 0) {576 if (myPoly->mask[loop_x][loop_y] == 0) { 567 577 polySum += myPoly->coeff[loop_x][loop_y] * 568 578 psPolynomial1DEval(x, chebPolys[loop_x]) * … … 639 649 zSum = ySum; 640 650 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 641 if (myPoly->mask[loop_x][loop_y][loop_z] != 0) {651 if (myPoly->mask[loop_x][loop_y][loop_z] == 0) { 642 652 polySum += zSum * myPoly->coeff[loop_x][loop_y][loop_z]; 643 653 zSum *= z; … … 675 685 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 676 686 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 677 if (myPoly->mask[loop_x][loop_y][loop_z] != 0) {687 if (myPoly->mask[loop_x][loop_y][loop_z] == 0) { 678 688 polySum += myPoly->coeff[loop_x][loop_y][loop_z] * 679 689 psPolynomial1DEval(x, chebPolys[loop_x]) * … … 768 778 zSum = ySum; 769 779 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 770 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] != 0) {780 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 771 781 polySum += zSum * myPoly->coeff[loop_w][loop_x][loop_y][loop_z]; 772 782 zSum *= z; … … 811 821 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 812 822 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 813 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] != 0) {823 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 814 824 polySum += myPoly->coeff[loop_w][loop_x][loop_y][loop_z] * 815 825 psPolynomial1DEval(w, chebPolys[loop_w]) * … … 1129 1139 1130 1140 for (loop_x = 0; loop_x < myPoly->n; loop_x++) { 1131 if (myPoly->mask[loop_x] != 0) {1141 if (myPoly->mask[loop_x] == 0) { 1132 1142 polySum += xSum * myPoly->coeff[loop_x]; 1133 1143 xSum *= x; … … 1210 1220 ySum = xSum; 1211 1221 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 1212 if (myPoly->mask[loop_x][loop_y] != 0) {1222 if (myPoly->mask[loop_x][loop_y] == 0) { 1213 1223 polySum += ySum * myPoly->coeff[loop_x][loop_y]; 1214 1224 ySum *= y; … … 1239 1249 for (loop_x = 0; loop_x < myPoly->nX; loop_x++) { 1240 1250 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 1241 if (myPoly->mask[loop_x][loop_y] != 0) {1251 if (myPoly->mask[loop_x][loop_y] == 0) { 1242 1252 polySum += myPoly->coeff[loop_x][loop_y] * 1243 1253 psPolynomial1DEval(x, chebPolys[loop_x]) * … … 1313 1323 zSum = ySum; 1314 1324 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 1315 if (myPoly->mask[loop_x][loop_y][loop_z] != 0) {1325 if (myPoly->mask[loop_x][loop_y][loop_z] == 0) { 1316 1326 polySum += zSum * myPoly->coeff[loop_x][loop_y][loop_z]; 1317 1327 zSum *= z; … … 1349 1359 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 1350 1360 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 1351 if (myPoly->mask[loop_x][loop_y][loop_z] != 0) {1361 if (myPoly->mask[loop_x][loop_y][loop_z] == 0) { 1352 1362 polySum += myPoly->coeff[loop_x][loop_y][loop_z] * 1353 1363 psPolynomial1DEval(x, chebPolys[loop_x]) * … … 1444 1454 zSum = ySum; 1445 1455 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 1446 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] != 0) {1456 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 1447 1457 polySum += zSum * myPoly->coeff[loop_w][loop_x][loop_y][loop_z]; 1448 1458 zSum *= z; … … 1487 1497 for (loop_y = 0; loop_y < myPoly->nY; loop_y++) { 1488 1498 for (loop_z = 0; loop_z < myPoly->nZ; loop_z++) { 1489 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] != 0) {1499 if (myPoly->mask[loop_w][loop_x][loop_y][loop_z] == 0) { 1490 1500 polySum += myPoly->coeff[loop_w][loop_x][loop_y][loop_z] * 1491 1501 psPolynomial1DEval(w, chebPolys[loop_w]) * … … 1608 1618 tmp->domains = (float *) psAlloc((numSplines+1) * sizeof(float)); 1609 1619 width = (max - min) / ((float) numSplines); 1610 tmpDomain = min; 1611 for (i=0;i<numSplines+1;i++) { 1620 1621 (tmp->domains)[0] = min; 1622 tmpDomain = min+width; 1623 for (i=1;i<numSplines+1;i++) { 1612 1624 (tmp->domains)[i] = tmpDomain; 1613 1625 tmpDomain+= width; 1614 1626 } 1627 (tmp->domains)[numSplines] = max; 1615 1628 1616 1629 return(tmp); … … 1661 1674 int mid; 1662 1675 1676 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, 1677 "---- Calling VectorBinDisect(%f)\n", x); 1678 1663 1679 if ((x < bins[0]) || 1664 1680 (x > bins[numBins-1])) { … … 1670 1686 1671 1687 min = 0; 1672 max = numBins-1; 1673 mid = (max-min)/2; 1674 1675 while (min+1 < max) { 1676 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, "(min, max) is (%d, %d)\n", min, max); 1677 mid = (max-min)/2; 1678 1679 if (x < bins[mid]) { 1680 max = mid; 1688 max = numBins-2; 1689 mid = ((max+1)-min)/2; 1690 1691 while (min != max) { 1692 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, 1693 "(min, mid, max) is (%d, %d, %d): (x, bins) is (%f, %f)\n", 1694 min, mid, max, x, bins[mid]); 1695 1696 if (x == bins[mid]) { 1697 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, 1698 "---- Exiting VectorBinDisect(): bin %d\n", min); 1699 return(min); 1700 } else if (x < bins[mid]) { 1701 max = mid-1; 1681 1702 } else { 1682 1703 min = mid; 1683 1704 } 1684 } 1685 1705 mid = ((max+1)+min)/2; 1706 } 1707 1708 psTrace(".psLib.dataManip.psFunctions.VectorBinDisect", 4, 1709 "---- Exiting VectorBinDisect(): bin %d\n", min); 1686 1710 return(min); 1687 1711 } … … 1733 1757 float slope; 1734 1758 1759 psTrace(".psLib.dataManip.psFunctions.psSpline1DGen", 4, 1760 "---- Calling psSpline1DGen()\n"); 1761 1735 1762 if (data->n != (1 + spline->n)) { 1736 1763 psLogMsg(__func__, PS_LOG_WARN, … … 1744 1771 slope = (data->data.F32[i+1] - data->data.F32[i]) / 1745 1772 (spline->domains[i+1] - spline->domains[i]); 1746 (spline->spline[ 0])->coeff[0] = data->data.F32[i] -1773 (spline->spline[i])->coeff[0] = data->data.F32[i] - 1747 1774 (slope * spline->domains[i]); 1748 (spline->spline[0])->coeff[1] = slope; 1749 } 1775 //printf("HMMM (%f, %f, %f)\n", data->data.F32[i], slope, spline->domains[i]); 1776 1777 (spline->spline[i])->coeff[1] = slope; 1778 psTrace(".psLib.dataManip.psFunctions.psSpline1DGen", 4, 1779 "---- spline %d coeffs are (%f, %f)\n", i, 1780 (spline->spline[i])->coeff[0], 1781 (spline->spline[i])->coeff[1]); 1782 } 1783 psTrace(".psLib.dataManip.psFunctions.psSpline1DGen", 4, 1784 "---- Exiting psSpline1DGen()\n"); 1750 1785 return((psSpline1D *) spline); 1751 1786 } else if (4 == (spline->spline[0])->n) { -
trunk/psLib/test/dataManip/tst_psFunc04.c
r1775 r1781 11 11 #include "psFunctions.h" 12 12 13 #define N 1013 #define N 8 14 14 15 15 int main() … … 23 23 psVector *data; 24 24 25 psTraceSetLevel(".", 9);25 psTraceSetLevel(".", 0); 26 26 /****************************************************************************/ 27 27 /****************************************************************************/ … … 33 33 tmpSpline = psSpline1DAlloc(N, 1, 1.0, 10.0); 34 34 35 35 36 for (i=0;i<N+1;i++) { 36 data->data.F32[i] = (float) tmpSpline->domains[i]; 37 printf("tmpSpline->domains[%d] is %f\n", i, tmpSpline->domains[i]); 38 } 39 40 for (i=0;i<N+1;i++) { 41 data->data.F32[i] = tmpSpline->domains[i]; 37 42 } 38 43
Note:
See TracChangeset
for help on using the changeset viewer.
