TR-mbed 1.0
Loading...
Searching...
No Matches
ArpackSelfAdjointEigenSolver.h
Go to the documentation of this file.
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2012 David Harmon <dharmon@gmail.com>
5//
6// This Source Code Form is subject to the terms of the Mozilla
7// Public License v. 2.0. If a copy of the MPL was not distributed
8// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
10#ifndef EIGEN_ARPACKGENERALIZEDSELFADJOINTEIGENSOLVER_H
11#define EIGEN_ARPACKGENERALIZEDSELFADJOINTEIGENSOLVER_H
12
13#include "../../../../Eigen/Dense"
14
15namespace Eigen {
16
17namespace internal {
18 template<typename Scalar, typename RealScalar> struct arpack_wrapper;
19 template<typename MatrixSolver, typename MatrixType, typename Scalar, bool BisSPD> struct OP;
20}
21
22
23
24template<typename MatrixType, typename MatrixSolver=SimplicialLLT<MatrixType>, bool BisSPD=false>
26{
27public:
28 //typedef typename MatrixSolver::MatrixType MatrixType;
29
31 typedef typename MatrixType::Scalar Scalar;
32 typedef typename MatrixType::Index Index;
33
41
48
63
87 Index nbrEigenvalues, std::string eigs_sigma="LM",
88 int options=ComputeEigenvectors, RealScalar tol=0.0)
89 : m_eivec(),
90 m_eivalues(),
91 m_isInitialized(false),
92 m_eigenvectorsOk(false),
95 {
96 compute(A, B, nbrEigenvalues, eigs_sigma, options, tol);
97 }
98
122 Index nbrEigenvalues, std::string eigs_sigma="LM",
123 int options=ComputeEigenvectors, RealScalar tol=0.0)
124 : m_eivec(),
125 m_eivalues(),
126 m_isInitialized(false),
127 m_eigenvectorsOk(false),
130 {
131 compute(A, nbrEigenvalues, eigs_sigma, options, tol);
132 }
133
134
159 Index nbrEigenvalues, std::string eigs_sigma="LM",
160 int options=ComputeEigenvectors, RealScalar tol=0.0);
161
185 Index nbrEigenvalues, std::string eigs_sigma="LM",
186 int options=ComputeEigenvectors, RealScalar tol=0.0);
187
188
209 {
210 eigen_assert(m_isInitialized && "ArpackGeneralizedSelfAdjointEigenSolver is not initialized.");
211 eigen_assert(m_eigenvectorsOk && "The eigenvectors have not been computed together with the eigenvalues.");
212 return m_eivec;
213 }
214
231 {
232 eigen_assert(m_isInitialized && "ArpackGeneralizedSelfAdjointEigenSolver is not initialized.");
233 return m_eivalues;
234 }
235
255 {
256 eigen_assert(m_isInitialized && "SelfAdjointEigenSolver is not initialized.");
257 eigen_assert(m_eigenvectorsOk && "The eigenvectors have not been computed together with the eigenvalues.");
258 return m_eivec * m_eivalues.cwiseSqrt().asDiagonal() * m_eivec.adjoint();
259 }
260
280 {
281 eigen_assert(m_isInitialized && "SelfAdjointEigenSolver is not initialized.");
282 eigen_assert(m_eigenvectorsOk && "The eigenvectors have not been computed together with the eigenvalues.");
283 return m_eivec * m_eivalues.cwiseInverse().cwiseSqrt().asDiagonal() * m_eivec.adjoint();
284 }
285
291 {
292 eigen_assert(m_isInitialized && "ArpackGeneralizedSelfAdjointEigenSolver is not initialized.");
293 return m_info;
294 }
295
297 { return m_nbrConverged; }
298
299 size_t getNbrIterations() const
300 { return m_nbrIterations; }
301
302protected:
308
311};
312
313
314
315
316
317template<typename MatrixType, typename MatrixSolver, bool BisSPD>
320::compute(const MatrixType& A, Index nbrEigenvalues,
321 std::string eigs_sigma, int options, RealScalar tol)
322{
323 MatrixType B(0,0);
324 compute(A, B, nbrEigenvalues, eigs_sigma, options, tol);
325
326 return *this;
327}
328
329
330template<typename MatrixType, typename MatrixSolver, bool BisSPD>
333::compute(const MatrixType& A, const MatrixType& B, Index nbrEigenvalues,
334 std::string eigs_sigma, int options, RealScalar tol)
335{
336 eigen_assert(A.cols() == A.rows());
337 eigen_assert(B.cols() == B.rows());
338 eigen_assert(B.rows() == 0 || A.cols() == B.rows());
339 eigen_assert((options &~ (EigVecMask | GenEigMask)) == 0
340 && (options & EigVecMask) != EigVecMask
341 && "invalid option parameter");
342
343 bool isBempty = (B.rows() == 0) || (B.cols() == 0);
344
345 // For clarity, all parameters match their ARPACK name
346 //
347 // Always 0 on the first call
348 //
349 int ido = 0;
350
351 int n = (int)A.cols();
352
353 // User options: "LA", "SA", "SM", "LM", "BE"
354 //
355 char whch[3] = "LM";
356
357 // Specifies the shift if iparam[6] = { 3, 4, 5 }, not used if iparam[6] = { 1, 2 }
358 //
359 RealScalar sigma = 0.0;
360
361 if (eigs_sigma.length() >= 2 && isalpha(eigs_sigma[0]) && isalpha(eigs_sigma[1]))
362 {
363 eigs_sigma[0] = toupper(eigs_sigma[0]);
364 eigs_sigma[1] = toupper(eigs_sigma[1]);
365
366 // In the following special case we're going to invert the problem, since solving
367 // for larger magnitude is much much faster
368 // i.e., if 'SM' is specified, we're going to really use 'LM', the default
369 //
370 if (eigs_sigma.substr(0,2) != "SM")
371 {
372 whch[0] = eigs_sigma[0];
373 whch[1] = eigs_sigma[1];
374 }
375 }
376 else
377 {
378 eigen_assert(false && "Specifying clustered eigenvalues is not yet supported!");
379
380 // If it's not scalar values, then the user may be explicitly
381 // specifying the sigma value to cluster the evs around
382 //
383 sigma = atof(eigs_sigma.c_str());
384
385 // If atof fails, it returns 0.0, which is a fine default
386 //
387 }
388
389 // "I" means normal eigenvalue problem, "G" means generalized
390 //
391 char bmat[2] = "I";
392 if (eigs_sigma.substr(0,2) == "SM" || !(isalpha(eigs_sigma[0]) && isalpha(eigs_sigma[1])) || (!isBempty && !BisSPD))
393 bmat[0] = 'G';
394
395 // Now we determine the mode to use
396 //
397 int mode = (bmat[0] == 'G') + 1;
398 if (eigs_sigma.substr(0,2) == "SM" || !(isalpha(eigs_sigma[0]) && isalpha(eigs_sigma[1])))
399 {
400 // We're going to use shift-and-invert mode, and basically find
401 // the largest eigenvalues of the inverse operator
402 //
403 mode = 3;
404 }
405
406 // The user-specified number of eigenvalues/vectors to compute
407 //
408 int nev = (int)nbrEigenvalues;
409
410 // Allocate space for ARPACK to store the residual
411 //
412 Scalar *resid = new Scalar[n];
413
414 // Number of Lanczos vectors, must satisfy nev < ncv <= n
415 // Note that this indicates that nev != n, and we cannot compute
416 // all eigenvalues of a mtrix
417 //
418 int ncv = std::min(std::max(2*nev, 20), n);
419
420 // The working n x ncv matrix, also store the final eigenvectors (if computed)
421 //
422 Scalar *v = new Scalar[n*ncv];
423 int ldv = n;
424
425 // Working space
426 //
427 Scalar *workd = new Scalar[3*n];
428 int lworkl = ncv*ncv+8*ncv; // Must be at least this length
429 Scalar *workl = new Scalar[lworkl];
430
431 int *iparam= new int[11];
432 iparam[0] = 1; // 1 means we let ARPACK perform the shifts, 0 means we'd have to do it
433 iparam[2] = std::max(300, (int)std::ceil(2*n/std::max(ncv,1)));
434 iparam[6] = mode; // The mode, 1 is standard ev problem, 2 for generalized ev, 3 for shift-and-invert
435
436 // Used during reverse communicate to notify where arrays start
437 //
438 int *ipntr = new int[11];
439
440 // Error codes are returned in here, initial value of 0 indicates a random initial
441 // residual vector is used, any other values means resid contains the initial residual
442 // vector, possibly from a previous run
443 //
444 int info = 0;
445
446 Scalar scale = 1.0;
447 //if (!isBempty)
448 //{
449 //Scalar scale = B.norm() / std::sqrt(n);
450 //scale = std::pow(2, std::floor(std::log(scale+1)));
452 //for (size_t i=0; i<(size_t)B.outerSize(); i++)
453 // for (typename MatrixType::InnerIterator it(B, i); it; ++it)
454 // it.valueRef() /= scale;
455 //}
456
457 MatrixSolver OP;
458 if (mode == 1 || mode == 2)
459 {
460 if (!isBempty)
461 OP.compute(B);
462 }
463 else if (mode == 3)
464 {
465 if (sigma == 0.0)
466 {
467 OP.compute(A);
468 }
469 else
470 {
471 // Note: We will never enter here because sigma must be 0.0
472 //
473 if (isBempty)
474 {
475 MatrixType AminusSigmaB(A);
476 for (Index i=0; i<A.rows(); ++i)
477 AminusSigmaB.coeffRef(i,i) -= sigma;
478
479 OP.compute(AminusSigmaB);
480 }
481 else
482 {
483 MatrixType AminusSigmaB = A - sigma * B;
484 OP.compute(AminusSigmaB);
485 }
486 }
487 }
488
489 if (!(mode == 1 && isBempty) && !(mode == 2 && isBempty) && OP.info() != Success)
490 std::cout << "Error factoring matrix" << std::endl;
491
492 do
493 {
494 internal::arpack_wrapper<Scalar, RealScalar>::saupd(&ido, bmat, &n, whch, &nev, &tol, resid,
495 &ncv, v, &ldv, iparam, ipntr, workd, workl,
496 &lworkl, &info);
497
498 if (ido == -1 || ido == 1)
499 {
500 Scalar *in = workd + ipntr[0] - 1;
501 Scalar *out = workd + ipntr[1] - 1;
502
503 if (ido == 1 && mode != 2)
504 {
505 Scalar *out2 = workd + ipntr[2] - 1;
506 if (isBempty || mode == 1)
508 else
510
511 in = workd + ipntr[2] - 1;
512 }
513
514 if (mode == 1)
515 {
516 if (isBempty)
517 {
518 // OP = A
519 //
521 }
522 else
523 {
524 // OP = L^{-1}AL^{-T}
525 //
527 }
528 }
529 else if (mode == 2)
530 {
531 if (ido == 1)
533
534 // OP = B^{-1} A
535 //
537 }
538 else if (mode == 3)
539 {
540 // OP = (A-\sigmaB)B (\sigma could be 0, and B could be I)
541 // The B * in is already computed and stored at in if ido == 1
542 //
543 if (ido == 1 || isBempty)
545 else
547 }
548 }
549 else if (ido == 2)
550 {
551 Scalar *in = workd + ipntr[0] - 1;
552 Scalar *out = workd + ipntr[1] - 1;
553
554 if (isBempty || mode == 1)
556 else
558 }
559 } while (ido != 99);
560
561 if (info == 1)
562 m_info = NoConvergence;
563 else if (info == 3)
564 m_info = NumericalIssue;
565 else if (info < 0)
566 m_info = InvalidInput;
567 else if (info != 0)
568 eigen_assert(false && "Unknown ARPACK return value!");
569 else
570 {
571 // Do we compute eigenvectors or not?
572 //
573 int rvec = (options & ComputeEigenvectors) == ComputeEigenvectors;
574
575 // "A" means "All", use "S" to choose specific eigenvalues (not yet supported in ARPACK))
576 //
577 char howmny[2] = "A";
578
579 // if howmny == "S", specifies the eigenvalues to compute (not implemented in ARPACK)
580 //
581 int *select = new int[ncv];
582
583 // Final eigenvalues
584 //
585 m_eivalues.resize(nev, 1);
586
587 internal::arpack_wrapper<Scalar, RealScalar>::seupd(&rvec, howmny, select, m_eivalues.data(), v, &ldv,
588 &sigma, bmat, &n, whch, &nev, &tol, resid, &ncv,
589 v, &ldv, iparam, ipntr, workd, workl, &lworkl, &info);
590
591 if (info == -14)
592 m_info = NoConvergence;
593 else if (info != 0)
594 m_info = InvalidInput;
595 else
596 {
597 if (rvec)
598 {
599 m_eivec.resize(A.rows(), nev);
600 for (int i=0; i<nev; i++)
601 for (int j=0; j<n; j++)
602 m_eivec(j,i) = v[i*n+j] / scale;
603
604 if (mode == 1 && !isBempty && BisSPD)
606
607 m_eigenvectorsOk = true;
608 }
609
610 m_nbrIterations = iparam[2];
611 m_nbrConverged = iparam[4];
612
613 m_info = Success;
614 }
615
616 delete[] select;
617 }
618
619 delete[] v;
620 delete[] iparam;
621 delete[] ipntr;
622 delete[] workd;
623 delete[] workl;
624 delete[] resid;
625
626 m_isInitialized = true;
627
628 return *this;
629}
630
631
632// Single precision
633//
634extern "C" void ssaupd_(int *ido, char *bmat, int *n, char *which,
635 int *nev, float *tol, float *resid, int *ncv,
636 float *v, int *ldv, int *iparam, int *ipntr,
637 float *workd, float *workl, int *lworkl,
638 int *info);
639
640extern "C" void sseupd_(int *rvec, char *All, int *select, float *d,
641 float *z, int *ldz, float *sigma,
642 char *bmat, int *n, char *which, int *nev,
643 float *tol, float *resid, int *ncv, float *v,
644 int *ldv, int *iparam, int *ipntr, float *workd,
645 float *workl, int *lworkl, int *ierr);
646
647// Double precision
648//
649extern "C" void dsaupd_(int *ido, char *bmat, int *n, char *which,
650 int *nev, double *tol, double *resid, int *ncv,
651 double *v, int *ldv, int *iparam, int *ipntr,
652 double *workd, double *workl, int *lworkl,
653 int *info);
654
655extern "C" void dseupd_(int *rvec, char *All, int *select, double *d,
656 double *z, int *ldz, double *sigma,
657 char *bmat, int *n, char *which, int *nev,
658 double *tol, double *resid, int *ncv, double *v,
659 int *ldv, int *iparam, int *ipntr, double *workd,
660 double *workl, int *lworkl, int *ierr);
661
662
663namespace internal {
664
665template<typename Scalar, typename RealScalar> struct arpack_wrapper
666{
667 static inline void saupd(int *ido, char *bmat, int *n, char *which,
668 int *nev, RealScalar *tol, Scalar *resid, int *ncv,
669 Scalar *v, int *ldv, int *iparam, int *ipntr,
670 Scalar *workd, Scalar *workl, int *lworkl, int *info)
671 {
672 EIGEN_STATIC_ASSERT(!NumTraits<Scalar>::IsComplex, NUMERIC_TYPE_MUST_BE_REAL)
673 }
674
675 static inline void seupd(int *rvec, char *All, int *select, Scalar *d,
676 Scalar *z, int *ldz, RealScalar *sigma,
677 char *bmat, int *n, char *which, int *nev,
678 RealScalar *tol, Scalar *resid, int *ncv, Scalar *v,
679 int *ldv, int *iparam, int *ipntr, Scalar *workd,
680 Scalar *workl, int *lworkl, int *ierr)
681 {
682 EIGEN_STATIC_ASSERT(!NumTraits<Scalar>::IsComplex, NUMERIC_TYPE_MUST_BE_REAL)
683 }
684};
685
686template <> struct arpack_wrapper<float, float>
687{
688 static inline void saupd(int *ido, char *bmat, int *n, char *which,
689 int *nev, float *tol, float *resid, int *ncv,
690 float *v, int *ldv, int *iparam, int *ipntr,
691 float *workd, float *workl, int *lworkl, int *info)
692 {
694 }
695
696 static inline void seupd(int *rvec, char *All, int *select, float *d,
697 float *z, int *ldz, float *sigma,
698 char *bmat, int *n, char *which, int *nev,
699 float *tol, float *resid, int *ncv, float *v,
700 int *ldv, int *iparam, int *ipntr, float *workd,
701 float *workl, int *lworkl, int *ierr)
702 {
703 sseupd_(rvec, All, select, d, z, ldz, sigma, bmat, n, which, nev, tol, resid, ncv, v, ldv, iparam, ipntr,
705 }
706};
707
708template <> struct arpack_wrapper<double, double>
709{
710 static inline void saupd(int *ido, char *bmat, int *n, char *which,
711 int *nev, double *tol, double *resid, int *ncv,
712 double *v, int *ldv, int *iparam, int *ipntr,
713 double *workd, double *workl, int *lworkl, int *info)
714 {
716 }
717
718 static inline void seupd(int *rvec, char *All, int *select, double *d,
719 double *z, int *ldz, double *sigma,
720 char *bmat, int *n, char *which, int *nev,
721 double *tol, double *resid, int *ncv, double *v,
722 int *ldv, int *iparam, int *ipntr, double *workd,
723 double *workl, int *lworkl, int *ierr)
724 {
725 dseupd_(rvec, All, select, d, v, ldv, sigma, bmat, n, which, nev, tol, resid, ncv, v, ldv, iparam, ipntr,
727 }
728};
729
730
731template<typename MatrixSolver, typename MatrixType, typename Scalar, bool BisSPD>
732struct OP
733{
734 static inline void applyOP(MatrixSolver &OP, const MatrixType &A, int n, Scalar *in, Scalar *out);
735 static inline void project(MatrixSolver &OP, int n, int k, Scalar *vecs);
736};
737
738template<typename MatrixSolver, typename MatrixType, typename Scalar>
740{
741 static inline void applyOP(MatrixSolver &OP, const MatrixType &A, int n, Scalar *in, Scalar *out)
742{
743 // OP = L^{-1} A L^{-T} (B = LL^T)
744 //
745 // First solve L^T out = in
746 //
749
750 // Then compute out = A out
751 //
753
754 // Then solve L out = out
755 //
758}
759
760 static inline void project(MatrixSolver &OP, int n, int k, Scalar *vecs)
761{
762 // Solve L^T out = in
763 //
766}
767
768};
769
770template<typename MatrixSolver, typename MatrixType, typename Scalar>
772{
773 static inline void applyOP(MatrixSolver &OP, const MatrixType &A, int n, Scalar *in, Scalar *out)
774{
775 eigen_assert(false && "Should never be in here...");
776}
777
778 static inline void project(MatrixSolver &OP, int n, int k, Scalar *vecs)
779{
780 eigen_assert(false && "Should never be in here...");
781}
782
783};
784
785} // end namespace internal
786
787} // end namespace Eigen
788
789#endif // EIGEN_ARPACKSELFADJOINTEIGENSOLVER_H
790
Array< int, Dynamic, 1 > v
Definition Array_initializer_list_vector_cxx11.cpp:1
int n
Definition BiCGSTAB_simple.cpp:1
int i
Definition BiCGSTAB_step_by_step.cpp:9
#define eigen_assert(x)
Definition Macros.h:1037
#define EIGEN_STATIC_ASSERT(CONDITION, MSG)
Definition StaticAssert.h:127
SCALAR Scalar
Definition bench_gemm.cpp:46
NumTraits< Scalar >::Real RealScalar
Definition bench_gemm.cpp:47
Matrix< SCALARB, Dynamic, Dynamic, opt_B > B
Definition bench_gemm.cpp:49
MatrixXf MatrixType
Definition benchmark-blocking-sizes.cpp:52
Definition ArpackSelfAdjointEigenSolver.h:26
const Matrix< Scalar, Dynamic, 1 > & eigenvalues() const
Returns the eigenvalues of given matrix.
Definition ArpackSelfAdjointEigenSolver.h:230
ArpackGeneralizedSelfAdjointEigenSolver & compute(const MatrixType &A, const MatrixType &B, Index nbrEigenvalues, std::string eigs_sigma="LM", int options=ComputeEigenvectors, RealScalar tol=0.0)
Computes generalized eigenvalues / eigenvectors of given matrix using the external ARPACK library.
Definition ArpackSelfAdjointEigenSolver.h:333
NumTraits< Scalar >::Real RealScalar
Real scalar type for MatrixType.
Definition ArpackSelfAdjointEigenSolver.h:40
MatrixType::Index Index
Definition ArpackSelfAdjointEigenSolver.h:32
ComputationInfo m_info
Definition ArpackSelfAdjointEigenSolver.h:305
ComputationInfo info() const
Reports whether previous computation was successful.
Definition ArpackSelfAdjointEigenSolver.h:290
size_t m_nbrIterations
Definition ArpackSelfAdjointEigenSolver.h:310
Matrix< Scalar, Dynamic, Dynamic > operatorSqrt() const
Computes the positive-definite square root of the matrix.
Definition ArpackSelfAdjointEigenSolver.h:254
ArpackGeneralizedSelfAdjointEigenSolver(const MatrixType &A, Index nbrEigenvalues, std::string eigs_sigma="LM", int options=ComputeEigenvectors, RealScalar tol=0.0)
Constructor; computes eigenvalues of given matrix.
Definition ArpackSelfAdjointEigenSolver.h:121
size_t getNbrConvergedEigenValues() const
Definition ArpackSelfAdjointEigenSolver.h:296
bool m_eigenvectorsOk
Definition ArpackSelfAdjointEigenSolver.h:307
Matrix< Scalar, Dynamic, Dynamic > m_eivec
Definition ArpackSelfAdjointEigenSolver.h:303
ArpackGeneralizedSelfAdjointEigenSolver()
Default constructor.
Definition ArpackSelfAdjointEigenSolver.h:55
MatrixType::Scalar Scalar
Scalar type for matrices of type MatrixType.
Definition ArpackSelfAdjointEigenSolver.h:31
bool m_isInitialized
Definition ArpackSelfAdjointEigenSolver.h:306
ArpackGeneralizedSelfAdjointEigenSolver(const MatrixType &A, const MatrixType &B, Index nbrEigenvalues, std::string eigs_sigma="LM", int options=ComputeEigenvectors, RealScalar tol=0.0)
Constructor; computes generalized eigenvalues of given matrix with respect to another matrix.
Definition ArpackSelfAdjointEigenSolver.h:86
Matrix< Scalar, Dynamic, Dynamic > operatorInverseSqrt() const
Computes the inverse square root of the matrix.
Definition ArpackSelfAdjointEigenSolver.h:279
const Matrix< Scalar, Dynamic, Dynamic > & eigenvectors() const
Returns the eigenvectors of given matrix.
Definition ArpackSelfAdjointEigenSolver.h:208
internal::plain_col_type< MatrixType, RealScalar >::type RealVectorType
Type for vector of eigenvalues as returned by eigenvalues().
Definition ArpackSelfAdjointEigenSolver.h:47
Matrix< Scalar, Dynamic, 1 > m_eivalues
Definition ArpackSelfAdjointEigenSolver.h:304
size_t m_nbrConverged
Definition ArpackSelfAdjointEigenSolver.h:309
size_t getNbrIterations() const
Definition ArpackSelfAdjointEigenSolver.h:299
The matrix class, also used for vectors and row-vectors.
Definition Matrix.h:180
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition PlainObjectBase.h:145
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition PlainObjectBase.h:143
#define OP(X)
Definition common.h:47
EIGEN_DONT_INLINE void compute(Solver &solver, const MatrixType &A)
Definition dense_solvers.cpp:25
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy y set format x g set format y g set format x2 g set format y2 g set format z g set angles radians set nogrid set key title set key left top Right noreverse box linetype linewidth samplen spacing width set nolabel set noarrow set nologscale set logscale x set set pointsize set encoding default set nopolar set noparametric set set set set surface set nocontour set clabel set mapping cartesian set nohidden3d set cntrparam order set cntrparam linear set cntrparam levels auto set cntrparam points set size set set xzeroaxis lt lw set x2zeroaxis lt lw set yzeroaxis lt lw set y2zeroaxis lt lw set tics in set ticslevel set tics scale
Definition gnuplot_common_settings.hh:54
ComputationInfo
Definition Constants.h:440
@ NumericalIssue
Definition Constants.h:444
@ InvalidInput
Definition Constants.h:449
@ Success
Definition Constants.h:442
@ NoConvergence
Definition Constants.h:446
@ GenEigMask
Definition Constants.h:418
@ EigVecMask
Definition Constants.h:407
@ ComputeEigenvectors
Definition Constants.h:405
else if n * info
Definition cholesky.cpp:18
return int(ret)+1
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85
void dseupd_(int *rvec, char *All, int *select, double *d, double *z, int *ldz, double *sigma, char *bmat, int *n, char *which, int *nev, double *tol, double *resid, int *ncv, double *v, int *ldv, int *iparam, int *ipntr, double *workd, double *workl, int *lworkl, int *ierr)
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:74
void sseupd_(int *rvec, char *All, int *select, float *d, float *z, int *ldz, float *sigma, char *bmat, int *n, char *which, int *nev, float *tol, float *resid, int *ncv, float *v, int *ldv, int *iparam, int *ipntr, float *workd, float *workl, int *lworkl, int *ierr)
void ssaupd_(int *ido, char *bmat, int *n, char *which, int *nev, float *tol, float *resid, int *ncv, float *v, int *ldv, int *iparam, int *ipntr, float *workd, float *workl, int *lworkl, int *info)
void dsaupd_(int *ido, char *bmat, int *n, char *which, int *nev, double *tol, double *resid, int *ncv, double *v, int *ldv, int *iparam, int *ipntr, double *workd, double *workl, int *lworkl, int *info)
Definition BandTriangularSolver.h:13
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition NumTraits.h:233
static void project(MatrixSolver &OP, int n, int k, Scalar *vecs)
Definition ArpackSelfAdjointEigenSolver.h:778
static void applyOP(MatrixSolver &OP, const MatrixType &A, int n, Scalar *in, Scalar *out)
Definition ArpackSelfAdjointEigenSolver.h:773
static void applyOP(MatrixSolver &OP, const MatrixType &A, int n, Scalar *in, Scalar *out)
Definition ArpackSelfAdjointEigenSolver.h:741
static void project(MatrixSolver &OP, int n, int k, Scalar *vecs)
Definition ArpackSelfAdjointEigenSolver.h:760
Definition ArpackSelfAdjointEigenSolver.h:733
static void project(MatrixSolver &OP, int n, int k, Scalar *vecs)
static void applyOP(MatrixSolver &OP, const MatrixType &A, int n, Scalar *in, Scalar *out)
static void seupd(int *rvec, char *All, int *select, double *d, double *z, int *ldz, double *sigma, char *bmat, int *n, char *which, int *nev, double *tol, double *resid, int *ncv, double *v, int *ldv, int *iparam, int *ipntr, double *workd, double *workl, int *lworkl, int *ierr)
Definition ArpackSelfAdjointEigenSolver.h:718
static void saupd(int *ido, char *bmat, int *n, char *which, int *nev, double *tol, double *resid, int *ncv, double *v, int *ldv, int *iparam, int *ipntr, double *workd, double *workl, int *lworkl, int *info)
Definition ArpackSelfAdjointEigenSolver.h:710
static void saupd(int *ido, char *bmat, int *n, char *which, int *nev, float *tol, float *resid, int *ncv, float *v, int *ldv, int *iparam, int *ipntr, float *workd, float *workl, int *lworkl, int *info)
Definition ArpackSelfAdjointEigenSolver.h:688
static void seupd(int *rvec, char *All, int *select, float *d, float *z, int *ldz, float *sigma, char *bmat, int *n, char *which, int *nev, float *tol, float *resid, int *ncv, float *v, int *ldv, int *iparam, int *ipntr, float *workd, float *workl, int *lworkl, int *ierr)
Definition ArpackSelfAdjointEigenSolver.h:696
Definition ArpackSelfAdjointEigenSolver.h:666
static void saupd(int *ido, char *bmat, int *n, char *which, int *nev, RealScalar *tol, Scalar *resid, int *ncv, Scalar *v, int *ldv, int *iparam, int *ipntr, Scalar *workd, Scalar *workl, int *lworkl, int *info)
Definition ArpackSelfAdjointEigenSolver.h:667
static void seupd(int *rvec, char *All, int *select, Scalar *d, Scalar *z, int *ldz, RealScalar *sigma, char *bmat, int *n, char *which, int *nev, RealScalar *tol, Scalar *resid, int *ncv, Scalar *v, int *ldv, int *iparam, int *ipntr, Scalar *workd, Scalar *workl, int *lworkl, int *ierr)
Definition ArpackSelfAdjointEigenSolver.h:675
Definition ForwardDeclarations.h:17
std::ofstream out("Result.txt")
std::ptrdiff_t j
Definition tut_arithmetic_redux_minmax.cpp:2