Changeset 682 in Sophya for trunk/SophyaLib/NTools/nbmath.c
- Timestamp:
- Dec 10, 1999, 5:56:03 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/NTools/nbmath.c
r220 r682 1643 1643 { 1644 1644 int npt,k,i,nclass; 1645 double *clas s,aa1,c2,cut;1645 double *clas,aa1,c2,cut; 1646 1646 1647 1647 *a1 =0.; … … 1654 1654 /* printf("pass 1: %g*x c2=%g/%d\n",*a1,c2,npt); */ 1655 1655 1656 clas s =malloc( *n * sizeof(double) );1657 if( clas s== NULL ) {*n=npt; return(-3.);}1656 clas = (double*) malloc( *n * sizeof(double) ); 1657 if( clas == NULL ) {*n=npt; return(-3.);} 1658 1658 1659 1659 /* elimination des mauvais points */ … … 1662 1662 if(ey[i]<=0.) continue; 1663 1663 c2 = (y[i]-aa1*x[i])/ey[i]; 1664 clas s[nclass] = c2*c2;1664 clas[nclass] = c2*c2; 1665 1665 nclass++; 1666 1666 } 1667 qsort(clas s,(size_t) nclass,(size_t) sizeof(double),qSort_Dble);1667 qsort(clas,(size_t) nclass,(size_t) sizeof(double),qSort_Dble); 1668 1668 k = (int) ( (1. - per_clean ) * (double) nclass ); 1669 1669 if(k<0) k=0; 1670 1670 if(k>=nclass) k = nclass-1; 1671 cut = clas s[k];1671 cut = clas[k]; 1672 1672 k = 0; 1673 1673 for(i=0;i<*n;i++) { 1674 clas s[i] = ey[i];1674 clas[i] = ey[i]; 1675 1675 c2 = (y[i]-aa1*x[i])/ey[i]; 1676 1676 c2 *= c2; 1677 if(ey[i]>0. && c2>cut) {clas s[i] = -1.; k++;}1677 if(ey[i]>0. && c2>cut) {clas[i] = -1.; k++;} 1678 1678 } 1679 1679 /* printf("nombre pt tues %d cut=%g\n",k,cut); */ … … 1681 1681 /* 2sd passe */ 1682 1682 npt = *n; 1683 c2 = FitProp(x,y,clas s,&npt,&aa1);1684 if(c2<0.) {*n = npt; free(clas s); return(-2.);}1683 c2 = FitProp(x,y,clas,&npt,&aa1); 1684 if(c2<0.) {*n = npt; free(clas); return(-2.);} 1685 1685 *a1 = aa1; 1686 1686 *n = npt; 1687 1687 /* printf("pass 2: %g*x c2=%g/%d\n",*a1,c2,npt); */ 1688 1688 1689 free(clas s);1689 free(clas); 1690 1690 return(c2); 1691 1691 } … … 1730 1730 { 1731 1731 int npt,k,i,nclass; 1732 double *clas s,aa0,aa1,c2,cut;1732 double *clas,aa0,aa1,c2,cut; 1733 1733 1734 1734 *a0 = *a1 =0.; … … 1742 1742 /* printf("pass 1: %g + %g*x c2=%g/%d\n",*a0,*a1,c2,npt); */ 1743 1743 1744 clas s =malloc( *n * sizeof(double) );1745 if( clas s== NULL ) {*n=npt; return(-3.);}1744 clas = (double*) malloc( *n * sizeof(double) ); 1745 if( clas == NULL ) {*n=npt; return(-3.);} 1746 1746 1747 1747 /* elimination des mauvais points */ … … 1750 1750 if(ey[i]<=0.) continue; 1751 1751 c2 = (y[i]-(aa0+aa1*x[i]))/ey[i]; 1752 clas s[nclass] = c2*c2;1752 clas[nclass] = c2*c2; 1753 1753 nclass++; 1754 1754 } 1755 qsort(clas s,(size_t) nclass,(size_t) sizeof(double),qSort_Dble);1755 qsort(clas,(size_t) nclass,(size_t) sizeof(double),qSort_Dble); 1756 1756 k = (int) ( (1. - per_clean ) * (double) nclass ); 1757 1757 if(k<0) k=0; 1758 1758 if(k>=nclass) k = nclass-1; 1759 cut = clas s[k];1759 cut = clas[k]; 1760 1760 k = 0; 1761 1761 for(i=0;i<*n;i++) { 1762 clas s[i] = ey[i];1762 clas[i] = ey[i]; 1763 1763 c2 = (y[i]-(aa0+aa1*x[i]))/ey[i]; 1764 1764 c2 *= c2; 1765 if(ey[i]>0. && c2>cut) {clas s[i] = -1.; k++;}1765 if(ey[i]>0. && c2>cut) {clas[i] = -1.; k++;} 1766 1766 } 1767 1767 /* printf("nombre pt tues %d cut=%g\n",k,cut); */ … … 1769 1769 /* 2sd passe */ 1770 1770 npt = *n; 1771 c2 = FitLin(x,y,clas s,&npt,&aa0,&aa1);1772 if(c2<0.) {*n = npt; free(clas s); return(-2.);}1771 c2 = FitLin(x,y,clas,&npt,&aa0,&aa1); 1772 if(c2<0.) {*n = npt; free(clas); return(-2.);} 1773 1773 *a0 = aa0; 1774 1774 *a1 = aa1; … … 1776 1776 /* printf("pass 2: %g + %g*x c2=%g/%d\n",*a0,*a1,c2,npt); */ 1777 1777 1778 free(clas s);1778 free(clas); 1779 1779 return(c2); 1780 1780 } … … 1815 1815 { 1816 1816 int npt,k,i,nclass; 1817 double *clas s,aa0,aa1,aa2,c2,cut;1817 double *clas,aa0,aa1,aa2,c2,cut; 1818 1818 1819 1819 *a0 = *a1 = *a2 =0.; … … 1828 1828 /* printf("pass 1: %g + %g*x + %g*x**2 c2=%g/%d\n",*a0,*a1,*a2,c2,npt); */ 1829 1829 1830 clas s =malloc( *n * sizeof(double) );1831 if( clas s== NULL ) {*n=npt; return(-3.);}1830 clas = (double*) malloc( *n * sizeof(double) ); 1831 if( clas == NULL ) {*n=npt; return(-3.);} 1832 1832 1833 1833 /* elimination des mauvais points */ … … 1836 1836 if(ey[i]<=0.) continue; 1837 1837 c2 = (y[i]-(aa0+aa1*x[i]+aa2*x[i]*x[i]))/ey[i]; 1838 clas s[nclass] = c2*c2;1838 clas[nclass] = c2*c2; 1839 1839 nclass++; 1840 1840 } 1841 qsort(clas s,(size_t) nclass,(size_t) sizeof(double),qSort_Dble);1841 qsort(clas,(size_t) nclass,(size_t) sizeof(double),qSort_Dble); 1842 1842 k = (int) ( (1. - per_clean ) * (double) nclass ); 1843 1843 if(k<0) k=0; 1844 1844 if(k>=nclass) k = nclass-1; 1845 cut = clas s[k];1845 cut = clas[k]; 1846 1846 k = 0; 1847 1847 for(i=0;i<*n;i++) { 1848 clas s[i] = ey[i];1848 clas[i] = ey[i]; 1849 1849 c2 = (y[i]-(aa0+aa1*x[i]+aa2*x[i]*x[i]))/ey[i]; 1850 1850 c2 *= c2; 1851 if(ey[i]>0. && c2>cut) {clas s[i] = -1.; k++;}1851 if(ey[i]>0. && c2>cut) {clas[i] = -1.; k++;} 1852 1852 } 1853 1853 /* printf("nombre pt tues %d cut=%g\n",k,cut); */ … … 1855 1855 /* 2sd passe */ 1856 1856 npt = *n; 1857 c2 = FitPar(x,y,clas s,&npt,&aa0,&aa1,&aa2);1858 if(c2<0.) {*n = npt; free(clas s); return(-2.);}1857 c2 = FitPar(x,y,clas,&npt,&aa0,&aa1,&aa2); 1858 if(c2<0.) {*n = npt; free(clas); return(-2.);} 1859 1859 *a0 = aa0; 1860 1860 *a1 = aa1; … … 1863 1863 /* printf("pass 2: %g + %g*x + %g*x**2 c2=%g/%d\n",*a0,*a1,*a2,c2,npt); */ 1864 1864 1865 free(clas s);1865 free(clas); 1866 1866 return(c2); 1867 1867 }
Note:
See TracChangeset
for help on using the changeset viewer.