diff options
author | torset | 2009-02-20 10:20:08 +0000 |
---|---|---|
committer | torset | 2009-02-20 10:20:08 +0000 |
commit | 147aefbcdc55ca9b33dcefcaa3f3ef86010b582b (patch) | |
tree | b191e5b7b81c37a6e45534c18f8d6aa48a1a9a20 /src/matrixOperations/powm/spowma.c | |
parent | 6ddc586d9c2a7e18a7eb7a204009553dc0628063 (diff) | |
download | scilab2c-147aefbcdc55ca9b33dcefcaa3f3ef86010b582b.tar.gz scilab2c-147aefbcdc55ca9b33dcefcaa3f3ef86010b582b.tar.bz2 scilab2c-147aefbcdc55ca9b33dcefcaa3f3ef86010b582b.zip |
change prototypes of matrixPow : if real on input, return real, not complex
Diffstat (limited to 'src/matrixOperations/powm/spowma.c')
-rw-r--r-- | src/matrixOperations/powm/spowma.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/matrixOperations/powm/spowma.c b/src/matrixOperations/powm/spowma.c index 634cd449..eb48bda2 100644 --- a/src/matrixOperations/powm/spowma.c +++ b/src/matrixOperations/powm/spowma.c @@ -15,18 +15,21 @@ #include "pow.h" #include "matrixTranspose.h" #include "conj.h" +#include "zeros.h" #include "matrixInversion.h" #include "matrixMultiplication.h" -void spowma(float* in, int rows, float power, floatComplex* out){ +void spowma(float* in, int rows, float power, float* out){ int i=0, j=0; int symmetric=0; floatComplex *eigenvalues,*eigenvectors,*tmp; + float* ZEROS; /* Data initialization */ eigenvalues = malloc((uint)(rows*rows)*sizeof(floatComplex)); eigenvectors = malloc((uint)(rows*rows)*sizeof(floatComplex)); tmp = malloc((uint)(rows*rows)*sizeof(floatComplex)); + ZEROS = malloc((uint)(rows*rows)*sizeof(float)); /* symmetric test*/ for(i=0;i<rows;i++) { @@ -38,9 +41,11 @@ void spowma(float* in, int rows, float power, floatComplex* out){ if ((i==rows)&&(j==rows)) symmetric=1; + szerosa(ZEROS,rows,rows); + tmp = FloatComplexMatrix(in,ZEROS,rows*rows); /* find eigenvalues and eigenvectors */ - sspec2a(in, rows, eigenvalues,eigenvectors); + cspec2a(tmp, rows, eigenvalues,eigenvectors); /* make operation on eigenvalues and eigenvectors */ for (i=0;i<rows;i++) @@ -54,7 +59,10 @@ void spowma(float* in, int rows, float power, floatComplex* out){ } else cinverma(eigenvectors, eigenvalues, rows); - cmulma(tmp, rows, rows, eigenvalues, rows, rows, out); + cmulma(tmp, rows, rows, eigenvalues, rows, rows, eigenvectors); + + for (i=0;i<rows*rows;i++) out[i]=creals(eigenvectors[i]); + free(eigenvalues); free(eigenvectors); |