summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortorset2009-02-20 09:52:52 +0000
committertorset2009-02-20 09:52:52 +0000
commit6eabe2cfa5f0cb98ba8aa9a8fc895f28fd7a8bef (patch)
tree8e29a73120d93a0994409af092238e75ba4be54d
parent20e7f311b4b38448bf3ad031298582a0703d6c29 (diff)
downloadscilab2c-6eabe2cfa5f0cb98ba8aa9a8fc895f28fd7a8bef.tar.gz
scilab2c-6eabe2cfa5f0cb98ba8aa9a8fc895f28fd7a8bef.tar.bz2
scilab2c-6eabe2cfa5f0cb98ba8aa9a8fc895f28fd7a8bef.zip
change prototypes of spec : if real on input, return real, not complex
-rw-r--r--src/matrixOperations/spec/dspeca.c8
-rw-r--r--src/matrixOperations/spec/sspeca.c8
-rw-r--r--src/matrixOperations/spec/testDoubleSpec.c23
-rw-r--r--src/matrixOperations/spec/testFloatSpec.c41
4 files changed, 29 insertions, 51 deletions
diff --git a/src/matrixOperations/spec/dspeca.c b/src/matrixOperations/spec/dspeca.c
index c86f3983..6a4d2c61 100644
--- a/src/matrixOperations/spec/dspeca.c
+++ b/src/matrixOperations/spec/dspeca.c
@@ -18,7 +18,7 @@
#include "stdio.h"
-void dspeca(double* in, int rows,doubleComplex* out){
+void dspeca(double* in, int rows,double* out){
int i=0, j=0;
int symmetric=0;
int INFO=0;
@@ -52,17 +52,15 @@ void dspeca(double* in, int rows,doubleComplex* out){
/* apply lapack function according to symmetry */
- if(symmetric){
-
+ if(symmetric){
C2F(dsyev)( "N", "U", &rows, in, &rows, outReal, pdblWork, &iWorkSize, &INFO );
- dzerosa(outImag,1,rows);
}
else {
C2F(dgeev)( "N", "N", &rows, inCopy, &rows, outReal, outImag,
pdblLeftvectors, &rows, pdblRightvectors, &rows, pdblWork, &iWorkSize, &INFO );
}
- for (i=0;i<rows;i++) out[i]=DoubleComplex(outReal[i],outImag[i]);
+ for (i=0;i<rows;i++) out[i]=outReal[i];
free(inCopy);
diff --git a/src/matrixOperations/spec/sspeca.c b/src/matrixOperations/spec/sspeca.c
index 03c56ef6..55da48c4 100644
--- a/src/matrixOperations/spec/sspeca.c
+++ b/src/matrixOperations/spec/sspeca.c
@@ -15,20 +15,20 @@
-void sspeca(float* in, int rows, floatComplex* out){
+void sspeca(float* in, int rows, float* out){
/* As we use Lapack to find the eigenvalues, we must cast the float input into double
and the doubleComplex output of dspeca into floatComplex*/
int i;
double* dblin;
- doubleComplex* dblout;
+ double* dblout;
dblin=malloc((uint)(rows*rows)*sizeof(double));
- dblout=malloc((uint)rows*sizeof(doubleComplex));
+ dblout=malloc((uint)rows*sizeof(double));
for (i=0;i<rows*rows;i++) dblin[i]=(double)in[i];
dspeca(dblin,rows,dblout);
- for (i=0;i<rows;i++) out[i]=FloatComplex((float)zreals(dblout[i]),(float)zimags(dblout[i]));
+ for (i=0;i<rows;i++) out[i]=(float)dblout[i];
}
diff --git a/src/matrixOperations/spec/testDoubleSpec.c b/src/matrixOperations/spec/testDoubleSpec.c
index b7abbea9..c5422ca3 100644
--- a/src/matrixOperations/spec/testDoubleSpec.c
+++ b/src/matrixOperations/spec/testDoubleSpec.c
@@ -19,35 +19,20 @@
static void dspecaTest(void){
double in[4]={1,1,1,3};
double resultR[2]={0.5857864376269050765700,3.4142135623730949234300};
- double resultI[2]={0,0};
-
- double in2[4]={1,1,-2,3};
- double result2R[2]={1.9999999999999997779554,1.9999999999999997779554};
- double result2I[2]={0.9999999999999997779554,-0.9999999999999997779554};
- doubleComplex *out;
+
+ double *out;
int i;
- out=malloc((uint)2*sizeof(doubleComplex));
+ out=malloc((uint)2*sizeof(double));
dspeca(in,2,out);
for(i=0;i<2;i++){
- if (zreals(out[i])>1e-16) assert( fabs(zreals(out[i])-resultR[i]) / fabs(zreals(out[i])) <1e-15);
- else assert(1);
- if (zimags(out[i])>1e-16) assert( fabs(zimags(out[i])-resultI[i]) / fabs(zimags(out[i])) <1e-16);
+ if (out[i]>1e-16) assert( fabs(out[i]-resultR[i]) / fabs(out[i]) <1e-15);
else assert(1);
}
-
-
- dspeca(in2,2,out);
- for(i=0;i<2;i++){
- if (zreals(out[i])>1e-16) assert( fabs(zreals(out[i])-result2R[i]) / fabs(zreals(out[i])) <1e-16);
- else assert(1);
- if (zimags(out[i])>1e-16) assert( fabs(zimags(out[i])-result2I[i]) / fabs(zimags(out[i])) <1e-15);
- else assert(1);
- }
}
diff --git a/src/matrixOperations/spec/testFloatSpec.c b/src/matrixOperations/spec/testFloatSpec.c
index 421746ff..2cd8f45e 100644
--- a/src/matrixOperations/spec/testFloatSpec.c
+++ b/src/matrixOperations/spec/testFloatSpec.c
@@ -19,42 +19,37 @@
static void sspecaTest(void){
float in[4]={1.0f,1.0f,1.0f,3.0f};
float resultR[2]={0.5857864376269050765700f,3.4142135623730949234300f};
- float resultI[2]={0.0f,0.0f};
+
+ float in1[4]={0.0f,4.0f,1.0f,0.0f};
+ float result[2]={2.0f,-2.0f};
float in2[4]={1.0f,1.0f,-2.0f,3.0f};
- float result2R[2]={1.9999999999999997779554f,1.9999999999999997779554f};
- float result2I[2]={0.9999999999999997779554f,-0.9999999999999997779554f};
-
- floatComplex *out;
+
+ float *out;
int i;
- out=malloc((uint)2*sizeof(floatComplex));
+ out=malloc((uint)2*sizeof(float));
sspeca(in,2,out);
- for (i=0;i<2;i++) printf("%f+%f*i\n",creals(out[i]) ,cimags(out[i]));
+ for (i=0;i<2;i++) printf("%f\n",out[i]);
for(i=0;i<2;i++){
- if (creals(out[i])>1e-16) assert( fabs(creals(out[i])-resultR[i]) / fabs(creals(out[i])) <1e-16);
+ if (out[i]>1e-16) assert( fabs(out[i]-resultR[i]) / fabs(out[i]) <1e-16);
else assert(1);
- if (cimags(out[i])>1e-16) assert( fabs(cimags(out[i])-resultI[i]) / fabs(cimags(out[i])) <1e-16);
- else assert(1);
- }
-
-
-
- sspeca(in2,2,out);
-
- for (i=0;i<2;i++) printf("%f+%f*i\n",creals(out[i]) ,cimags(out[i]));
+ }
+
+ sspeca(in1,2,out);
+ for (i=0;i<2;i++) printf("%f\n",out[i]);
for(i=0;i<2;i++){
- if (creals(out[i])>1e-16) assert( fabs(creals(out[i])-result2R[i]) / fabs(creals(out[i])) <1e-16);
+ if (out[i]>1e-16) assert( fabs(out[i]-result[i]) / fabs(out[i]) <1e-16);
else assert(1);
- if (cimags(out[i])>1e-16) assert( fabs(cimags(out[i])-result2I[i]) / fabs(cimags(out[i])) <1e-16);
- else assert(1);
- }
-}
-
+ }
+
+ sspeca(in2,2,out);
+ for (i=0;i<2;i++) printf("%f\n",out[i]);
+}
static void cspecaTest(void){