diff options
Diffstat (limited to 'src/statisticsFunctions')
5 files changed, 112 insertions, 35 deletions
diff --git a/src/statisticsFunctions/variance/dcolumnvariancea.c b/src/statisticsFunctions/variance/dcolumnvariancea.c index 104e9860..42c12560 100644 --- a/src/statisticsFunctions/variance/dcolumnvariancea.c +++ b/src/statisticsFunctions/variance/dcolumnvariancea.c @@ -15,9 +15,31 @@ void dcolumnvariancea(double *in, int lines, int columns, double* out){ int i = 0 ; + int j = 0 ; + + double* transp = (double*) malloc ( sizeof (double) *(unsigned int) (lines*columns)); + + + for ( i = 0; i < 5 ; i++){ + for ( j = 0; j < 4 ; j++) + printf("%f ",in[i+j*lines]); + printf("\n"); + } + + + dtransposea ( in , lines , columns , transp ) ; + + + for ( i = 0; i < 4 ; i++){ + for ( j = 0; j < 5 ; j++) + printf("%f ",transp[i+j*columns]); + printf("\n"); + } for ( i = 0; i < lines ; i++) - out[i] = dvariancea ( in + i*columns , columns ) ; + out[i] = dvariancea ( transp + i*columns , columns ) ; + + free (transp); } diff --git a/src/statisticsFunctions/variance/drowvariancea.c b/src/statisticsFunctions/variance/drowvariancea.c index 9fb00e5e..15123363 100644 --- a/src/statisticsFunctions/variance/drowvariancea.c +++ b/src/statisticsFunctions/variance/drowvariancea.c @@ -17,13 +17,7 @@ void drowvariancea(double *in, int lines, int columns, double* out){ int i = 0 ; - double* transp = (double*) malloc ( sizeof (double) *(unsigned int) (lines*columns)); - - dtransposea ( in , lines , columns , transp ) ; - for ( i = 0; i < columns ; i++) - out[i] = dvariancea ( transp + i*lines , lines ) ; + out[i] = dvariancea ( in + i*lines , lines ) ; - - free (transp); } diff --git a/src/statisticsFunctions/variance/dvariancea.c b/src/statisticsFunctions/variance/dvariancea.c index 39bd6abf..98ebf014 100644 --- a/src/statisticsFunctions/variance/dvariancea.c +++ b/src/statisticsFunctions/variance/dvariancea.c @@ -17,22 +17,18 @@ double dvariancea(double *in, int size) int i = 0 ; double temp = 0 ; - double sumc = 0 ; double variance = 0; double mean = dmeana ( in , size ); for ( i = 0 ; i < size ; i++) { - temp += dpows ( (in[i] - mean ) ,2 ) ; - sumc += (in[i] - mean); } - if ( fabs ( sumc) > 1e-16) - variance = ( temp - dpows( sumc,2))/ ( size-1); - else - variance = ( temp )/ ( size -1); + + variance = ( temp )/ ( size -1); + return variance ; } diff --git a/src/statisticsFunctions/variance/testDoubleVariance.c b/src/statisticsFunctions/variance/testDoubleVariance.c index 531df13e..66f313e1 100644 --- a/src/statisticsFunctions/variance/testDoubleVariance.c +++ b/src/statisticsFunctions/variance/testDoubleVariance.c @@ -107,7 +107,7 @@ static void dvariancesTest (void ) { double toTest = dvariances (SINGLE) ; - assert ( fabs ( toTest - SINGLE ) / fabs( toTest) < 1e-06 ) ; + assert ( fabs ( toTest - SINGLE ) / fabs( toTest) < 1e-16 ) ; } @@ -115,14 +115,14 @@ static void drowvariancesTest (void ) { double toTest = drowvariances (SINGLE) ; - assert ( fabs ( toTest - SINGLE ) / fabs( toTest) < 1e-06 ) ; + assert ( fabs ( toTest - SINGLE ) / fabs( toTest) < 1e-16 ) ; } static void dcolumnvariancesTest (void) { double toTest = dcolumnvariances (SINGLE) ; - assert ( fabs ( toTest - SINGLE ) / fabs( toTest) < 1e-06 ) ; + assert ( fabs ( toTest - SINGLE ) / fabs( toTest) < 1e-16 ) ; } @@ -130,24 +130,24 @@ static void zvariancesTest (void ) { doubleComplex toTest = zvariances ( DoubleComplex ( SINGLE , SINGLE ) ); - assert ( fabs ( zreals( toTest) - SINGLE ) / fabs( zreals( toTest)) < 1e-06 ) ; - assert ( fabs ( zimags( toTest) - SINGLE ) / fabs( zimags( toTest)) < 1e-06 ) ; + assert ( fabs ( zreals( toTest) - SINGLE ) / fabs( zreals( toTest)) < 1e-16 ) ; + assert ( fabs ( zimags( toTest) - SINGLE ) / fabs( zimags( toTest)) < 1e-16 ) ; } static void zrowvariancesTest (void ) { doubleComplex toTest = zrowvariances ( DoubleComplex ( SINGLE , SINGLE ) ); - assert ( fabs ( zreals( toTest) - SINGLE ) / fabs( zreals( toTest)) < 1e-06 ) ; - assert ( fabs ( zimags( toTest) - SINGLE ) / fabs( zimags( toTest)) < 1e-06 ) ; + assert ( fabs ( zreals( toTest) - SINGLE ) / fabs( zreals( toTest)) < 1e-16 ) ; + assert ( fabs ( zimags( toTest) - SINGLE ) / fabs( zimags( toTest)) < 1e-16 ) ; } static void zcolumnvariancesTest (void ) { doubleComplex toTest = zrowvariances ( DoubleComplex ( SINGLE , SINGLE ) ); - assert ( fabs ( zreals( toTest) - SINGLE ) / fabs( zreals( toTest)) < 1e-06 ) ; - assert ( fabs ( zimags( toTest) - SINGLE ) / fabs( zimags( toTest)) < 1e-06 ) ; + assert ( fabs ( zreals( toTest) - SINGLE ) / fabs( zreals( toTest)) < 1e-16 ) ; + assert ( fabs ( zimags( toTest) - SINGLE ) / fabs( zimags( toTest)) < 1e-16 ) ; } @@ -163,11 +163,11 @@ static void dvarianceaTest ( void){ - printf ( "out : %e\t result : %e\t\n" , out , result ) ; + printf ( "out : %1.20f\t result : %1.20f\t\n" , out , result ) ; - assert ( fabs ( out - result ) / fabs( out ) < 1e-06 ) ; + assert ( fabs ( out - result ) / fabs( out ) < 1e-11 ) ; } @@ -184,8 +184,8 @@ static void drowvarianceaTest ( void ) for ( i = 0 ; i < COLUMNS ; i++) { - printf ( "ROWout : %e\t result : %e\t\n" , out[i] , result [i] ) ; - assert ( fabs ( out[i] - result[i] ) / fabs( out[i] ) < 1e-06 ) ; + printf ( "ROWout : %1.20f\t result : %1.20f\t\n" , out[i] , result [i] ) ; + assert ( fabs ( out[i] - result[i] ) / fabs( out[i] ) < 1e-16 ) ; } } @@ -204,8 +204,10 @@ static void dcolumnvarianceaTest ( void ) for ( i = 0 ; i < LINES ; i++) { - printf ( "%dCOLout : %e\t result : %e\t\n" ,i, out[i] , result [i] ) ; - assert ( fabs ( out[i] - result[i] ) / fabs( out[i] ) < 1e-06 ) ; + printf ( "%dCOLout : %1.20f\t result : %1.20f\t\n" ,i, out[i] , result [i] ) ; } + for ( i = 0 ; i < LINES ; i++) + { + assert ( fabs ( out[i] - result[i] ) / fabs( out[i] ) < 1e-16 ) ; } } @@ -222,8 +224,8 @@ static void zvarianceaTest ( void){ doubleComplex* mtoTest = DoubleComplexMatrix ( rmtoTest , imtoTest , LINES*COLUMNS ) ; doubleComplex out = zvariancea ( mtoTest , LINES*COLUMNS ); ; - assert ( fabs( zreals(out) - zreals (Result) ) / fabs (zreals (out)) < 1e-06 ); - assert( fabs( zimags(out) - zimags (Result )) / fabs (zimags (out)) < 1e-06 ); + assert ( fabs( zreals(out) - zreals (Result) ) / fabs (zreals (out)) < 1e-16 ); + assert( fabs( zimags(out) - zimags (Result )) / fabs (zimags (out)) < 1e-16 ); } @@ -273,8 +275,8 @@ static void zcolumnvarianceaTest ( void) { for ( i = 0 ; i < LINES ; i++) { printf ( "%d out : %e %e \t result %e %e \n" , i , zreals(out[i]) , zimags(out[i]), zreals(Result[i]) ,zimags( Result[i])); - assert ( fabs( zreals(out[i]) - zreals (Result[i]) ) / fabs (zreals (out[i])) < 1e-06 ); - assert( fabs( zimags(out[i]) - zimags (Result[i])) / fabs (zimags (out[i])) < 1e-06); + assert ( fabs( zreals(out[i]) - zreals (Result[i]) ) / fabs (zreals (out[i])) < 1e-16 ); + assert( fabs( zimags(out[i]) - zimags (Result[i])) / fabs (zimags (out[i])) < 1e-16); } diff --git a/src/statisticsFunctions/variance/testDoubleVarianceNono.c b/src/statisticsFunctions/variance/testDoubleVarianceNono.c index ef270e6b..4e1f425a 100644 --- a/src/statisticsFunctions/variance/testDoubleVarianceNono.c +++ b/src/statisticsFunctions/variance/testDoubleVarianceNono.c @@ -12,17 +12,60 @@ #include "variance.h" #include "assert.h" + static int test(void){ double matrice[20]={1,5,9,4,8,2,6,1,5,9,3,7,2,6,1,4,8,3,7,2}; double out, *outColumns, *outRows; + double out2, *outColumns2, *outRows2; double result= 7.5026315789473692063893; double resultColumns[5]= {1.6666666666666667406815 ,1.6666666666666667406815 ,12.916666666666666074548 ,1.6666666666666667406815 ,16.666666666666667850905}; double resultRows[4]={10.300000000000000710543 , 10.300000000000000710543 , 6.7000000000000001776357 , 6.7000000000000001776357}; int i; + double mtovar[70]={0.2113248654641211032867,0.7560438541695475578308,0.0002211346291005611420, + 0.3303270917385816574097,0.6653811042197048664093,0.6283917883411049842835, + 0.8497452358715236186981, +0.6857310198247432708740,0.8782164813019335269928,0.0683740368112921714783, + 0.5608486062847077846527,0.6623569373041391372681,0.7263506767340004444122, + 0.1985143842175602912903, +0.5442573162727057933807,0.2320747897028923034668,0.2312237196601927280426, + 0.2164632631465792655945,0.8833887814544141292572,0.6525134947150945663452, + 0.3076090742833912372589, +0.9329616213217377662659,0.2146007861010730266571,0.3126419968903064727783, + 0.3616361008025705814362,0.2922266637906432151794,0.5664248815737664699554, + 0.4826471973210573196411, +0.3321718913502991199493,0.5935094701126217842102,0.5015341597609221935272, + 0.4368587583303451538086,0.2693124809302389621735,0.6325744865462183952332, + 0.4051954015158116817474, +0.9184707831591367721558,0.0437334333546459674835,0.4818508932366967201233, + 0.2639556000940501689911,0.4148103706538677215576,0.2806498021818697452545, + 0.1280058464035391807556, +0.7783128595910966396332,0.2119030449539422988892,0.1121354666538536548615, + 0.6856895955279469490051,0.1531216683797538280487,0.6970850601792335510254, + 0.8415518426336348056793, +0.4062024755403399467468,0.4094825475476682186127,0.8784125801175832748413, + 0.1138359685428440570831,0.1998337740078568458557,0.5618660743348300457001, + 0.5896177329123020172119, +0.6853979662992060184479,0.8906224733218550682068,0.5042212805710732936859, + 0.3493615407496690750122,0.3873778772540390491486,0.9222898678854107856751, + 0.9488184261135756969452, +0.3435337245464324951172,0.3760118731297552585602,0.7340940563008189201355, + 0.2615761472843587398529,0.4993493836373090744019,0.2638578419573605060577, + 0.5253563085570931434631}; + double result2= 0.0651863337585355667736 ; + double resultColumns2[7]= {0.0650391675869589902526 , + 0.0913789208052724344356 , + 0.0837863718398224738282 , + 0.0281545517812518443501 , + 0.0549594706400152802073 , + 0.0389978730537587012228 , + 0.0796657637071630925218 , + }; + double resultRows2[10]={0.0988544518240001696130 , 0.0874673050908554156058 , 0.0678199050579095519264, 0.0591380787668954188696 , 0.0175386373980947855855 ,0.0831815708684833926556 , 0.1035239817400336881370 , 0.0657802543744439444096 , 0.0667446022405332184402 , 0.0287884625084994134891}; outColumns= malloc((uint)5*sizeof(double)); outRows= malloc((uint)4*sizeof(double)); - + outColumns2= malloc((uint)7*sizeof(double)); + outRows2= malloc((uint)10*sizeof(double)); out = dvariancea(matrice,20); drowvariancea(matrice,5,4,outRows); @@ -42,6 +85,26 @@ static int test(void){ for (i=0;i<5;i++)assert(fabs(outColumns[i]-resultColumns[i])/fabs(outColumns[i]) <1e-16); + + + out2 = dvariancea(mtovar,70); + drowvariancea(mtovar,7,10,outRows2); + dcolumnvariancea(mtovar,7,10,outColumns2); + + + printf("Variance 2 \n"); + printf("%f\n",out2); + printf("Row Variance 2 \n"); + for (i=0;i<10;i++) printf("%f\n",outRows2[i]); + printf("Column Variance 2 \n"); + for (i=0;i<7;i++) printf("%f\n",outColumns2[i]); + + assert(fabs(out2-result2)/fabs(out2) <1e-16); + for (i=0;i<10;i++)assert(fabs(outRows2[i]-resultRows2[i])/fabs(outRows2[i]) <1e-16); + + for (i=0;i<7;i++)assert(fabs(outColumns2[i]-resultColumns2[i])/fabs(outColumns2[i]) <1e-16); + + return 0; } |