50 template <
class Operator>
63 const Operator &
A,
const std::optional<Vector>
initial = {},
64 double initialBeta = 0.0)
69 previousVector_ = Vector::Zero(this->
dim_);
81 const double beta)
const {
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;
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) {
123 for (
size_t j = 1;
j < 10;
j++) {
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];
158 bool isConverged =
false;
160 for (
size_t i = 0;
i < maxIterations && !isConverged;
i++) {
166 previousVector_ = tmp;