mirror of https://github.com/CGAL/cgal
debug de lapack...
This commit is contained in:
parent
b9ef01ba52
commit
4501a57ae3
|
|
@ -66,13 +66,27 @@ void GSL::eigen_symm_algo(Matrix& S, double* eval, Matrix& evec)
|
||||||
liwork = 10*n,
|
liwork = 10*n,
|
||||||
info;
|
info;
|
||||||
double vl=0, vu=0, abstol = 0;
|
double vl=0, vu=0, abstol = 0;
|
||||||
integer* isuppz = (integer*) malloc(n*sizeof(integer));
|
/* //c style */
|
||||||
double* work = (double*) malloc(lwork*sizeof(double));
|
/* integer* isuppz = (integer*) malloc(n*sizeof(integer)); */
|
||||||
integer* iwork = (integer*) malloc(liwork*sizeof(integer));
|
/* double* work = (double*) malloc(lwork*sizeof(double)); */
|
||||||
|
/* integer* iwork = (integer*) malloc(liwork*sizeof(integer)); */
|
||||||
|
//c++ style
|
||||||
|
integer* isuppz;
|
||||||
|
isuppz = new integer [n];
|
||||||
|
double* work = new double [lwork];
|
||||||
|
integer* iwork = new integer [liwork];
|
||||||
|
|
||||||
dsyevr_(&jobz, &range, &uplo, &n, S.matrix(), &lda, &vl, &vu, &il, &iu, &abstol, &m,
|
dsyevr_(&jobz, &range, &uplo, &n, S.matrix(), &lda, &vl, &vu, &il, &iu, &abstol, &m,
|
||||||
eval, evec.matrix(), &n, isuppz, work, &lwork, iwork, &liwork, &info);
|
eval, evec.matrix(), &n, isuppz, work, &lwork, iwork, &liwork, &info);
|
||||||
|
|
||||||
|
/* //clean up */
|
||||||
|
/* free(isuppz); */
|
||||||
|
/* free(work); */
|
||||||
|
/* free(iwork); */
|
||||||
|
/* //C++ style */
|
||||||
|
delete [] isuppz;
|
||||||
|
delete [] work;
|
||||||
|
delete [] iwork;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GSL::solve_ls_svd_algo(Matrix& M, double* B, double &cond_nb)
|
void GSL::solve_ls_svd_algo(Matrix& M, double* B, double &cond_nb)
|
||||||
|
|
@ -85,18 +99,27 @@ void GSL::solve_ls_svd_algo(Matrix& M, double* B, double &cond_nb)
|
||||||
rank,
|
rank,
|
||||||
lwork = 5*m,
|
lwork = 5*m,
|
||||||
info;
|
info;
|
||||||
double* sing_values = (double*) malloc(n*sizeof(double));
|
/* //c style */
|
||||||
double* work = (double*) malloc(lwork*sizeof(double));
|
/* double* sing_values = (double*) malloc(n*sizeof(double)); */
|
||||||
|
/* double* work = (double*) malloc(lwork*sizeof(double)); */
|
||||||
|
//c++ style
|
||||||
|
double* sing_values = new double [n];
|
||||||
|
double* work = new double [lwork];
|
||||||
|
|
||||||
double rcond = -1;
|
double rcond = -1;
|
||||||
|
|
||||||
dgelss_(&m, &n, &nrhs, M.matrix(), &lda, B, &ldb, sing_values, &rcond, &rank, work, &lwork, &info);
|
dgelss_(&m, &n, &nrhs, M.matrix(), &lda, B, &ldb, sing_values,
|
||||||
|
&rcond, &rank, work, &lwork, &info);
|
||||||
assert(info==0);
|
assert(info==0);
|
||||||
|
|
||||||
cond_nb = sing_values[0]/sing_values[n-1];
|
cond_nb = sing_values[0]/sing_values[n-1];
|
||||||
|
|
||||||
//clean up
|
/* //clean up */
|
||||||
free(sing_values);
|
/* free(sing_values); */
|
||||||
free(work);
|
/* free(work); */
|
||||||
|
//c++ style
|
||||||
|
delete [] sing_values;
|
||||||
|
delete [] work;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -349,7 +349,7 @@ compute_PCA(Range_Iterator begin, Range_Iterator end,
|
||||||
Cov.set_elt(1,1,yy);
|
Cov.set_elt(1,1,yy);
|
||||||
Cov.set_elt(1,2,yz);
|
Cov.set_elt(1,2,yz);
|
||||||
Cov.set_elt(2,0,xz);
|
Cov.set_elt(2,0,xz);
|
||||||
Cov.set_elt(2,2,yz);
|
Cov.set_elt(2,1,yz);
|
||||||
Cov.set_elt(2,2,zz);
|
Cov.set_elt(2,2,zz);
|
||||||
// solve for eigenvalues and eigenvectors.
|
// solve for eigenvalues and eigenvectors.
|
||||||
// eigen values are sorted in ascending order,
|
// eigen values are sorted in ascending order,
|
||||||
|
|
@ -360,9 +360,11 @@ compute_PCA(Range_Iterator begin, Range_Iterator end,
|
||||||
monge_info.pca_eigen_vals()[0] = eval[2];//implicit cast LAFT->LFT
|
monge_info.pca_eigen_vals()[0] = eval[2];//implicit cast LAFT->LFT
|
||||||
LVector temp_vectn(evec.get_elt(0,2),evec.get_elt(1,2),evec.get_elt(2,2));
|
LVector temp_vectn(evec.get_elt(0,2),evec.get_elt(1,2),evec.get_elt(2,2));
|
||||||
monge_info.pca_eigen_vecs()[0] = temp_vectn;
|
monge_info.pca_eigen_vecs()[0] = temp_vectn;
|
||||||
|
|
||||||
monge_info.pca_eigen_vals()[1] = eval[1];
|
monge_info.pca_eigen_vals()[1] = eval[1];
|
||||||
LVector temp_vect1(evec.get_elt(0,1),evec.get_elt(1,1),evec.get_elt(2,1));
|
LVector temp_vect1(evec.get_elt(0,1),evec.get_elt(1,1),evec.get_elt(2,1));
|
||||||
monge_info.pca_eigen_vecs()[1] = temp_vect1;
|
monge_info.pca_eigen_vecs()[1] = temp_vect1;
|
||||||
|
|
||||||
monge_info.pca_eigen_vals()[2] = eval[0];
|
monge_info.pca_eigen_vals()[2] = eval[0];
|
||||||
LVector temp_vect2(evec.get_elt(0,0),evec.get_elt(1,0),evec.get_elt(2,0));
|
LVector temp_vect2(evec.get_elt(0,0),evec.get_elt(1,0),evec.get_elt(2,0));
|
||||||
monge_info.pca_eigen_vecs()[2] = temp_vect2;
|
monge_info.pca_eigen_vecs()[2] = temp_vect2;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue