mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Fix BLAS/LAPACK DLL usage on Windows.
This commit is contained in:
committed by
Rasmus Munk Larsen
parent
ef3c5c1d1d
commit
dbe9e6961e
@@ -56,27 +56,29 @@ EIGEN_LAPACK_FUNC(gesdd)
|
||||
PlainMatrixType mat(*m, *n);
|
||||
mat = matrix(a, *m, *n, *lda);
|
||||
|
||||
int option = *jobz == 'A' ? Eigen::ComputeFullU | Eigen::ComputeFullV
|
||||
: *jobz == 'S' ? Eigen::ComputeThinU | Eigen::ComputeThinV
|
||||
: *jobz == 'O' ? Eigen::ComputeThinU | Eigen::ComputeThinV
|
||||
: 0;
|
||||
|
||||
Eigen::BDCSVD<PlainMatrixType> svd(mat, option);
|
||||
|
||||
make_vector(s, diag_size) = svd.singularValues().head(diag_size);
|
||||
|
||||
if (*jobz == 'A') {
|
||||
Eigen::BDCSVD<PlainMatrixType, Eigen::ComputeFullU | Eigen::ComputeFullV> svd(mat);
|
||||
make_vector(s, diag_size) = svd.singularValues().head(diag_size);
|
||||
matrix(u, *m, *m, *ldu) = svd.matrixU();
|
||||
matrix(vt, *n, *n, *ldvt) = svd.matrixV().adjoint();
|
||||
} else if (*jobz == 'S') {
|
||||
Eigen::BDCSVD<PlainMatrixType, Eigen::ComputeThinU | Eigen::ComputeThinV> svd(mat);
|
||||
make_vector(s, diag_size) = svd.singularValues().head(diag_size);
|
||||
matrix(u, *m, diag_size, *ldu) = svd.matrixU();
|
||||
matrix(vt, diag_size, *n, *ldvt) = svd.matrixV().adjoint();
|
||||
} else if (*jobz == 'O' && *m >= *n) {
|
||||
Eigen::BDCSVD<PlainMatrixType, Eigen::ComputeThinU | Eigen::ComputeThinV> svd(mat);
|
||||
make_vector(s, diag_size) = svd.singularValues().head(diag_size);
|
||||
matrix(a, *m, *n, *lda) = svd.matrixU();
|
||||
matrix(vt, *n, *n, *ldvt) = svd.matrixV().adjoint();
|
||||
} else if (*jobz == 'O') {
|
||||
Eigen::BDCSVD<PlainMatrixType, Eigen::ComputeThinU | Eigen::ComputeThinV> svd(mat);
|
||||
make_vector(s, diag_size) = svd.singularValues().head(diag_size);
|
||||
matrix(u, *m, *m, *ldu) = svd.matrixU();
|
||||
matrix(a, diag_size, *n, *lda) = svd.matrixV().adjoint();
|
||||
} else {
|
||||
Eigen::BDCSVD<PlainMatrixType> svd(mat);
|
||||
make_vector(s, diag_size) = svd.singularValues().head(diag_size);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user