aboutsummaryrefslogtreecommitdiff
path: root/src/gensvm_simplex.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gensvm_simplex.c')
-rw-r--r--src/gensvm_simplex.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/gensvm_simplex.c b/src/gensvm_simplex.c
new file mode 100644
index 0000000..1fd5f14
--- /dev/null
+++ b/src/gensvm_simplex.c
@@ -0,0 +1,45 @@
+/**
+ * @file gensvm_simplex.c
+ * @author Gertjan van den Burg
+ * @date May, 2016
+ * @brief Function for generating the simplex matrix
+ *
+ * @details
+ * Contains the function for generating the simplex matrix for a given number
+ * of classes.
+ *
+ */
+
+#include "gensvm_simplex.h"
+
+/**
+ * @brief Generate matrix of simplex vertex coordinates
+ *
+ * @details
+ * Generate the simplex matrix. Each row of the created
+ * matrix contains the coordinate vector of a single
+ * vertex of the K-simplex in K-1 dimensions. The simplex
+ * generated is a special simplex with edges of length 1.
+ * The simplex matrix U must already have been allocated.
+ *
+ * @param[in] K number of classes
+ * @param[in,out] U simplex matrix of size K * (K-1)
+ */
+void gensvm_simplex(long K, double *U)
+{
+ long i, j;
+ for (i=0; i<K; i++) {
+ for (j=0; j<K-1; j++) {
+ if (i <= j) {
+ matrix_set(U, K-1, i, j,
+ -1.0/sqrt(2.0*(j+1)*(j+2)));
+ } else if (i == j+1) {
+ matrix_set(U, K-1, i, j,
+ sqrt((j+1)/(2.0*(j+2))));
+ } else {
+ matrix_set(U, K-1, i, j, 0.0);
+ }
+ }
+ }
+}
+