TikhonovProblem.h 3.26 KB
 1 2 3 4 5 6 7 #pragma once #include "WLSProblem.h" namespace elsa { /**  David Frank committed Apr 16, 2021 8  * @brief Class representing a Tikhonov regularized weighted least squares problem  9  *  David Frank committed Apr 16, 2021 10  * @author Nikola Dinev  11  *  David Frank committed Apr 16, 2021 12  * @tparam data_t data type for the domain and range of the problem, defaulting to real_t  13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33  * * This class represents a Tikhonov regularized weighted least squares problem. * Some common examples are: * - \f$\argmin_x \frac{1}{2} \| Ax - b \|_2^2 + \lambda \| x \|_2^2 \f$ * - \f$\argmin_x \frac{1}{2} \| Ax - b \|_2^2 + \lambda \| x - x^* \|_2^2 \f$ * - \f$\argmin_x \frac{1}{2} \| Ax - b \|_2^2 + \lambda \| Lx \|_2^2 \f$ * - \f$\argmin_x \frac{1}{2} \| Ax - b \|_2^2 + \lambda \| L(x - x^*) \|_2^2 \f$, * where \f$A \f$ is a linear operator and \f$b \f$ and \f$x^* \f$ are data vectors, * \f$\lambda \f$ is the regularization weight, and \f$L \f$ is a discretized differential * operator. * * This class supports a wider range of problems - any problem of the form * \f$\argmin_x \frac{1}{2} \| Ax - b \|_{W,2}^2 + \sum_{i=1}^n \lambda_i \| B_ix - x^*_i * \|_{V_i,2}^2 \f$ is considered a Tikhonov problem. Here \f$A \f$ and \f$B_i \f$ are linear * operators, \f$b \f$ and \f$x^*_i \f$ are data vectors, \f$\lambda_i \f$ are the * regularization weights, and \f$W \f$ and \f$V_i \f$ are scaling operators. */ template class TikhonovProblem : public Problem { public:  David Frank committed Jan 07, 2022 34 35 36 37 38 39 40 41 42 43 44  /** * @brief Construct a Tikhonov problem of the form * \f$\argmin_x \frac{1}{2} \| Ax - b \|_2^2 + \lambda \| x \|_2^2 \f$ * * @param[in] A a linear operator * @param[in] b a data vector * @param[in] lambda regularization weight */ TikhonovProblem(const LinearOperator& A, const DataContainer b, real_t lambda = 0.5f);  45  /**  David Frank committed Apr 16, 2021 46  * @brief Constructor for a Tikhonov problem  47  *  David Frank committed Apr 16, 2021 48 49  * @param[in] wlsProblem a wls problem specifying the data term and the initial solution * @param[in] regTerms the regularization terms, all should be of type L2NormPow2 or  50 51 52 53 54 55  * WeightedL2NormPow2 */ TikhonovProblem(const WLSProblem& wlsProblem, const std::vector>& regTerms); /**  David Frank committed Apr 16, 2021 56  * @brief Constructor for a Tikhonov problem  57  *  David Frank committed Apr 16, 2021 58 59  * @param[in] wlsProblem a wls problem specifying the data term and the initial solution * @param[in] regTerm the regularization term, should be of type L2NormPow2 or  60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79  * WeightedL2NormPow2 */ TikhonovProblem(const WLSProblem& wlsProblem, const RegularizationTerm& regTerm); /// default destructor ~TikhonovProblem() override = default; protected: /// default copy constructor, hidden from non-derived classes to prevent potential slicing TikhonovProblem(const TikhonovProblem&) = default; /// implement the polymorphic clone operation TikhonovProblem* cloneImpl() const override; private: /// lift from base class using Problem::_regTerms; }; } // namespace elsa