37 #ifndef MAT_LANCZOSLARGESTMAGNITUDEEIG
38 #define MAT_LANCZOSLARGESTMAGNITUDEEIG
43 template<
typename Treal,
typename Tmatrix,
typename Tvector>
45 :
public Lanczos<Treal, Tmatrix, Tvector> {
48 int maxIter = 100,
int cap = 100)
75 if(this->
A.get_nrows() == 5) {
88 Tvector newResidual(
eVec);
91 newResidual += -sP *
eVec;
130 template<
typename Treal,
typename Tmatrix,
typename Tvector>
141 template<
typename Treal,
typename Tmatrix,
typename Tvector>
144 delete[] eigVectorTri;
145 Treal* eigVectorMax =
new Treal[this->j];
146 Treal* eigVectorMin =
new Treal[this->j];
149 int const lMax = this->j - 1;
152 this->Tri.getEigsByIndex(&eValMax, eigVectorMax, &accMax,
158 this->Tri.getEigsByIndex(&eValMin, eigVectorMin, &accMin,
163 delete[] eigVectorMax;
164 eigVectorTri = eigVectorMin;
169 delete[] eigVectorMin;
170 eigVectorTri = eigVectorMax;
175 template<
typename Treal,
typename Tmatrix,
typename Tvector>
179 assert(eigVectorTri);
180 this->getEigVector(eVec, eigVectorTri);
184 template<
typename Treal,
typename Tmatrix,
typename Tvector>
187 bool conv = accTmp < absTol;
199 template<
typename Treal,
typename Tmatrix,
typename Tvector>
204 (Tmatrix
const & AA, Tvector
const & startVec,
205 Treal
const maxAbsVal,
206 int maxIter = 100,
int cap = 100)
232 template<
typename Treal,
typename Tmatrix,
typename Tvector>
237 return convAccuracy || (!eigIsSmall);
256 template<
typename Tmatrix,
typename Treal>
258 Treal
const requestedAbsAccuracy,
259 Treal
const requestedRelAccuracy,
260 Treal
const maxAbsVal,
261 typename Tmatrix::VectorType *
const eVecPtr = 0) {
262 assert(requestedAbsAccuracy >= 0);
265 Treal euclLowerBound;
266 Treal euclUpperBound;
267 M.quickEuclBounds(euclLowerBound, euclUpperBound);
268 if ( euclUpperBound < requestedAbsAccuracy )
271 if ( euclLowerBound > maxAbsVal )
274 int maxIter = M.get_nrows() * 100;
275 typename Tmatrix::VectorType guess;
278 guess.resetSizesAndBlocks(cols);
281 lan(M, guess, maxAbsVal, maxIter);
294 eValMin = eVal - acc;
295 eValMin = eValMin >= 0 ? eValMin : (Treal)0;
299 eValMin = euclLowerBound;
300 eValMin = eValMin >= maxAbsVal ? eValMin : maxAbsVal;
static Treal getRelPrecision()
Definition: matInclude.h:141
Treal eValTmp
Definition: LanczosLargestMagnitudeEig.h:125
void getLargestMagnitudeEigPair(Treal &eValue, Tvector &eVector, Treal &accuracy)
Definition: LanczosLargestMagnitudeEig.h:132
void setAbsTol(Treal const newTol)
Definition: LanczosLargestMagnitudeEig.h:54
Treal absTol
Eigenvector to the tridiagonal matrix length: this->j.
Definition: LanczosLargestMagnitudeEig.h:117
virtual void run()
Definition: Lanczos.h:85
Treal * eigVectorTri
Definition: LanczosLargestMagnitudeEig.h:114
Definition: LanczosLargestMagnitudeEig.h:200
Class for building Krylov subspaces with the Lanczos method.
Definition: LanczosLargestMagnitudeEig.h:44
Tvector eVec
Definition: LanczosLargestMagnitudeEig.h:112
Treal acc
Definition: LanczosLargestMagnitudeEig.h:113
virtual void update()
Definition: LanczosLargestMagnitudeEig.h:224
bool eigIsSmall
Definition: LanczosLargestMagnitudeEig.h:223
Describes dimensions of matrix and its blocks on all levels.
Definition: SizesAndBlocks.h:37
void computeEigenPairTri()
Definition: LanczosLargestMagnitudeEig.h:143
LanczosLargestMagnitudeEigIfSmall(Tmatrix const &AA, Tvector const &startVec, Treal const maxAbsVal, int maxIter=100, int cap=100)
Definition: LanczosLargestMagnitudeEig.h:204
Treal template_blas_fabs(Treal x)
Definition: Interval.h:44
void computeEigVec()
Definition: LanczosLargestMagnitudeEig.h:177
#define max(a, b)
Definition: integrator.cc:92
LanczosLargestMagnitudeEig(Tmatrix const &AA, Tvector const &startVec, int maxIter=100, int cap=100)
Definition: LanczosLargestMagnitudeEig.h:47
virtual bool converged() const
Definition: LanczosLargestMagnitudeEig.h:234
virtual bool converged() const
Definition: LanczosLargestMagnitudeEig.h:186
Interval< Treal > euclIfSmall(Tmatrix const &M, Treal const requestedAbsAccuracy, Treal const requestedRelAccuracy, Treal const maxAbsVal, typename Tmatrix::VectorType *const eVecPtr=0)
Returns interval containing the Euclidean norm of the matrix M.
Definition: LanczosLargestMagnitudeEig.h:257
void rerun()
Definition: LanczosLargestMagnitudeEig.h:82
Treal eVal
Definition: LanczosLargestMagnitudeEig.h:111
Treal accTmp
Definition: LanczosLargestMagnitudeEig.h:126
int maxIter
Current step.
Definition: Lanczos.h:112
bool largestMagEigIsSmall()
Definition: LanczosLargestMagnitudeEig.h:210
virtual void run()
Definition: LanczosLargestMagnitudeEig.h:212
Tmatrix const & A
Definition: Lanczos.h:102
void getLargestMagnitudeEig(Treal &ev, Treal &accuracy)
Definition: LanczosLargestMagnitudeEig.h:56
virtual ~LanczosLargestMagnitudeEig()
Definition: LanczosLargestMagnitudeEig.h:107
void restart(Tvector const &startVec)
Definition: Lanczos.h:72
Treal relTol
Definition: LanczosLargestMagnitudeEig.h:118
Class template for building Krylov subspaces with Lanczos.
Definition: Lanczos.h:57
Treal const maxAbsValue
Definition: LanczosLargestMagnitudeEig.h:222
virtual void run()
Definition: LanczosLargestMagnitudeEig.h:64
Xtrans< TX > transpose(TX const &A)
Transposition.
Definition: matrix_proxy.h:129
void setRelTol(Treal const newTol)
Definition: LanczosLargestMagnitudeEig.h:53
virtual void update()
Definition: LanczosLargestMagnitudeEig.h:121
Treal template_blas_sqrt(Treal x)