14 EIGEN_LAPACK_FUNC(gesdd,(
char *jobz,
int *m,
int*
n,
Scalar*
a,
int *
lda,
RealScalar *
s,
Scalar *u,
int *ldu,
Scalar *vt,
int *ldvt,
Scalar* ,
int* lwork,
18 bool query_size = *lwork==-1;
22 if(*jobz!=
'A' && *jobz!=
'S' && *jobz!=
'O' && *jobz!=
'N') *
info = -1;
23 else if(*m<0) *
info = -2;
24 else if(*
n<0) *
info = -3;
27 else if(*ldu <1 || (*jobz==
'A' && *ldu <*m)
28 || (*jobz==
'O' && *m<*
n && *ldu<*m)) *
info = -8;
29 else if(*ldvt<1 || (*jobz==
'A' && *ldvt<*
n)
30 || (*jobz==
'S' && *ldvt<diag_size)
31 || (*jobz==
'O' && *m>=*
n && *ldvt<*
n)) *
info = -10;
58 make_vector(
s,diag_size) = svd.singularValues().head(diag_size);
62 matrix(u,*m,*m,*ldu) = svd.matrixU();
63 matrix(vt,*
n,*
n,*ldvt) = svd.matrixV().adjoint();
67 matrix(u,*m,diag_size,*ldu) = svd.matrixU();
68 matrix(vt,diag_size,*
n,*ldvt) = svd.matrixV().adjoint();
70 else if(*jobz==
'O' && *m>=*
n)
73 matrix(vt,*
n,*
n,*ldvt) = svd.matrixV().adjoint();
77 matrix(u,*m,*m,*ldu) = svd.matrixU();
78 matrix(
a,diag_size,*
n,*
lda) = svd.matrixV().adjoint();
85 EIGEN_LAPACK_FUNC(gesvd,(
char *jobu,
char *jobv,
int *m,
int*
n,
Scalar*
a,
int *
lda,
RealScalar *
s,
Scalar *u,
int *ldu,
Scalar *vt,
int *ldvt,
Scalar* ,
int* lwork,
89 bool query_size = *lwork==-1;
93 if( *jobu!=
'A' && *jobu!=
'S' && *jobu!=
'O' && *jobu!=
'N') *
info = -1;
94 else if((*jobv!=
'A' && *jobv!=
'S' && *jobv!=
'O' && *jobv!=
'N')
95 || (*jobu==
'O' && *jobv==
'O')) *
info = -2;
96 else if(*m<0) *
info = -3;
97 else if(*
n<0) *
info = -4;
99 else if(*ldu <1 || ((*jobu==
'A' || *jobu==
'S') && *ldu<*m)) *
info = -9;
100 else if(*ldvt<1 || (*jobv==
'A' && *ldvt<*
n)
101 || (*jobv==
'S' && *ldvt<diag_size)) *
info = -11;
126 make_vector(
s,diag_size) = svd.singularValues().head(diag_size);
128 if(*jobu==
'A')
matrix(u,*m,*m,*ldu) = svd.matrixU();
129 else if(*jobu==
'S')
matrix(u,*m,diag_size,*ldu) = svd.matrixU();
130 else if(*jobu==
'O')
matrix(
a,*m,diag_size,*
lda) = svd.matrixU();
133 if(*jobv==
'A')
matrix(vt,*
n,*
n,*ldvt) = svd.matrixV().adjoint();
134 else if(*jobv==
'S')
matrix(vt,diag_size,*
n,*ldvt) = svd.matrixV().adjoint();
135 else if(*jobv==
'O')
matrix(
a,diag_size,*
n,*
lda) = svd.matrixV().adjoint();