10 Eigen::ComputeThinU | Eigen::ComputeThinV>;
14template <Config Conf,
class SVD = DefaultSVD<Conf>>
20 if (
λ < 0 || !std::isfinite(
λ))
21 throw std::invalid_argument(
"NuclearNorm::λ must be nonnegative");
27 if (
λ < 0 || !std::isfinite(
λ))
28 throw std::invalid_argument(
"NuclearNorm::λ must be nonnegative");
51 auto step = vec::Constant(n,
λ * γ);
56 using Eigen::placeholders::all, Eigen::seqN;
58 auto &&U =
svd.matrixU(), &&
V =
svd.matrixV();
68 return self.
prox(std::move(
in), std::move(
out), γ);
#define USING_ALPAQA_CONFIG(Conf)
Eigen::BDCSVD< typename Conf::mat, Eigen::ComputeThinU|Eigen::ComputeThinV > DefaultSVD
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 γ)