summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/matrixOperations/division/Makefile.am4
-rw-r--r--src/matrixOperations/division/Makefile.in25
-rw-r--r--src/matrixOperations/division/sldiva.c65
-rw-r--r--src/matrixOperations/division/srdiva.c134
-rw-r--r--src/matrixOperations/division/testMatrixLDivision.c53
-rw-r--r--src/matrixOperations/division/testMatrixRDivision.c49
-rw-r--r--src/matrixOperations/division/zrdiva.c16
-rw-r--r--src/matrixOperations/includes/matrixDivision.h11
8 files changed, 213 insertions, 144 deletions
diff --git a/src/matrixOperations/division/Makefile.am b/src/matrixOperations/division/Makefile.am
index 37eb861f..49562596 100644
--- a/src/matrixOperations/division/Makefile.am
+++ b/src/matrixOperations/division/Makefile.am
@@ -22,9 +22,11 @@ HEAD = ../includes/matrixDivision.h
libMatrixDivision_la_SOURCES = $(HEAD) \
srdiva.c \
+ sldiva.c \
drdiva.c \
dldiva.c \
- zrdiva.c
+ zrdiva.c \
+ zldiva.c
check_PROGRAMS = testMatrixRDivision \
testMatrixLDivision
diff --git a/src/matrixOperations/division/Makefile.in b/src/matrixOperations/division/Makefile.in
index eb093078..0184c910 100644
--- a/src/matrixOperations/division/Makefile.in
+++ b/src/matrixOperations/division/Makefile.in
@@ -56,8 +56,9 @@ LTLIBRARIES = $(pkglib_LTLIBRARIES)
libMatrixDivision_la_LIBADD =
am__objects_1 =
am_libMatrixDivision_la_OBJECTS = $(am__objects_1) \
- libMatrixDivision_la-srdiva.lo libMatrixDivision_la-drdiva.lo \
- libMatrixDivision_la-dldiva.lo libMatrixDivision_la-zrdiva.lo
+ libMatrixDivision_la-srdiva.lo libMatrixDivision_la-sldiva.lo \
+ libMatrixDivision_la-drdiva.lo libMatrixDivision_la-dldiva.lo \
+ libMatrixDivision_la-zrdiva.lo libMatrixDivision_la-zldiva.lo
libMatrixDivision_la_OBJECTS = $(am_libMatrixDivision_la_OBJECTS)
libMatrixDivision_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) \
@@ -217,9 +218,11 @@ pkglib_LTLIBRARIES = libMatrixDivision.la
HEAD = ../includes/matrixDivision.h
libMatrixDivision_la_SOURCES = $(HEAD) \
srdiva.c \
+ sldiva.c \
drdiva.c \
dldiva.c \
- zrdiva.c
+ zrdiva.c \
+ zldiva.c
check_LDADD = $(top_builddir)/type/libDoubleComplex.la \
$(top_builddir)/type/libFloatComplex.la \
@@ -321,7 +324,9 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libMatrixDivision_la-dldiva.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libMatrixDivision_la-drdiva.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libMatrixDivision_la-sldiva.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libMatrixDivision_la-srdiva.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libMatrixDivision_la-zldiva.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libMatrixDivision_la-zrdiva.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testMatrixLDivision-testMatrixLDivision.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testMatrixRDivision-testMatrixRDivision.Po@am__quote@
@@ -354,6 +359,13 @@ libMatrixDivision_la-srdiva.lo: srdiva.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixDivision_la_CFLAGS) $(CFLAGS) -c -o libMatrixDivision_la-srdiva.lo `test -f 'srdiva.c' || echo '$(srcdir)/'`srdiva.c
+libMatrixDivision_la-sldiva.lo: sldiva.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixDivision_la_CFLAGS) $(CFLAGS) -MT libMatrixDivision_la-sldiva.lo -MD -MP -MF $(DEPDIR)/libMatrixDivision_la-sldiva.Tpo -c -o libMatrixDivision_la-sldiva.lo `test -f 'sldiva.c' || echo '$(srcdir)/'`sldiva.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libMatrixDivision_la-sldiva.Tpo $(DEPDIR)/libMatrixDivision_la-sldiva.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sldiva.c' object='libMatrixDivision_la-sldiva.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixDivision_la_CFLAGS) $(CFLAGS) -c -o libMatrixDivision_la-sldiva.lo `test -f 'sldiva.c' || echo '$(srcdir)/'`sldiva.c
+
libMatrixDivision_la-drdiva.lo: drdiva.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixDivision_la_CFLAGS) $(CFLAGS) -MT libMatrixDivision_la-drdiva.lo -MD -MP -MF $(DEPDIR)/libMatrixDivision_la-drdiva.Tpo -c -o libMatrixDivision_la-drdiva.lo `test -f 'drdiva.c' || echo '$(srcdir)/'`drdiva.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libMatrixDivision_la-drdiva.Tpo $(DEPDIR)/libMatrixDivision_la-drdiva.Plo
@@ -375,6 +387,13 @@ libMatrixDivision_la-zrdiva.lo: zrdiva.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixDivision_la_CFLAGS) $(CFLAGS) -c -o libMatrixDivision_la-zrdiva.lo `test -f 'zrdiva.c' || echo '$(srcdir)/'`zrdiva.c
+libMatrixDivision_la-zldiva.lo: zldiva.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixDivision_la_CFLAGS) $(CFLAGS) -MT libMatrixDivision_la-zldiva.lo -MD -MP -MF $(DEPDIR)/libMatrixDivision_la-zldiva.Tpo -c -o libMatrixDivision_la-zldiva.lo `test -f 'zldiva.c' || echo '$(srcdir)/'`zldiva.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libMatrixDivision_la-zldiva.Tpo $(DEPDIR)/libMatrixDivision_la-zldiva.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='zldiva.c' object='libMatrixDivision_la-zldiva.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixDivision_la_CFLAGS) $(CFLAGS) -c -o libMatrixDivision_la-zldiva.lo `test -f 'zldiva.c' || echo '$(srcdir)/'`zldiva.c
+
testMatrixLDivision-testMatrixLDivision.o: testMatrixLDivision.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testMatrixLDivision_CFLAGS) $(CFLAGS) -MT testMatrixLDivision-testMatrixLDivision.o -MD -MP -MF $(DEPDIR)/testMatrixLDivision-testMatrixLDivision.Tpo -c -o testMatrixLDivision-testMatrixLDivision.o `test -f 'testMatrixLDivision.c' || echo '$(srcdir)/'`testMatrixLDivision.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/testMatrixLDivision-testMatrixLDivision.Tpo $(DEPDIR)/testMatrixLDivision-testMatrixLDivision.Po
diff --git a/src/matrixOperations/division/sldiva.c b/src/matrixOperations/division/sldiva.c
new file mode 100644
index 00000000..b75eb44f
--- /dev/null
+++ b/src/matrixOperations/division/sldiva.c
@@ -0,0 +1,65 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2008-2008 - INRIA - Allan SIMON
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+
+/**** WARNING NOT WORK AT ALL FOR THE MOMENT ***/
+/**** Because of problem of conversion float-> double ****/
+#include "matrixDivision.h"
+#include "lapack.h"
+#include <string.h>
+#include <stdio.h>
+void sldiva ( float* in1, int lines1, int columns1 ,
+ float* in2, int lines2, int columns2 ,
+ float* out ){
+
+ int i = 0 ;
+ /* these 3 variable are created to permit to use the value in the fortran functions
+ because they need double matrix as arguments and we can't cast directly the pointers
+ without having problems , i know that's ugly */
+ double *dblin1 = NULL;
+ double *dblin2 = NULL;
+ double *dblout = NULL;
+
+
+
+ /* Array allocations*/
+ dblin1 = (double*)malloc(sizeof(double) * (unsigned int)columns1 * (unsigned int)lines1);
+ dblin2 = (double*)malloc(sizeof(double) * (unsigned int)columns2 * (unsigned int)lines2);
+ dblout = (double*)malloc(sizeof(double) * (unsigned int)lines1 * (unsigned int)lines2);
+
+
+
+ /*copy and cast all the float value into double value */
+ for ( i = 0 ; i < lines1 * columns1 ; i ++ )
+ {
+ dblin1[i] = (double) in1[i] ;
+ }
+
+ for ( i = 0 ; i < lines2 * columns2 ; i ++ )
+ {
+ dblin2[i] = (double) in2[i] ;
+ }
+
+ dldiva( dblin1 , lines1 , columns1 , dblin2 , lines2 , columns2 , dblout );
+
+
+ for ( i = 0 ; i < Min(lines2,columns2) * lines1 ; i++ )
+ {
+ out[i] = (float) dblout[i] ;
+
+ }
+
+ free ( dblin1);
+ free ( dblin2);
+ free ( dblout);
+
+}
diff --git a/src/matrixOperations/division/srdiva.c b/src/matrixOperations/division/srdiva.c
index f6ae4a9d..343ba9c9 100644
--- a/src/matrixOperations/division/srdiva.c
+++ b/src/matrixOperations/division/srdiva.c
@@ -20,19 +20,8 @@
void srdiva ( float* in1, int lines1, int columns1 ,
float* in2, int lines2, int columns2 ,
float* out ){
- char cNorm = 0;
- int iExit = 0;
- int i = 0 ,j = 0 ,ij = 0 ,ji = 0;
- /*temporary variables*/
- int iWork = 0;
- int iInfo = 0;
- int iMax = 0;
- double dblRcond = 0;
-
- double dblEps = 0;
- double dblAnorm = 0;
-
+ int i = 0 ;
/* these 3 variable are created to permit to use the value in the fortran functions
because they need double matrix as arguments and we can't cast directly the pointers
without having problems , i know that's ugly */
@@ -40,120 +29,37 @@ void srdiva ( float* in1, int lines1, int columns1 ,
double *dblin2 = NULL;
double *dblout = NULL;
- double *pAf = NULL;
- double *pAt = NULL;
- double *pBt = NULL;
- double *pDwork = NULL;
-
- int *pRank = NULL;
- int *pIpiv = NULL;
- int *pJpvt = NULL;
- int *pIwork = NULL;
-
- iWork = Max(4 * columns2, Max(Min(lines2, columns2) + 3 * lines2 + 1, 2 * Min(lines2, columns2) + lines1));
-
-
/* Array allocations*/
- dblin1 = (double*)malloc(sizeof(double) * (unsigned int)columns2 * (unsigned int)lines2);
- dblin2 = (double*)malloc(sizeof(double) * (unsigned int)columns1 * (unsigned int)lines1);
- dblout = (double*)malloc(sizeof(double) * (unsigned int)Max(lines2,columns2) * (unsigned int)lines1);
-
- pAf = (double*)malloc(sizeof(double) * (unsigned int)columns2 * (unsigned int)lines2);
- pAt = (double*)malloc(sizeof(double) * (unsigned int)columns2 *(unsigned int) lines2);
- pBt = (double*)malloc(sizeof(double) * (unsigned int)Max(lines2,columns2) * (unsigned int)lines1);
+ dblin1 = (double*)malloc(sizeof(double) * (unsigned int)columns1 * (unsigned int)lines1);
+ dblin2 = (double*)malloc(sizeof(double) * (unsigned int)columns2 * (unsigned int)lines2);
+ dblout = (double*)malloc(sizeof(double) * (unsigned int)lines1 * (unsigned int)lines2);
- pRank = (int*)malloc(sizeof(int));
- pIpiv = (int*)malloc(sizeof(int) * (unsigned int)columns2);
- pJpvt = (int*)malloc(sizeof(int) * (unsigned int)lines2);
- pIwork = (int*)malloc(sizeof(int) * (unsigned int)columns2);
- cNorm = '1';
- pDwork = (double*)malloc(sizeof(double) * (unsigned int)iWork);
- dblEps = getRelativeMachinePrecision() ;
- dblAnorm = dlange_(&cNorm, &lines2, &columns1, dblin2, &lines2, pDwork);
-
/*copy and cast all the float value into double value */
- for ( i = 0 ; i < lines2 * columns2 ; i ++ )
- {
-
- dblin1[i] = (double) in1[i] ;
- printf ( "dbl in1 = %e \n" , dblin1 [i] );
- }
-
for ( i = 0 ; i < lines1 * columns1 ; i ++ )
- dblin2[i] = (double) in2[i] ;
-
-
- /*tranpose A and B*/
-
- dtransposea(dblin1, lines2, columns2, pAt);
- dtransposea(dblin2, lines1, columns2, pBt);
-
- if(lines2 == columns2)
- {
- cNorm = 'F';
- dlacpy_(&cNorm, &columns2, &columns2, pAt, &columns2, pAf, &columns2);
- dgetrf_(&columns2, &columns2, pAf, &columns2, pIpiv, &iInfo);
- if(iInfo == 0)
- {
- cNorm = '1';
- dgecon_(&cNorm, &columns2, pAf, &columns2, &dblAnorm, &dblRcond, pDwork, pIwork, &iInfo);
- if(dblRcond > sqrt(dblEps))
- {
- cNorm = 'N';
- dgetrs_(&cNorm, &columns2, &lines1, pAf, &columns2, pIpiv, pBt, &columns2, &iInfo);
- dtransposea(pBt, columns2, lines1, dblout);
- iExit = 1;
- }
+ {
+ dblin1[i] = (double) in1[i] ;
}
- }
-
- if(iExit == 0)
- {
- dblRcond = sqrt(dblEps);
- cNorm = 'F';
- iMax = Max(lines2, columns2);
- memset(pJpvt, 0x00, (unsigned int)sizeof(int) * (unsigned int)lines2);
- dgelsy_(&columns2, &lines2, &lines1, pAt, &columns2, pBt, &iMax,
- pJpvt, &dblRcond, &pRank[0], pDwork, &iWork, &iInfo);
-
- if(iInfo == 0)
- {
-
+ for ( i = 0 ; i < lines2 * columns2 ; i ++ )
+ {
+ dblin2[i] = (double) in2[i] ;
+ }
+
+ drdiva( dblin1 , lines1 , columns1 , dblin2 , lines2 , columns2 , dblout );
- /* TransposeRealMatrix(pBt, lines1, lines2, out, Max(lines1,columns1), lines2);*/
+
+ for ( i = 0 ; i < Min(lines2,columns2) * lines1 ; i++ )
+ {
+ out[i] = (float) dblout[i] ;
- /*Mega caca de la mort qui tue des ours a mains nues
- mais je ne sais pas comment le rendre "beau" :(*/
- {
-
- for(j = 0 ; j < lines2 ; j++)
- {
- for(i = 0 ; i < lines1 ; i++)
- {
- ij = i + j * lines1;
- ji = j + i * Max(lines2, columns2);
- dblout[ij] = pBt[ji];
- }
- }
- }
- }
- }
+ }
- for ( i = 0 ; i < Max(lines2,columns2) * lines1 ; i++ )
- out[i] = (float) dblout[i] ;
-
- free(pAf);
- free(pAt);
- free(pBt);
- free(pRank);
- free(pIpiv);
- free(pJpvt);
- free(pIwork);
- free(pDwork);
+ free ( dblin1);
+ free ( dblin2);
+ free ( dblout);
}
diff --git a/src/matrixOperations/division/testMatrixLDivision.c b/src/matrixOperations/division/testMatrixLDivision.c
index 60c5b021..82a61dc1 100644
--- a/src/matrixOperations/division/testMatrixLDivision.c
+++ b/src/matrixOperations/division/testMatrixLDivision.c
@@ -20,6 +20,28 @@
#define COLUMNS1 2
#define COLUMNS2 2
+static void sldivaTest ( void ){
+ int i = 0;
+
+ float in1[] = { 4.0f , 3.0f , 8.0f , 9.0f } ;
+ float in2[] = { 1.0f , 3.0f , 2.0f , 4.0f } ;
+ float result[] = { -1.25f , 0.75f , -1.166666666666666f ,0.83333333333333333f };
+
+
+ float out [(COLUMNS2)*(LINES)] ;
+
+ sldiva( in1 , LINES , COLUMNS1 , in2 , LINES , COLUMNS2 , out ) ;
+ for ( i = 0 ; i < LINES *COLUMNS2 ; i++ )
+ {
+ printf ( "\t\t %d out : %e\tresult : %e\tassert : %e \n" , i , out[i] , result[i] , fabs ( out[i] - result[i] ) / fabs( out[i]) ) ;
+
+ assert ( fabs ( out[i] - result[i] ) / fabs( out[i]) < 1e-06 ) ;
+ }
+
+
+
+}
+
static void dldivaTest ( void )
{
@@ -258,22 +280,39 @@ static void dldivaTest ( void )
dldiva( in1 , LINES , COLUMNS1 , in2 , LINES , COLUMNS2 , out ) ;
for ( i = 0 ; i < LINES *COLUMNS2 ; i++ )
{
- printf ( "\n %d out : %e result : %e assert : %e \n" , i , out[i] , result[i] , fabs ( out[i] - result[i] ) / fabs( out[i]) ) ;
+ printf ( "\t\t %d out : %e\tresult : %e\tassert : %e \n" , i , out[i] , result[i] , fabs ( out[i] - result[i] ) / fabs( out[i]) ) ;
assert ( fabs ( out[i] - result[i] ) / fabs( out[i]) < 1e-15 ) ;
}
}
-
-
+/*
+static void zldivaTest (void )
+{
+ int i = 0 ;
+
+ doubleComplex* in1 [2*3] ;
+ doubleComplex* in2 [2] ;
+ doubleComplex* result[2] ;
+ doubleComplex* out [2] ;
+
+
+
+
+}
+*/
static int testLDiva (void) {
-
- printf("\n>>>> Left Tests\n");
- /*sdivaTest();*/
- printf("\n\t>>>> Double real Tests\n");
+ printf("\n\n\n\n*********************\n");
+ printf("***** Left Tests ****\n");
+ printf("*********************\n");
+
+ printf("\n\t>>>>Float real Tests\n");
+ sldivaTest();
+
+ printf("\n\n\n\t>>>> Double real Tests\n");
dldivaTest();
diff --git a/src/matrixOperations/division/testMatrixRDivision.c b/src/matrixOperations/division/testMatrixRDivision.c
index 659aca0e..2aebaee0 100644
--- a/src/matrixOperations/division/testMatrixRDivision.c
+++ b/src/matrixOperations/division/testMatrixRDivision.c
@@ -217,12 +217,15 @@ float out[(COLUMNS)*(LINES2)] ;*/
float in2[] = { 1.0f , 2.0f } ;
float result[] = { 1.0f , 2.2f };
float out [(COLUMNS)*(LINES2)] ;
+
+
srdiva ( in1 , LINES1 , COLUMNS , in2 , LINES2 , COLUMNS , out) ;
- printf("\n\n\t>>>>>debut assert\n");
- for ( i = 0 ; i < 4 ; i++ )
+
+ for ( i = 0 ; i < LINES2 *COLUMNS ; ++i )
{
- printf ( "\n %d out : %e result : %e\n" , i , out[i] , result[i] ) ;
+ printf ( "\t\t %d out : %e result : %e assert : %e \n" ,
+ i , out[i] , result[i] , fabs ( out[i] - result[i] ) / fabs( out[i]) ) ;
assert ( fabs ( out[i] - result[i] ) / fabs( out[i]) < 1e-6 ) ;
}
@@ -251,7 +254,7 @@ static void drdivaTest ( void )
drdiva ( in1 , LINES1 , COLUMNS , in2 , LINES2 , COLUMNS , out) ;
for ( i = 0 ; i < LINES2 *COLUMNS ; i++ )
{
- printf ( "*\t\t %d out : %e result : %e assert : %e \n" ,
+ printf ( "\t\t %d out : %e result : %e assert : %e \n" ,
i , out[i] , result[i] , fabs ( out[i] - result[i] ) / fabs( out[i]) ) ;
assert ( fabs ( out[i] - result[i] ) / fabs( out[i]) < 1e-15 ) ;
@@ -265,7 +268,7 @@ static void drdivaTest ( void )
static void zrdivaTest ( void ){
int i = 0 ;
- double tin1 [] =
+/* double tin1 [] =
{0.69949407549574971,0.25834653992205858,0.61552664963528514,0.19030105322599411,
0.46075769001618028,0.52200102340430021,0.70538004627451301,0.88748936913907528,
0.18582182424142957,0.09225247148424387,0.37796644819900393,0.93693156912922859,
@@ -358,22 +361,28 @@ static void zrdivaTest ( void ){
0.40323683962485551,-0.27978276073461661,0.45277262688908537,0.06218152458345420,
-0.2153422115217984,0.68840508909853904,0.09945644614561956,-0.17861252621808085,
-0.44037299008464365}
-;
+;*/
+
+ double tin1[] = { 1 , 3 , 2 ,4};
+ double tin2[] = { 1 , 2 };
+
doubleComplex* in1 ;
doubleComplex* in2 ;
- doubleComplex out[ZLINES2*ZLINES1] ;
- doubleComplex Result[ZLINES1*ZLINES2] ;
-
- in1 = DoubleComplexMatrix ( tin1 , tin1 , ZLINES1*ZCOLUMNS );
- in2 = DoubleComplexMatrix ( tin2 , tin2 , ZLINES2*ZCOLUMNS );
+ doubleComplex out[LINES2*LINES1] ;
+ doubleComplex Result[LINES1*LINES2] ;
+
+ in1 = DoubleComplexMatrix ( tin1 , tin1 , LINES1*COLUMNS );
+ in2 = DoubleComplexMatrix ( tin2 , tin2 , LINES2*COLUMNS );
- zrdiva ( in1 , ZLINES1 , ZCOLUMNS , in2 , ZLINES2 , ZCOLUMNS , out) ;
+ Result[0] = DoubleComplex ( 0.5 , - 0.5 );
+ Result[0] = DoubleComplex ( 0 , 0 );
+
+ zrdiva ( in1 , LINES1 , COLUMNS , in2 ,LINES2 , COLUMNS , out) ;
- for ( i = 0 ; i < ZLINES2*ZCOLUMNS ; i++ )
+ for ( i = 0 ; i < LINES2*COLUMNS ; i++ )
{
- Result[i] = DoubleComplex ( tresult[i] , 0 ) ;
-
+ printf ( "toto \n" );
assert ( fabs( zreals(out[i]) - zreals (Result[i]) ) / fabs (zreals (out[i])) < 1e-17 );
assert ( fabs( zimags(out[i]) - zimags (Result[i]) ) / fabs (zimags (out[i])) < 1e-17 ) ;
@@ -382,11 +391,17 @@ static void zrdivaTest ( void ){
static int testRDiva (void) {
- printf("\n>>>> Right Tests\n");
+ printf("\n\n\n\n**********************\n");
+ printf("***** Right Tests ****\n");
+ printf("**********************\n");
+
printf("\n\t>>>> Float real Tests\n");
sdivaTest();
- printf("\n\t>>>> Double real Tests\n");
+
+ printf("\n\n\n\n\t>>>> Double real Tests\n");
drdivaTest();
+
+
printf("\n\t>>>> Double complex Tests\n");
zrdivaTest();
return 0;
diff --git a/src/matrixOperations/division/zrdiva.c b/src/matrixOperations/division/zrdiva.c
index 7f6f5962..f3b2eac3 100644
--- a/src/matrixOperations/division/zrdiva.c
+++ b/src/matrixOperations/division/zrdiva.c
@@ -14,7 +14,7 @@
/**/
#include "matrixDivision.h"
-#include "lapack.h"
+
#include <stdio.h>
#include <string.h>
int zrdiva( doubleComplex* in1, int lines1, int columns1 ,
@@ -71,7 +71,19 @@ int zrdiva( doubleComplex* in1, int lines1, int columns1 ,
/*tranpose A and B*/
ztransposea(in2, lines2, columns2, poAt);
- ztransposea(in1, lines1, columns2, poBt);
+ {
+ int i,j,ij,ji;
+ for(j = 0 ; j < lines1 ; j++)
+ {
+ for(i = 0 ; i < columns2 ; i++)
+ {
+ ij = i + j * Max(lines2, columns2);
+ ji = j + i * lines1;
+
+ poBt[ij] = DoubleComplex (zreals ( in1[ji] ) , - zimags ( in1[ji] ) );
+ }
+ }
+ }
if(lines2 == columns2)
{
diff --git a/src/matrixOperations/includes/matrixDivision.h b/src/matrixOperations/includes/matrixDivision.h
index df31b54d..88520609 100644
--- a/src/matrixOperations/includes/matrixDivision.h
+++ b/src/matrixOperations/includes/matrixDivision.h
@@ -15,6 +15,7 @@
#include "floatComplex.h"
#include "doubleComplex.h"
+#include "lapack.h"
#include "cat.h"
#include "matrixTranspose.h"
@@ -23,6 +24,10 @@ void srdiva ( float* in1, int lines1, int columns1 ,
float* in2, int lines2, int columns2 ,
float* out );
+void sldiva ( float* in1, int lines1, int columns1 ,
+ float* in2, int lines2, int columns2 ,
+ float* out );
+
void drdiva ( double* in1, int lines1, int columns1 ,
double* in2, int lines2, int columns2 ,
@@ -36,6 +41,12 @@ void dldiva ( double* in1, int lines1, int columns1 ,
int zrdiva( doubleComplex* in1, int lines1, int columns1 ,
doubleComplex* in2, int lines2, int columns2 ,
doubleComplex* out );
+
+
+int zldiva( doubleComplex* in1, int lines1, int columns1 ,
+ doubleComplex* in2, int lines2, int columns2 ,
+ doubleComplex* out );
+
int Min(int _dblVar1, int _dblVar2);
int Max(int _dblVar1, int _dblVar2);