python/cindep.py
changeset 0 0efde00f9229
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python/cindep.py	Fri May 27 14:24:59 2011 +0530
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+
+import pylab as pl
+from makezero import makezero
+
+def cindep(S, gap=None):
+    E = pl.finfo(float).eps
+
+    if gap == None:
+        gap = 1e8
+
+    r, c = pl.atleast_2d(S).shape
+
+    if r>c:
+        ind = 0
+    else:
+        sigma = pl.svd(S)[1]
+        l = len(sigma)
+        if(sigma[-1]/sigma[0] < (E*max(1, c))):
+            ind = 0
+        else:
+            if pl.any(sigma[:-1]/sigma[1:] >= gap):
+                ind = 0
+            else:
+                ind = 1
+    if ind:
+        b = pl.array([])
+
+    else:
+        A, B = S[r-1,:], S[:r-1,:] 
+        b = pl.lstsq(B.T, A.T)[0].T
+        b = makezero(b, gap)
+        b = b.squeeze()
+    return pl.atleast_2d(b)
+
+if __name__== "__main__":
+    pass