summaryrefslogtreecommitdiff
path: root/2.3-1/src/c/linearAlgebra
diff options
context:
space:
mode:
Diffstat (limited to '2.3-1/src/c/linearAlgebra')
-rw-r--r--2.3-1/src/c/linearAlgebra/includes/rank.h29
-rw-r--r--2.3-1/src/c/linearAlgebra/interfaces/int_rank.h28
-rw-r--r--2.3-1/src/c/linearAlgebra/rank/dranka.c34
-rw-r--r--2.3-1/src/c/linearAlgebra/rank/zranka.c82
4 files changed, 173 insertions, 0 deletions
diff --git a/2.3-1/src/c/linearAlgebra/includes/rank.h b/2.3-1/src/c/linearAlgebra/includes/rank.h
new file mode 100644
index 00000000..0a21b4f8
--- /dev/null
+++ b/2.3-1/src/c/linearAlgebra/includes/rank.h
@@ -0,0 +1,29 @@
+ /* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Abhinav Dronamraju
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+#ifndef __RANK_H__
+#define __RANK_H__
+#include "types.h"
+#include "doubleComplex.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+double dranka(double* in1, int rows, int cols);
+
+doubleComplex zranka(doubleComplex* in1, int rows, int cols);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*__RANK_H__*/
diff --git a/2.3-1/src/c/linearAlgebra/interfaces/int_rank.h b/2.3-1/src/c/linearAlgebra/interfaces/int_rank.h
new file mode 100644
index 00000000..5c04e717
--- /dev/null
+++ b/2.3-1/src/c/linearAlgebra/interfaces/int_rank.h
@@ -0,0 +1,28 @@
+ /* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Abhinav Dronamraju
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+
+#ifndef __INT_RANK_H__
+#define __INT_RANK_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define d2rankd0(in1,size1) dranka(in1, size1[0], size1[1])
+
+#define z2rankz0(in1,size1) zranka(in1, size1[0], size1[1])
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*__INT_RANK_H__*/
diff --git a/2.3-1/src/c/linearAlgebra/rank/dranka.c b/2.3-1/src/c/linearAlgebra/rank/dranka.c
new file mode 100644
index 00000000..ebfb5a80
--- /dev/null
+++ b/2.3-1/src/c/linearAlgebra/rank/dranka.c
@@ -0,0 +1,34 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Abhinav Dronamraju
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+
+/*Funtion to find inverse condition number of square matrix*/
+
+#include "lapack.h"
+#include "stdlib.h"
+#include "string.h"
+#include "rank.h"
+#include "svd.h"
+
+double dranka(double* in1, int rows, int cols)
+{
+ double out1[rows*rows];
+ double out2[rows*cols];
+ double out3[cols*cols];
+ double rk;
+
+
+ rk = dsvda(0,in1,rows,cols, 0, 4, out1, out2, out3);
+
+
+ return rk;
+
+}
diff --git a/2.3-1/src/c/linearAlgebra/rank/zranka.c b/2.3-1/src/c/linearAlgebra/rank/zranka.c
new file mode 100644
index 00000000..0efad251
--- /dev/null
+++ b/2.3-1/src/c/linearAlgebra/rank/zranka.c
@@ -0,0 +1,82 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Abhinav Dronamraju
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+
+/*Funtion to find inverse condition number of square matrix*/
+
+#include "lapack.h"
+#include "stdlib.h"
+#include "stdio.h"
+#include "string.h"
+#include "rank.h"
+#include "svd.h"
+#include "doubleComplex.h"
+#include "addition.h"
+
+#define eps 2.22044604925e-16
+
+doubleComplex zranka(doubleComplex* in1, int rows, int cols)
+{
+ doubleComplex out1[rows*rows];
+ doubleComplex out2[rows*cols];
+ doubleComplex out3[cols*cols];
+ doubleComplex rk=0;
+
+
+ zsvda(in1,rows,cols, 0, 3, out1, out2, out3);
+
+double tol = (double)max(rows,cols)*eps*zreals(out2[0]) ;
+
+/*
+for(int i=0; i< rows*rows; i++)
+ printf("%lf + i*%lf \t", zreals(out1[i]), zimags(out1[i]));
+printf("\n");
+
+for(int i=0; i< rows*cols; i++)
+ printf("%lf + i*%lf \t", zreals(out2[i]), zimags(out2[i]));
+printf("\n");
+
+for(int i=0; i< cols*cols; i++)
+ printf("%lf + i*%lf \t", zreals(out3[i]), zimags(out3[i]));
+printf("\n");
+
+*/
+
+if(rows<cols)
+{
+ for(int i=0;i< rows;i++)
+ {
+ if( zreals(out2[i+i*rows]) > tol)
+ {
+ rk = zadds(rk,1);
+ }
+ }
+
+}
+
+else
+{
+
+ for(int i=0;i< cols;i++)
+ {
+ if( zreals(out2[i+i*rows]) > tol)
+ {
+ rk = zadds(rk,1);
+ }
+ }
+
+
+
+}
+
+ return rk;
+
+}