Changeset 1204 in Sophya for trunk/SophyaLib/NTools/generaldata.cc
- Timestamp:
- Sep 29, 2000, 12:15:55 AM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/NTools/generaldata.cc
r1110 r1204 704 704 /*! 705 705 Pour fiter un polynome de degre ``degre''. On fite 706 Y=f(X ) ou Y=Val et X=Absc(varx). Si ``ey'' est ``true''706 Y=f(X-xc) ou Y=Val et X=Absc(varx). Si ``ey'' est ``true'' 707 707 le fit prend en compte les erreurs stoquees dans EVal, 708 708 sinon fit sans erreurs. Le resultat du fit est retourne 709 dans le polynome ``pol''. 709 dans le polynome ``pol''. On re-centre les abscisses X de ``xc''. 710 710 \verbatim 711 711 Return: … … 714 714 - -2 si probleme sur numero de variable X 715 715 - -4 si NDataGood<0 716 - -5 si nombre de data trouves different de NDataGood716 - -5 si nombre de data trouves differents de NDataGood 717 717 \endverbatim 718 718 */ 719 double GeneralFitData::PolFit(int varx,Poly& pol,int degre,bool ey ) const719 double GeneralFitData::PolFit(int varx,Poly& pol,int degre,bool ey,double xc) const 720 720 { 721 721 if(degre<0) return -1.; … … 730 730 if( ! IsValid(i) ) continue; 731 731 if(ntest>=mNDataGood) return -5.; 732 x(ntest) = Absc(varx,i) ;732 x(ntest) = Absc(varx,i) - xc; 733 733 y(ntest) = Val(i); 734 734 if(ey) ey2(ntest) = EVal(i)*EVal(i); … … 747 747 /*! 748 748 Pour fiter un polynome de degre ``degre1''. On fite 749 Z=f(X ,Y) ou Z=Val et X=Absc(varx) et Y=Absc(vary).749 Z=f(X-xc,Y-yc) ou Z=Val et X=Absc(varx) et Y=Absc(vary). 750 750 Si ``ey'' est ``true'' le fit prend en compte les erreurs 751 751 stoquees dans EVal, sinon fit sans erreurs. Si ``degre2'' … … 754 754 demande un fit de ``degre1'' pour la variable X et de degre 755 755 ``degre2'' sur la variable Y. Le resultat du fit est retourne 756 dans le polynome ``pol''. 756 dans le polynome ``pol''. On re-centre les abscisses X de ``xc'' 757 et Y de ``yc''. 757 758 \verbatim 758 759 Return: … … 765 766 \endverbatim 766 767 */ 767 double GeneralFitData::PolFit(int varx,int vary,Poly2& pol,int degre1,int degre2,bool ez) const 768 double GeneralFitData::PolFit(int varx,int vary,Poly2& pol,int degre1,int degre2,bool ez 769 ,double xc,double yc) const 768 770 { 769 771 if(degre1<0) return -1.; … … 780 782 if( ! IsValid(i) ) continue; 781 783 if(ntest>=mNDataGood) return -5.; 782 x(ntest) = Absc(varx,i) ;783 y(ntest) = Absc(vary,i) ;784 x(ntest) = Absc(varx,i) - xc; 785 y(ntest) = Absc(vary,i) - yc; 784 786 z(ntest) = Val(i); 785 787 if(ez) ez2(ntest) = EVal(i)*EVal(i); … … 993 995 994 996 return(rets); 997 } 998 999 1000 //! Compute errors according to specifications 1001 /*! 1002 \param val : value of the function 1003 \param err : value of the default error 1004 \param errtype : type of error according to enum FitErrType (def=DefaultError) 1005 \param errscale : scaling (or value) of the error (def=1.) 1006 \param errmin : minimum value of the error (def=0.) 1007 \param nozero : if true, do not return negative errors but 1008 set them to zero (def=false) 1009 \return : return the error computed according to specifications 1010 \verbatim 1011 - val is the value to be fitted ex: val = f(x,y,...) 1012 - err is the error by default we want to set. 1013 - errtype = DefaultError : errtmp = errscale*err 1014 errtype = ConstantError : errtmp = errscale 1015 errtype = SqrtError : errtmp = errscale*sqrt(|val|) 1016 errtype = ProporError : errtmp = errscale*|val| 1017 - errscale <=0 then errscale=1 1018 - errmin >=0 if errtmp>0 return max(errtmp,errmin) 1019 if errtmp<=0 return errtmp 1020 errmin <0 if errtmp>0 return max(errtmp,|errmin|) 1021 if errtmp<=0 return |errmin| 1022 \endverbatim 1023 */ 1024 double GeneralFitData::ComputeError(double val,double err,FitErrType errtype 1025 ,double errscale,double errmin,bool nozero) 1026 { 1027 bool errminneg=false; 1028 if(errmin<0.) {errminneg=true; errmin*=-1.;} 1029 if(errscale<0.) errscale=1.; 1030 1031 // Choix du type d'erreur 1032 if(errtype==ConstantError) err = errscale; 1033 else if(errtype==SqrtError) err = errscale*sqrt(fabs(val)); 1034 else if(errtype==ProporError) err = errscale*fabs(val); 1035 1036 // Gestion du minimum a partir de la valeur calculee precedemment "err" 1037 // Ex1: errmin=1., err=10. ==> 10. 1038 // err=0.5 ==> 1. 1039 // err=0. ==> 0. 1040 // err=-2. ==> -2. 1041 // Ex2: errmin=-1., err=10. ==> 10. 1042 // err=0.5 ==> 1. 1043 // err=0. ==> 1. 1044 // err=-2. ==> 11. 1045 if(err>0.) err = (err>errmin) ? err: errmin; 1046 else if(errminneg) err = errmin; 1047 1048 // ne pas retourner d'erreurs negatives si demande 1049 if(nozero && err<0.) err=0.; 1050 1051 return err; 995 1052 } 996 1053
Note:
See TracChangeset
for help on using the changeset viewer.