Changeset 1192
- Timestamp:
- Jul 7, 2004, 1:25:08 PM (22 years ago)
- Location:
- trunk/psLib/src
- Files:
-
- 2 edited
-
dataManip/psMinimize.c (modified) (6 diffs)
-
math/psMinimize.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/dataManip/psMinimize.c
r1191 r1192 588 588 589 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 590 /****************************************************************************** 604 p_psBuildSums1D(x, sums, polyOrder): this routine calculates the powers of591 p_psBuildSums1D(x, polyOrder, sums): this routine calculates the powers of 605 592 input parameter "x" between 0 and input parameter polyOrder. The result is 606 returned as a psVector .593 returned as a psVector sums. 607 594 *****************************************************************************/ 608 psVector *p_psBuildSums1D(double x, 609 int polyOrder) 595 void p_psBuildSums1D(double x, 596 int polyOrder, 597 psVector *sums) 610 598 { 611 599 int i = 0; 612 600 double xSum = 0.0; 613 psVector *sums = NULL; 614 615 sums = psVectorAlloc(polyOrder+1, PS_TYPE_F32); 601 616 602 xSum = 1.0; 617 603 for(i=0;i<=polyOrder;i++) { 618 sums->data.F 32[i] = xSum;604 sums->data.F64[i] = xSum; 619 605 xSum*= x; 620 606 } 621 return(sums);622 607 } 623 608 … … 639 624 imageScalingFactors->data.F32[i] = (((float) 2*i) / ((float) x)) - 1.0; 640 625 } 626 641 627 return(imageScalingFactors); 642 628 } … … 761 747 int j = 0; 762 748 int k = 0; 749 psVector *xSums = NULL; 763 750 764 751 if (x->n != y->n) { … … 769 756 } 770 757 771 A = psImageAlloc(polyOrder, polyOrder, PS_TYPE_F64);772 ALUD = psImageAlloc(polyOrder, polyOrder, PS_TYPE_F64);773 B = psVectorAlloc(polyOrder, PS_TYPE_F64);774 coeffs = psVectorAlloc(polyOrder, PS_TYPE_F64);775 X = psVectorAlloc(x->n, PS_TYPE_F64);758 A = psImageAlloc(polyOrder, polyOrder, PS_TYPE_F64); 759 ALUD = psImageAlloc(polyOrder, polyOrder, PS_TYPE_F64); 760 B = psVectorAlloc(polyOrder, PS_TYPE_F64); 761 coeffs = psVectorAlloc(polyOrder, PS_TYPE_F64); 762 X = psVectorAlloc(x->n, PS_TYPE_F64); 776 763 outPerm = psVectorAlloc(polyOrder, PS_TYPE_F64); 764 xSums = psVectorAlloc(1+2*polyOrder, PS_TYPE_F64); 777 765 778 766 // Initialize data structures. … … 791 779 792 780 // Build the B and A data structs. 793 for (k=0;k<(polyOrder);k++) {794 for (i=0;i<X->n;i++) {795 B->data.F64[k]+= y->data.F64[i] * (pow(X->data.F64[i], (float) k)); 796 }797 }798 799 for(k=0;k<(polyOrder);k++) { 800 for( j=0;j<(polyOrder);j++) {801 for (i=0;i<X->n;i++) {802 A->data.F64[k][j]+= pow(X->data.F64[i], (float) (k + j));781 for (i=0;i<X->n;i++) { 782 p_psBuildSums1D(X->data.F64[i], 2*polyOrder, xSums); 783 784 for(k=0;k<(polyOrder);k++) { 785 B->data.F64[k]+= y->data.F64[i] * xSums->data.F64[k]; 786 } 787 788 for(k=0;k<(polyOrder);k++) { 789 for(j=0;j<(polyOrder);j++) { 790 A->data.F64[k][j]+= xSums->data.F64[k+j]; 803 791 } 804 792 } … … 818 806 psFree(X); 819 807 psFree(outPerm); 808 psFree(xSums); 820 809 821 810 return(NULL); -
trunk/psLib/src/math/psMinimize.c
r1191 r1192 588 588 589 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 590 /****************************************************************************** 604 p_psBuildSums1D(x, sums, polyOrder): this routine calculates the powers of591 p_psBuildSums1D(x, polyOrder, sums): this routine calculates the powers of 605 592 input parameter "x" between 0 and input parameter polyOrder. The result is 606 returned as a psVector .593 returned as a psVector sums. 607 594 *****************************************************************************/ 608 psVector *p_psBuildSums1D(double x, 609 int polyOrder) 595 void p_psBuildSums1D(double x, 596 int polyOrder, 597 psVector *sums) 610 598 { 611 599 int i = 0; 612 600 double xSum = 0.0; 613 psVector *sums = NULL; 614 615 sums = psVectorAlloc(polyOrder+1, PS_TYPE_F32); 601 616 602 xSum = 1.0; 617 603 for(i=0;i<=polyOrder;i++) { 618 sums->data.F 32[i] = xSum;604 sums->data.F64[i] = xSum; 619 605 xSum*= x; 620 606 } 621 return(sums);622 607 } 623 608 … … 639 624 imageScalingFactors->data.F32[i] = (((float) 2*i) / ((float) x)) - 1.0; 640 625 } 626 641 627 return(imageScalingFactors); 642 628 } … … 761 747 int j = 0; 762 748 int k = 0; 749 psVector *xSums = NULL; 763 750 764 751 if (x->n != y->n) { … … 769 756 } 770 757 771 A = psImageAlloc(polyOrder, polyOrder, PS_TYPE_F64);772 ALUD = psImageAlloc(polyOrder, polyOrder, PS_TYPE_F64);773 B = psVectorAlloc(polyOrder, PS_TYPE_F64);774 coeffs = psVectorAlloc(polyOrder, PS_TYPE_F64);775 X = psVectorAlloc(x->n, PS_TYPE_F64);758 A = psImageAlloc(polyOrder, polyOrder, PS_TYPE_F64); 759 ALUD = psImageAlloc(polyOrder, polyOrder, PS_TYPE_F64); 760 B = psVectorAlloc(polyOrder, PS_TYPE_F64); 761 coeffs = psVectorAlloc(polyOrder, PS_TYPE_F64); 762 X = psVectorAlloc(x->n, PS_TYPE_F64); 776 763 outPerm = psVectorAlloc(polyOrder, PS_TYPE_F64); 764 xSums = psVectorAlloc(1+2*polyOrder, PS_TYPE_F64); 777 765 778 766 // Initialize data structures. … … 791 779 792 780 // Build the B and A data structs. 793 for (k=0;k<(polyOrder);k++) {794 for (i=0;i<X->n;i++) {795 B->data.F64[k]+= y->data.F64[i] * (pow(X->data.F64[i], (float) k)); 796 }797 }798 799 for(k=0;k<(polyOrder);k++) { 800 for( j=0;j<(polyOrder);j++) {801 for (i=0;i<X->n;i++) {802 A->data.F64[k][j]+= pow(X->data.F64[i], (float) (k + j));781 for (i=0;i<X->n;i++) { 782 p_psBuildSums1D(X->data.F64[i], 2*polyOrder, xSums); 783 784 for(k=0;k<(polyOrder);k++) { 785 B->data.F64[k]+= y->data.F64[i] * xSums->data.F64[k]; 786 } 787 788 for(k=0;k<(polyOrder);k++) { 789 for(j=0;j<(polyOrder);j++) { 790 A->data.F64[k][j]+= xSums->data.F64[k+j]; 803 791 } 804 792 } … … 818 806 psFree(X); 819 807 psFree(outPerm); 808 psFree(xSums); 820 809 821 810 return(NULL);
Note:
See TracChangeset
for help on using the changeset viewer.
