summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/statisticsFunctions/variance/dcolumnvariancea.c24
-rw-r--r--src/statisticsFunctions/variance/drowvariancea.c8
-rw-r--r--src/statisticsFunctions/variance/dvariancea.c10
-rw-r--r--src/statisticsFunctions/variance/testDoubleVariance.c40
-rw-r--r--src/statisticsFunctions/variance/testDoubleVarianceNono.c65
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;
}