summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scilab2c/src/matrixOperations/dist/Makefile.am18
-rw-r--r--scilab2c/src/matrixOperations/dist/Makefile.in16
-rw-r--r--scilab2c/src/matrixOperations/dist/cdista.c42
-rw-r--r--scilab2c/src/matrixOperations/dist/ddista.c37
-rw-r--r--scilab2c/src/matrixOperations/dist/ddists.c5
-rw-r--r--scilab2c/src/matrixOperations/dist/sdista.c39
-rw-r--r--scilab2c/src/matrixOperations/dist/sdists.c5
-rw-r--r--scilab2c/src/matrixOperations/dist/testDoubleDist.c74
-rw-r--r--scilab2c/src/matrixOperations/dist/testFloatDist.c74
-rw-r--r--scilab2c/src/matrixOperations/dist/zdista.c43
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;
}