8#if EIGEN_VERSION_AT_LEAST(3, 4, 1) 
   10using DefaultSVD = Eigen::BDCSVD<
typename Conf::mat,
 
   11                                 Eigen::ComputeThinU | Eigen::ComputeThinV>;
 
   19template <Config Conf, 
class SVD = DefaultSVD<Conf>>
 
   25        if (
λ < 0 || !std::isfinite(
λ))
 
   26            throw std::invalid_argument(
"NuclearNorm::λ must be nonnegative");
 
 
   37        if (
λ < 0 || !std::isfinite(
λ))
 
   38            throw std::invalid_argument(
"NuclearNorm::λ must be nonnegative");
 
 
   54#if EIGEN_VERSION_AT_LEAST(3, 4, 1) 
   57            svd.compute(
in, Eigen::ComputeThinU | Eigen::ComputeThinV);
 
   62#if EIGEN_VERSION_AT_LEAST(3, 4, 1) 
   66                        Eigen::ComputeThinU | Eigen::ComputeThinV);
 
   70        auto step        = vec::Constant(n, 
λ * γ);
 
   76        using Eigen::placeholders::all, Eigen::seqN;
 
   78        auto &&U = 
svd.matrixU(), &&
V = 
svd.matrixV();
 
 
   88        return self.
prox(std::move(
in), std::move(out), γ);
 
 
 
#define USING_ALPAQA_CONFIG(Conf)
 
Eigen::BDCSVD< typename Conf::mat > DefaultSVD
 
auto norm_1(const Eigen::MatrixBase< Derived > &v)
Get the 1-norm of the given vector.
 
std::decay_t< decltype(Tag)> tag_t
 
typename Conf::crmat crmat
 
typename Conf::real_t real_t
 
typename Conf::index_t index_t
 
typename Conf::length_t length_t
 
Nuclear norm (ℓ₁-norm of singular values).
 
real_t prox(crmat in, rmat out, real_t γ=1)
 
NuclearNorm(real_t λ=1)
Construct without pre-allocation.
 
NuclearNorm(real_t λ, length_t rows, length_t cols)
Construct with pre-allocation.
 
friend real_t alpaqa_tag_invoke(tag_t< alpaqa::prox >, NuclearNorm &self, crmat in, rmat out, real_t γ)