diff options
-rw-r--r-- | scilab2c/src/matrixOperations/dist/Makefile.am | 18 | ||||
-rw-r--r-- | scilab2c/src/matrixOperations/dist/Makefile.in | 16 | ||||
-rw-r--r-- | scilab2c/src/matrixOperations/dist/cdista.c | 42 | ||||
-rw-r--r-- | scilab2c/src/matrixOperations/dist/ddista.c | 37 | ||||
-rw-r--r-- | scilab2c/src/matrixOperations/dist/ddists.c | 5 | ||||
-rw-r--r-- | scilab2c/src/matrixOperations/dist/sdista.c | 39 | ||||
-rw-r--r-- | scilab2c/src/matrixOperations/dist/sdists.c | 5 | ||||
-rw-r--r-- | scilab2c/src/matrixOperations/dist/testDoubleDist.c | 74 | ||||
-rw-r--r-- | scilab2c/src/matrixOperations/dist/testFloatDist.c | 74 | ||||
-rw-r--r-- | scilab2c/src/matrixOperations/dist/zdista.c | 43 |
10 files changed, 309 insertions, 44 deletions
diff --git a/scilab2c/src/matrixOperations/dist/Makefile.am b/scilab2c/src/matrixOperations/dist/Makefile.am index c51376a4..d9f786df 100644 --- a/scilab2c/src/matrixOperations/dist/Makefile.am +++ b/scilab2c/src/matrixOperations/dist/Makefile.am @@ -11,9 +11,10 @@ ## libDist_la_CFLAGS = -I $(top_builddir)/type \ - -I $(top_builddir)/matrixOperations/includes \ - -I $(top_builddir)/operations/includes \ - -I $(top_builddir)/elementaryFunctions/includes + -I $(top_builddir)/matrixOperations/includes \ + -I $(top_builddir)/operations/includes \ + -I $(top_builddir)/elementaryFunctions/includes\ + -I $(top_builddir)/auxiliaryFunctions/includes instdir = $(top_builddir)/lib @@ -40,7 +41,7 @@ libDist_la_SOURCES = $(HEAD) \ check_PROGRAMS = testDoubleDist testFloatDist -check_LDADD = $(top_builddir)/type/libDoubleComplex.la \ +check_LDADD = $(top_builddir)/type/libDoubleComplex.la \ $(top_builddir)/type/libFloatComplex.la \ $(top_builddir)/lib/lapack/libscilapack.la \ $(top_builddir)/elementaryFunctions/pow/libPow.la \ @@ -55,14 +56,21 @@ check_LDADD = $(top_builddir)/type/libDoubleComplex.la \ $(top_builddir)/elementaryFunctions/cosh/libCosh.la \ $(top_builddir)/auxiliaryFunctions/pythag/libPythag.la \ $(top_builddir)/auxiliaryFunctions/abs/libAbs.la \ + $(top_builddir)/auxiliaryFunctions/conj/libConj.la \ $(top_builddir)/operations/multiplication/libMultiplication.la \ $(top_builddir)/operations/addition/libAddition.la \ + $(top_builddir)/operations/subtraction/libSubtraction.la \ + $(top_builddir)/matrixOperations/multiplication/libMatrixMultiplication.la \ + $(top_builddir)/matrixOperations/transpose/libMatrixTranspose.la \ + $(top_builddir)/matrixOperations/spec/libSpec.la \ + $(top_builddir)/matrixOperations/zeros/libMatrixZeros.la \ libDist.la check_INCLUDES = -I $(top_builddir)/type \ -I $(top_builddir)/matrixOperations/includes \ -I $(top_builddir)/operations/includes \ - -I $(top_builddir)/elementaryFunctions/includes + -I $(top_builddir)/elementaryFunctions/includes\ + -I $(top_builddir)/auxiliaryFunctions/includes testDoubleDist_SOURCES = testDoubleDist.c testDoubleDist_LDADD = $(check_LDADD) diff --git a/scilab2c/src/matrixOperations/dist/Makefile.in b/scilab2c/src/matrixOperations/dist/Makefile.in index 0a890302..a5eddb93 100644 --- a/scilab2c/src/matrixOperations/dist/Makefile.in +++ b/scilab2c/src/matrixOperations/dist/Makefile.in @@ -204,9 +204,10 @@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ libDist_la_CFLAGS = -I $(top_builddir)/type \ - -I $(top_builddir)/matrixOperations/includes \ - -I $(top_builddir)/operations/includes \ - -I $(top_builddir)/elementaryFunctions/includes + -I $(top_builddir)/matrixOperations/includes \ + -I $(top_builddir)/operations/includes \ + -I $(top_builddir)/elementaryFunctions/includes\ + -I $(top_builddir)/auxiliaryFunctions/includes instdir = $(top_builddir)/lib pkglib_LTLIBRARIES = libDist.la @@ -236,14 +237,21 @@ check_LDADD = $(top_builddir)/type/libDoubleComplex.la \ $(top_builddir)/elementaryFunctions/cosh/libCosh.la \ $(top_builddir)/auxiliaryFunctions/pythag/libPythag.la \ $(top_builddir)/auxiliaryFunctions/abs/libAbs.la \ + $(top_builddir)/auxiliaryFunctions/conj/libConj.la \ $(top_builddir)/operations/multiplication/libMultiplication.la \ $(top_builddir)/operations/addition/libAddition.la \ + $(top_builddir)/operations/subtraction/libSubtraction.la \ + $(top_builddir)/matrixOperations/multiplication/libMatrixMultiplication.la \ + $(top_builddir)/matrixOperations/transpose/libMatrixTranspose.la \ + $(top_builddir)/matrixOperations/spec/libSpec.la \ + $(top_builddir)/matrixOperations/zeros/libMatrixZeros.la \ libDist.la check_INCLUDES = -I $(top_builddir)/type \ -I $(top_builddir)/matrixOperations/includes \ -I $(top_builddir)/operations/includes \ - -I $(top_builddir)/elementaryFunctions/includes + -I $(top_builddir)/elementaryFunctions/includes\ + -I $(top_builddir)/auxiliaryFunctions/includes testDoubleDist_SOURCES = testDoubleDist.c testDoubleDist_LDADD = $(check_LDADD) diff --git a/scilab2c/src/matrixOperations/dist/cdista.c b/scilab2c/src/matrixOperations/dist/cdista.c index 2cc3a840..72b66942 100644 --- a/scilab2c/src/matrixOperations/dist/cdista.c +++ b/scilab2c/src/matrixOperations/dist/cdista.c @@ -11,16 +11,44 @@ */ #include "dist.h" -#include "pow.h" +#include "matrixTranspose.h" +#include "matrixMultiplication.h" +#include "spec.h" #include "sqrt.h" +#include "conj.h" +#include "subtraction.h" +#include "stdio.h" float cdista(floatComplex* in1,floatComplex* in2, int lines, int columns){ - int i; - float accu=0; - for (i=0;i<lines*columns;i++){ - accu+=spows(creals(in1[i])-creals(in2[i]),2); - accu+=spows(cimags(in1[i])-cimags(in2[i]),2); + int i=0; + float out = 0; + floatComplex *a, *at, *mul; + floatComplex *eigenvalues; + + + /* FIXME : malloc here*/ + a=malloc((uint)(lines*columns)*sizeof(floatComplex)); + at=malloc((uint)(lines*columns)*sizeof(floatComplex)); + mul=malloc((uint)(lines*lines)*sizeof(floatComplex)); + eigenvalues=malloc((uint)(lines)*sizeof(floatComplex)); + + for (i=0;i<lines*columns;i++) a[i]=cdiffs(in1[i],in2[i]); + ctransposea(a,lines, columns,at); + cconja(at,lines*columns,at); + cmulma(a,lines,columns,at,columns,lines,mul); + cspeca(mul,lines,eigenvalues); + csqrta(eigenvalues,lines,eigenvalues); + + /* Research of the higher value of eigenvalues*/ + for (i=0;i<lines;i++){ + if (creals(eigenvalues[i])>out) out = creals(eigenvalues[i]); } + + + free(a); + free(at); + free(mul); + free(eigenvalues); - return ssqrts(accu); + return out; } diff --git a/scilab2c/src/matrixOperations/dist/ddista.c b/scilab2c/src/matrixOperations/dist/ddista.c index 9c715669..cd06310a 100644 --- a/scilab2c/src/matrixOperations/dist/ddista.c +++ b/scilab2c/src/matrixOperations/dist/ddista.c @@ -11,15 +11,40 @@ */ #include "dist.h" -#include "pow.h" +#include "matrixTranspose.h" +#include "matrixMultiplication.h" +#include "spec.h" #include "sqrt.h" + double ddista(double* in1,double* in2, int lines, int columns){ - int i; - double accu=0; - for (i=0;i<lines*columns;i++){ - accu+=dpows(in1[i]-in2[i],2); + int i=0; + double out=0; + double *a, *at, *mul; + doubleComplex *eigenvalues; + + + /* FIXME : malloc here*/ + a=malloc((uint)(lines*columns)*sizeof(double)); + at=malloc((uint)(lines*columns)*sizeof(double)); + mul=malloc((uint)(lines*lines)*sizeof(double)); + eigenvalues=malloc((uint)(lines)*sizeof(doubleComplex)); + + for (i=0;i<lines*columns;i++) a[i]=in1[i]-in2[i]; + dtransposea(a,lines, columns,at); + dmulma(a,lines,columns,at,columns,lines,mul); + dspeca(mul,lines,eigenvalues); + zsqrta(eigenvalues,lines,eigenvalues); + + /* Research of the higher value of eigenvalues*/ + for (i=0;i<lines;i++){ + if (zreals(eigenvalues[i])>out) out = zreals(eigenvalues[i]); } - return dsqrts(accu); + free(a); + free(at); + free(mul); + free(eigenvalues); + + return out; } diff --git a/scilab2c/src/matrixOperations/dist/ddists.c b/scilab2c/src/matrixOperations/dist/ddists.c index b7b776d8..2bbd6feb 100644 --- a/scilab2c/src/matrixOperations/dist/ddists.c +++ b/scilab2c/src/matrixOperations/dist/ddists.c @@ -11,11 +11,10 @@ */ #include "dist.h" -#include "pow.h" -#include "sqrt.h" +#include "abs.h" double ddists(double in1, double in2){ - return dsqrts(dpows(in1-in2,2)); + return dabss(in2-in1); } diff --git a/scilab2c/src/matrixOperations/dist/sdista.c b/scilab2c/src/matrixOperations/dist/sdista.c index 8942a6de..5199ead7 100644 --- a/scilab2c/src/matrixOperations/dist/sdista.c +++ b/scilab2c/src/matrixOperations/dist/sdista.c @@ -11,17 +11,40 @@ */ #include "dist.h" -#include "pow.h" +#include "matrixTranspose.h" +#include "matrixMultiplication.h" +#include "spec.h" #include "sqrt.h" + float sdista(float* in1,float* in2, int lines, int columns){ - int i; - float accu=0; - for (i=0;i<lines*columns;i++){ - accu+=spows(in1[i]-in2[i],2); + int i=0; + float out=0; + float *a, *at, *mul; + floatComplex *eigenvalues; + + + /* FIXME : malloc here*/ + a=malloc((uint)(lines*columns)*sizeof(float)); + at=malloc((uint)(lines*columns)*sizeof(float)); + mul=malloc((uint)(lines*lines)*sizeof(float)); + eigenvalues=malloc((uint)(lines)*sizeof(floatComplex)); + + for (i=0;i<lines*columns;i++) a[i]=in1[i]-in2[i]; + stransposea(a,lines, columns,at); + smulma(a,lines,columns,at,columns,lines,mul); + sspeca(mul,lines,eigenvalues); + csqrta(eigenvalues,lines,eigenvalues); + + /* Research of the higher value of eigenvalues*/ + for (i=0;i<lines;i++){ + if (creals(eigenvalues[i])>out) out = creals(eigenvalues[i]); } - return ssqrts(accu); + free(a); + free(at); + free(mul); + free(eigenvalues); + + return out; } - - diff --git a/scilab2c/src/matrixOperations/dist/sdists.c b/scilab2c/src/matrixOperations/dist/sdists.c index 0d62173b..beb3895a 100644 --- a/scilab2c/src/matrixOperations/dist/sdists.c +++ b/scilab2c/src/matrixOperations/dist/sdists.c @@ -11,11 +11,10 @@ */ #include "dist.h" -#include "pow.h" -#include "sqrt.h" +#include "abs.h" float sdists(float in1, float in2){ - return ssqrts(spows(in1-in2,2)); + return sabss(in2-in1); } diff --git a/scilab2c/src/matrixOperations/dist/testDoubleDist.c b/scilab2c/src/matrixOperations/dist/testDoubleDist.c index ebb528d2..06f633b7 100644 --- a/scilab2c/src/matrixOperations/dist/testDoubleDist.c +++ b/scilab2c/src/matrixOperations/dist/testDoubleDist.c @@ -17,20 +17,94 @@ #include "dist.h" static void ddistsTest(void){ + double in1=2,in2=1; + printf("%f\n",ddists(in1,in2)); + } static void ddistaTest(void){ + double in1[4]={3,4,5,6}; + double in2[4]={0}; + double out; + double result=9.271109059321277712229; + + double in3[6]={1,4,2,5,3,6}; + double in4[6]={0}; + double result2=9.5080320006957226297573; + + out=ddista(in1,in2,2,2); + printf("%f\n",out); + assert(fabs(out-result) / fabs(out) <1e-16); + + + out=ddista(in3,in4,2,3); + printf("%f\n",out); + assert(fabs(out-result2) / fabs(out) <1e-15); } static void zdistsTest(void){ + doubleComplex in1,in2; + double out; + in1=DoubleComplex(3,4); + in2=DoubleComplex(0,0); + + out=zdists(in1,in2); + printf("%f\n",out); + assert(fabs(out-5) / fabs(out) <1e-16); + } static void zdistaTest(void){ + double in1[4]={3,4,5,6}; + double in2[4]={0}; + double out; + double result=9.271109059321277712229; + + double in3[6]={1,4,2,5,3,6}; + double in4[6]={0}; + double result2=9.5080320006957226297573; + + + double in5[15]={1.9379387702792882919312, 6.797837591730058193207, 5.88365742936730384827, 9.331753817386925220490 , 5.509122880175709724426 , + 8.0405469564720988273621 , 1.074489727616310119629 , 7.4039250845089554786682 , 5.6103316973894834518433 , 7.6611549546942114830017 , + 7.8306589089334011077881 , 1.4388314681127667427063 , 1.6471924725919961929321 , 3.1774142337962985038757 , 5.0265956297516822814941}; + double in6[15]={6.9204960623756051064 , 7.0065794046968221664429 , 8.8706119870766997337341 , 6.9797694869339466094971 , 6.7989911558106541633606 , + 3.6159398127347230911255 , 2.6739976881071925163269 , 0.7736870646476745605469 , 1.494100340642035007477 , 3.2018390577286481857300 , + 2.0260545751079916954041 , 4.4988587312400341033936 , 7.7075743721798062324524 , 2.4352242145687341690063 , 2.1261148853227496147156}; + double in7[15]={0}; + double result3=28.509738138317576527925; + doubleComplex *in1Cpx, *in2Cpx, *in3Cpx, *in4Cpx,*in5Cpx,*in6Cpx; + + in1Cpx=DoubleComplexMatrix(in1,in2,4); + in2Cpx=DoubleComplexMatrix(in2,in2,4); + in3Cpx=DoubleComplexMatrix(in3,in4,6); + in4Cpx=DoubleComplexMatrix(in4,in4,6); + in5Cpx=DoubleComplexMatrix(in5,in6,15); + in6Cpx=DoubleComplexMatrix(in7,in7,15); + + + + out=zdista(in1Cpx,in2Cpx,2,2); + printf("%f\n",out); + assert(fabs(out-result) / fabs(out) <1e-16); + + + out=zdista(in3Cpx,in4Cpx,2,3); + printf("%f\n",out); + assert(fabs(out-result2) / fabs(out) <1e-15); + + out=zdista(in5Cpx,in6Cpx,5,3); + printf("%f\n",out); + assert(fabs(out-result3) / fabs(out) <1e-15); + } static int distTest(void){ + printf("\n>>> Double Dist Tests <<<\n"); + printf(">>> double <<<\n"); ddistsTest(); ddistaTest(); + printf(">>> doubleComplex <<<\n"); zdistsTest(); zdistaTest(); return 0; diff --git a/scilab2c/src/matrixOperations/dist/testFloatDist.c b/scilab2c/src/matrixOperations/dist/testFloatDist.c index 37416b8c..895767ec 100644 --- a/scilab2c/src/matrixOperations/dist/testFloatDist.c +++ b/scilab2c/src/matrixOperations/dist/testFloatDist.c @@ -17,20 +17,94 @@ #include "dist.h" static void sdistsTest(void){ + float in1=2,in2=1; + printf("%f\n",sdists(in1,in2)); + } static void sdistaTest(void){ + float in1[4]={3,4,5,6}; + float in2[4]={0}; + float out; + float result=9.271109059321277712229f; + + float in3[6]={1,4,2,5,3,6}; + float in4[6]={0}; + float result2=9.5080320006957226297573f; + + out=sdista(in1,in2,2,2); + printf("%f\n",out); + assert(fabs(out-result) / fabs(out) <1e-16); + + + out=sdista(in3,in4,2,3); + printf("%f\n",out); + assert(fabs(out-result2) / fabs(out) <1e-15); } static void cdistsTest(void){ + floatComplex in1,in2; + float out; + in1=FloatComplex(3,4); + in2=FloatComplex(0,0); + + out=cdists(in1,in2); + printf("%f\n",out); + assert(fabs(out-5) / fabs(out) <1e-16); + } static void cdistaTest(void){ + float in1[4]={3,4,5,6}; + float in2[4]={0}; + float out; + float result=9.271109059321277712229f; + + float in3[6]={1,4,2,5,3,6}; + float in4[6]={0}; + float result2=9.5080320006957226297573f; + + + float in5[15]={1.9379387702792882919312f, 6.797837591730058193207f, 5.88365742936730384827f, 9.331753817386925220490f , 5.509122880175709724426f , + 8.0405469564720988273621f , 1.074489727616310119629f , 7.4039250845089554786682f , 5.6103316973894834518433f , 7.6611549546942114830017f , + 7.8306589089334011077881f , 1.4388314681127667427063f , 1.6471924725919961929321f , 3.1774142337962985038757f , 5.0265956297516822814941f}; + float in6[15]={6.9204960623756051064f , 7.0065794046968221664429f , 8.8706119870766997337341f , 6.9797694869339466094971f , 6.7989911558106541633606f , + 3.6159398127347230911255f , 2.6739976881071925163269f , 0.7736870646476745605469f , 1.494100340642035007477f , 3.2018390577286481857300f , + 2.0260545751079916954041f , 4.4988587312400341033936f , 7.7075743721798062324524f , 2.4352242145687341690063f , 2.1261148853227496147156f}; + float in7[15]={0}; + float result3=28.509738138317576527925f; + floatComplex *in1Cpx, *in2Cpx, *in3Cpx, *in4Cpx,*in5Cpx,*in6Cpx; + + in1Cpx=FloatComplexMatrix(in1,in2,4); + in2Cpx=FloatComplexMatrix(in2,in2,4); + in3Cpx=FloatComplexMatrix(in3,in4,6); + in4Cpx=FloatComplexMatrix(in4,in4,6); + in5Cpx=FloatComplexMatrix(in5,in6,15); + in6Cpx=FloatComplexMatrix(in7,in7,15); + + + + out=cdista(in1Cpx,in2Cpx,2,2); + printf("%f\n",out); + assert(fabs(out-result) / fabs(out) <1e-16); + + + out=cdista(in3Cpx,in4Cpx,2,3); + printf("%f\n",out); + assert(fabs(out-result2) / fabs(out) <1e-15); + + out=cdista(in5Cpx,in6Cpx,5,3); + printf("%f\n",out); + assert(fabs(out-result3) / fabs(out) <1e-15); + } static int distTest(void){ + printf("\n>>> Float Dist Tests <<<\n"); + printf(">>> float <<<\n"); sdistsTest(); sdistaTest(); + printf(">>> floatComplex <<<\n"); cdistsTest(); cdistaTest(); return 0; diff --git a/scilab2c/src/matrixOperations/dist/zdista.c b/scilab2c/src/matrixOperations/dist/zdista.c index 4e62587b..7cd215fd 100644 --- a/scilab2c/src/matrixOperations/dist/zdista.c +++ b/scilab2c/src/matrixOperations/dist/zdista.c @@ -10,18 +10,45 @@ * */ - #include "dist.h" -#include "pow.h" +#include "matrixTranspose.h" +#include "matrixMultiplication.h" +#include "spec.h" #include "sqrt.h" +#include "conj.h" +#include "subtraction.h" +#include "stdio.h" double zdista(doubleComplex* in1,doubleComplex* in2, int lines, int columns){ - int i; - double accu=0; - for (i=0;i<lines*columns;i++){ - accu+=dpows(zreals(in1[i])-zreals(in2[i]),2); - accu+=dpows(zimags(in1[i])-zimags(in2[i]),2); + int i=0; + double out = 0; + doubleComplex *a, *at, *mul; + doubleComplex *eigenvalues; + + + /* FIXME : malloc here*/ + a=malloc((uint)(lines*columns)*sizeof(doubleComplex)); + at=malloc((uint)(lines*columns)*sizeof(doubleComplex)); + mul=malloc((uint)(lines*lines)*sizeof(doubleComplex)); + eigenvalues=malloc((uint)(lines)*sizeof(doubleComplex)); + + for (i=0;i<lines*columns;i++) a[i]=zdiffs(in1[i],in2[i]); + ztransposea(a,lines, columns,at); + zconja(at,lines*columns,at); + zmulma(a,lines,columns,at,columns,lines,mul); + zspeca(mul,lines,eigenvalues); + zsqrta(eigenvalues,lines,eigenvalues); + + /* Research of the higher value of eigenvalues*/ + for (i=0;i<lines;i++){ + if (zreals(eigenvalues[i])>out) out = zreals(eigenvalues[i]); } + + + free(a); + free(at); + free(mul); + free(eigenvalues); - return dsqrts(accu); + return out; } |