summaryrefslogtreecommitdiff
path: root/src/matrixOperations/chol/schola.c
diff options
context:
space:
mode:
authortorset2009-02-06 14:44:22 +0000
committertorset2009-02-06 14:44:22 +0000
commitf737d894588ca911f4316540c3c57b81c28a799c (patch)
tree4fd86a0fdff67d5125629424f27fd76285ea7c05 /src/matrixOperations/chol/schola.c
parentaa569c84c88bfcb86a4561e1a928ffc3276336a5 (diff)
downloadscilab2c-f737d894588ca911f4316540c3c57b81c28a799c.tar.gz
scilab2c-f737d894588ca911f4316540c3c57b81c28a799c.tar.bz2
scilab2c-f737d894588ca911f4316540c3c57b81c28a799c.zip
Modify without lapack part
Diffstat (limited to 'src/matrixOperations/chol/schola.c')
-rw-r--r--src/matrixOperations/chol/schola.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/matrixOperations/chol/schola.c b/src/matrixOperations/chol/schola.c
index 79c739b9..bc61ec7e 100644
--- a/src/matrixOperations/chol/schola.c
+++ b/src/matrixOperations/chol/schola.c
@@ -11,7 +11,7 @@
*/
-#ifdef WITHOUT_LAPACK
+#ifndef WITHOUT_LAPACK
#include "lapack.h"
#else
#include "sqrt.h"
@@ -26,32 +26,35 @@ void schola(float * in, int size, float *out){
param U : output upper triangular matrix
*/
-#ifdef WITHOUT_LAPACK
+#ifndef WITHOUT_LAPACK
/*We have to use a double, copy of in,
cause dpotrf works only with double, not with float*/
double* tmp;
int i=0,j=0,info=0;
- tmp=malloc((unsigned int)(size*size)*sizeof(float));
+ tmp=malloc((unsigned int)(size*size)*sizeof(double));
for (i=0;i<size*size;i++) tmp[i]=(double)in[i];
C2F(dpotrf)("U", &size, tmp, &size, &info);
for (i=0;i<size*size;i++) out[i]=(float)tmp[i];
+ free(tmp);
+
+
/*Zeros in the lower triangular part*/
for (i=0;i<size;i++){
for (j=i+1;j<size;j++){
out[j+i*size]=0;
}
}
- free(tmp);
+
#else
/* Do not use Lapack functions*/
int i=0, j=0, k=0;
float tmp=0, accu=0;
-
+ printf("passe\n");
for (i=0;i<size;i++){
accu=0;
for (j=0;j<i;j++){
@@ -64,6 +67,13 @@ void schola(float * in, int size, float *out){
}
out[i*size+i]=ssqrts(in[i*size+i]-accu);
}
+
+ /*Zeros in the lower triangular part*/
+ for (i=0;i<size;i++){
+ for (j=i+1;j<size;j++){
+ out[j+i*size]=0;
+ }
+ }
#endif