SOPT
Sparse OPTimisation
Public Types | Public Member Functions | List of all members
sopt::ScalarRelativeVariation< TYPE > Class Template Reference

#include <relative_variation.h>

Public Types

using Scalar = TYPE
 Underlying scalar type. More...
 
using Real = typename real_type< Scalar >::type
 Underlying scalar type. More...
 

Public Member Functions

 ScalarRelativeVariation (Real relative_tolerance=1e-12, Real absolute_tolerance=1e-12, std::string const &name="")
 Maximum variation from one step to the next. More...
 
 ScalarRelativeVariation (ScalarRelativeVariation const &c)
 Copy constructor. More...
 
bool operator() (Scalar const &current)
 True if object has changed by less than tolerance. More...
 
Real relative_tolerance () const
 Allowed variation. More...
 
RelativeVariation< Scalar > & relative_tolerance (Real &e)
 Allowed variation. More...
 
Real absolute_tolerance () const
 Allowed variation. More...
 
RelativeVariation< Scalar > & absolute_tolerance (Real &e)
 Allowed variation. More...
 
std::string const & name () const
 Name that gets interpolated into the log's output. More...
 
ScalarRelativeVariation const & name (std::string const &name)
 
Scalar previous () const
 

Detailed Description

template<typename TYPE>
class sopt::ScalarRelativeVariation< TYPE >

Definition at line 55 of file relative_variation.h.

Member Typedef Documentation

◆ Real

template<typename TYPE >
using sopt::ScalarRelativeVariation< TYPE >::Real = typename real_type<Scalar>::type

Underlying scalar type.

Definition at line 60 of file relative_variation.h.

◆ Scalar

template<typename TYPE >
using sopt::ScalarRelativeVariation< TYPE >::Scalar = TYPE

Underlying scalar type.

Definition at line 58 of file relative_variation.h.

Constructor & Destructor Documentation

◆ ScalarRelativeVariation() [1/2]

template<typename TYPE >
sopt::ScalarRelativeVariation< TYPE >::ScalarRelativeVariation ( Real  relative_tolerance = 1e-12,
Real  absolute_tolerance = 1e-12,
std::string const &  name = "" 
)
inline

Maximum variation from one step to the next.

Definition at line 62 of file relative_variation.h.

64  : name_(name),
65  relative_tolerance_(relative_tolerance),
66  absolute_tolerance_(absolute_tolerance),
67  previous_(0),
68  is_first_(true){};
Real relative_tolerance() const
Allowed variation.
Real absolute_tolerance() const
Allowed variation.
std::string const & name() const
Name that gets interpolated into the log's output.

◆ ScalarRelativeVariation() [2/2]

template<typename TYPE >
sopt::ScalarRelativeVariation< TYPE >::ScalarRelativeVariation ( ScalarRelativeVariation< TYPE > const &  c)
inline

Copy constructor.

Definition at line 70 of file relative_variation.h.

71  : relative_tolerance_(c.relative_tolerance_),
72  previous_(c.previous_),
73  is_first_(c.is_first_){};

Member Function Documentation

◆ absolute_tolerance() [1/2]

template<typename TYPE >
Real sopt::ScalarRelativeVariation< TYPE >::absolute_tolerance ( ) const
inline

Allowed variation.

Definition at line 86 of file relative_variation.h.

86 { return relative_tolerance_; }

◆ absolute_tolerance() [2/2]

template<typename TYPE >
RelativeVariation<Scalar>& sopt::ScalarRelativeVariation< TYPE >::absolute_tolerance ( Real e)
inline

Allowed variation.

Definition at line 88 of file relative_variation.h.

88  {
89  absolute_tolerance_ = e;
90  return *this;
91  }

◆ name() [1/2]

template<typename TYPE >
std::string const& sopt::ScalarRelativeVariation< TYPE >::name ( ) const
inline

Name that gets interpolated into the log's output.

Definition at line 94 of file relative_variation.h.

94 { return name_; }

Referenced by sopt::ScalarRelativeVariation< TYPE >::name().

◆ name() [2/2]

template<typename TYPE >
ScalarRelativeVariation const& sopt::ScalarRelativeVariation< TYPE >::name ( std::string const &  name)
inline

Definition at line 95 of file relative_variation.h.

95  {
96  name_ = name;
97  return *this;
98  }

References sopt::ScalarRelativeVariation< TYPE >::name().

◆ operator()()

template<typename SCALAR >
bool sopt::ScalarRelativeVariation< SCALAR >::operator() ( Scalar const &  current)

True if object has changed by less than tolerance.

Definition at line 124 of file relative_variation.h.

124  {
125  if (is_first_) {
126  previous_ = current;
127  is_first_ = false;
128  return false;
129  }
130  auto const average = (std::abs(previous_) + std::abs(current)) * 0.5;
131  auto const diff = std::abs(previous_ - current);
132  auto const result =
133  diff <= relative_tolerance() * std::abs(average) or std::abs(diff) < absolute_tolerance();
134  SOPT_LOW_LOG(" - {} relative variation: {} < {} * {} or {} < {} is {}", name(), diff,
136  result ? "true" : "false");
137  previous_ = current;
138  return result;
139 }
#define SOPT_LOW_LOG(...)
Low priority message.
Definition: logging.h:227
Vector< T > diff(const Vector< T > &x)
Numerical derivative of 1d vector.

References sopt::gradient_operator::diff(), and SOPT_LOW_LOG.

◆ previous()

template<typename TYPE >
Scalar sopt::ScalarRelativeVariation< TYPE >::previous ( ) const
inline

Definition at line 100 of file relative_variation.h.

100 { return previous_; }

◆ relative_tolerance() [1/2]

template<typename TYPE >
Real sopt::ScalarRelativeVariation< TYPE >::relative_tolerance ( ) const
inline

Allowed variation.

Definition at line 79 of file relative_variation.h.

79 { return relative_tolerance_; }

Referenced by TEST_CASE().

◆ relative_tolerance() [2/2]

template<typename TYPE >
RelativeVariation<Scalar>& sopt::ScalarRelativeVariation< TYPE >::relative_tolerance ( Real e)
inline

Allowed variation.

Definition at line 81 of file relative_variation.h.

81  {
82  relative_tolerance_ = e;
83  return *this;
84  }

The documentation for this class was generated from the following file: