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;