summaryrefslogtreecommitdiff
path: root/src/matrixOperations/powm/spowma.c
diff options
context:
space:
mode:
authortorset2009-02-20 10:20:08 +0000
committertorset2009-02-20 10:20:08 +0000
commit147aefbcdc55ca9b33dcefcaa3f3ef86010b582b (patch)
treeb191e5b7b81c37a6e45534c18f8d6aa48a1a9a20 /src/matrixOperations/powm/spowma.c
parent6ddc586d9c2a7e18a7eb7a204009553dc0628063 (diff)
downloadscilab2c-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.c14
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);