diff options
-rw-r--r-- | src/matrixOperations/division/Makefile.am | 4 | ||||
-rw-r--r-- | src/matrixOperations/division/Makefile.in | 25 | ||||
-rw-r--r-- | src/matrixOperations/division/sldiva.c | 65 | ||||
-rw-r--r-- | src/matrixOperations/division/srdiva.c | 134 | ||||
-rw-r--r-- | src/matrixOperations/division/testMatrixLDivision.c | 53 | ||||
-rw-r--r-- | src/matrixOperations/division/testMatrixRDivision.c | 49 | ||||
-rw-r--r-- | src/matrixOperations/division/zrdiva.c | 16 | ||||
-rw-r--r-- | src/matrixOperations/includes/matrixDivision.h | 11 |
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); |