Diff of /MLFre/DPC/SLEP/altra.c [000000] .. [d8e26d]

Switch to side-by-side view

--- a
+++ b/MLFre/DPC/SLEP/altra.c
@@ -0,0 +1,86 @@
+#include "mex.h"
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include "altra.h"
+
+
+/*
+ * -------------------------------------------------------------------
+ *                       Function and parameter
+ * -------------------------------------------------------------------
+ *
+ * altra solves the following problem
+ *
+ * 1/2 \|x-v\|^2 + \sum \lambda_i \|x_{G_i}\|,
+ *
+ * where x and v are of dimension n,
+ *       \lambda_i >=0, and G_i's follow the tree structure
+ *
+ * The file is implemented in the following in Matlab:
+ *
+ * x=altra(v, n, ind, nodes);
+ *
+ * ind is a 3 x nodes matrix.
+ *       Each column corresponds to a node.
+ *
+ *       The first element of each column is the starting index,
+ *       the second element of each column is the ending index
+ *       the third element of each column corrreponds to \lambbda_i.
+ *
+ * -------------------------------------------------------------------
+ *                       Notices:
+ * -------------------------------------------------------------------
+ *
+ * 1. The nodes in the parameter "ind" should be given in the 
+ *    either
+ *           the postordering of depth-first traversal
+ *    or 
+ *           the reverse breadth-first traversal.
+ *
+ * 2. When each elements of x are penalized via the same L1 
+ *    (equivalent to the L2 norm) parameter, one can simplify the input
+ *    by specifying 
+ *           the "first" column of ind as (-1, -1, lambda)
+ *
+ *    In this case, we treat it as a single "super" node. Thus in the value
+ *    nodes, we only count it once.
+ *
+ * 3. The values in "ind" are in [1,n].
+ *
+ * 4. The third element of each column should be positive. The program does
+ *    not check the validity of the parameter. 
+ *
+ *    It is still valid to use the zero regularization parameter.
+ *    In this case, the program does not change the values of 
+ *    correponding indices.
+ *    
+ *
+ * -------------------------------------------------------------------
+ *                       History:
+ * -------------------------------------------------------------------
+ *
+ * Composed by Jun Liu on April 20, 2010
+ *
+ * For any question or suggestion, please email j.liu@asu.edu.
+ *
+ */
+
+
+
+void mexFunction (int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]){
+    double*		v		=	mxGetPr(prhs[0]);
+    int			n		=   (int) mxGetScalar(prhs[1]);
+	double*		ind   	=	mxGetPr(prhs[2]);
+	int			nodes	=   (int) mxGetScalar(prhs[3]);
+    
+	int i;
+	double *x;    
+    
+	/* set up output arguments */
+	plhs[0] = mxCreateDoubleMatrix(n,1,mxREAL);
+    
+	x = mxGetPr(plhs[0]);
+	altra(x, v, n, ind, nodes);
+}
+