26 using Sparse = Eigen::SparseMatrix<double>;
50 template <
class Operator>
55 Vector previousVector_;
63 const Operator &A,
const std::optional<Vector> initial = {},
64 double initialBeta = 0.0)
67 this->ritzVector_ = initial ? *initial : Vector::Random(this->dim_);
68 this->ritzVector_.normalize();
69 previousVector_ = Vector::Zero(this->dim_);
81 const double beta)
const {
82 Vector y = this->
A_ * x1 - beta * x0;
103 Vector initVector = this->ritzVector_;
104 const double up = initVector.dot( this->
A_ * initVector );
105 const double down = initVector.dot(initVector);
106 const double mu = up / down;
107 double maxBeta = mu * mu / 4;
109 std::vector<double> betas;
111 Matrix R = Matrix::Zero(this->dim_, 10);
113 for (
size_t t = 0; t < T; t++) {
115 betas = {2 / 3 * maxBeta, 0.99 * maxBeta, maxBeta, 1.01 * maxBeta,
118 for (
size_t k = 0; k < betas.size(); ++k) {
120 Vector x0 = initVector;
121 Vector x00 = Vector::Zero(this->dim_);
123 for (
size_t j = 1; j < 10; j++) {
134 const Vector x = R.col(9);
135 const double up = x.dot(this->
A_ * x);
136 const double down = x.dot(x);
137 const double mu = up / down;
139 if (mu * mu / 4 > maxBeta) {
142 maxBeta = mu * mu / 4;
147 return betas[maxIndex];
156 bool compute(
size_t maxIterations,
double tol) {
158 bool isConverged =
false;
160 for (
size_t i = 0; i < maxIterations && !isConverged; i++) {
161 ++(this->nrIterations_);
162 Vector tmp = this->ritzVector_;
166 previousVector_ = tmp;
168 this->ritzValue_ = this->ritzVector_.dot(this->
A_ * this->ritzVector_);
Vector acceleratedPowerIteration(const Vector &x1, const Vector &x0, const double beta) const
Definition: AcceleratedPowerMethod.h:80
const Operator & A_
Definition: PowerMethod.h:64
AcceleratedPowerMethod(const Operator &A, const std::optional< Vector > initial={}, double initialBeta=0.0)
Definition: AcceleratedPowerMethod.h:62
Compute maximum Eigenpair with accelerated power method.
Definition: AcceleratedPowerMethod.h:51
Power method for fast eigenvalue and eigenvector computation.
Compute maximum Eigenpair with power method.
Definition: PowerMethod.h:58
double estimateBeta(const size_t T=10) const
Definition: AcceleratedPowerMethod.h:101
bool compute(size_t maxIterations, double tol)
Definition: AcceleratedPowerMethod.h:156
Definition: chartTesting.h:28
Vector acceleratedPowerIteration() const
Definition: AcceleratedPowerMethod.h:92
bool converged(double tol) const
Definition: PowerMethod.h:113