From 397af1adffbe96446e0d5a9df1e48da64af79af2 Mon Sep 17 00:00:00 2001 From: Gertjan van den Burg Date: Fri, 14 Mar 2014 18:05:42 +0100 Subject: write eigen to data structure --- src/msvmmaj_kernel.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) (limited to 'src/msvmmaj_kernel.c') diff --git a/src/msvmmaj_kernel.c b/src/msvmmaj_kernel.c index 3a92ff5..fc699dd 100644 --- a/src/msvmmaj_kernel.c +++ b/src/msvmmaj_kernel.c @@ -10,6 +10,7 @@ * kernel matrix using several decomposition methods. * */ + #include #include "msvmmaj.h" @@ -66,18 +67,18 @@ void msvmmaj_make_kernel(struct MajModel *model, struct MajData *data) double *P = Malloc(double, n*n); double *Lambda = Malloc(double, n); - msvmmaj_make_eigen(K, n, P, Lambda); + long num_eigen = msvmmaj_make_eigen(K, n, P, Lambda); - // copy kernel to data - data->Z = realloc(data->Z, n*(n+1)*(sizeof(double))); + // copy eigendecomp to data + data->Z = realloc(data->Z, n*(n+1)*sizeof(double)); for (i=0; iZ, n+1, i, j+1, - matrix_get(K, n, i, j)); + matrix_set(data->Z, n+1, i, j+1, + matrix_get(P, n, i, j)); matrix_set(data->Z, n+1, i, 0, 1.0); } data->m = n; - + // let data know what it's made of data->kerneltype = model->kerneltype; free(data->kernelparam); @@ -111,7 +112,7 @@ void msvmmaj_make_kernel(struct MajModel *model, struct MajData *data) * * */ -void msvmmaj_make_eigen(double *K, long n, double *P, double *Lambda) +long msvmmaj_make_eigen(double *K, long n, double *P, double *Lambda) { int M, status, LWORK, *IWORK, *IFAIL; double abstol, *WORK; @@ -182,25 +183,21 @@ void msvmmaj_make_eigen(double *K, long n, double *P, double *Lambda) // Here you can put code to select the necessary eigenvectors, // depending on the size of the eigenvalues. // For now, let's just print the eigenvalues and exit - long i; - for (i=0; i