adjoint_specific< false > Struct Reference

Static Public Member Functions

template<typename Vec , typename Mat , typename Scalar >
static void run (const Vec &v1, const Vec &v2, Vec &v3, const Mat &square, Scalar s1, Scalar s2)
 

Member Function Documentation

◆ run()

template<typename Vec , typename Mat , typename Scalar >
static void adjoint_specific< false >::run ( const Vec v1,
const Vec v2,
Vec v3,
const Mat square,
Scalar  s1,
Scalar  s2 
)
inlinestatic
31  {
32  typedef typename NumTraits<Scalar>::Real RealScalar;
33  using std::abs;
34 
35  RealScalar ref = NumTraits<Scalar>::IsInteger ? RealScalar(0) : (std::max)((s1 * v1 + s2 * v2).norm(), v3.norm());
36  VERIFY(test_isApproxWithRef((s1 * v1 + s2 * v2).dot(v3),
37  numext::conj(s1) * v1.dot(v3) + numext::conj(s2) * v2.dot(v3), ref));
38  VERIFY(test_isApproxWithRef(v3.dot(s1 * v1 + s2 * v2), s1 * v3.dot(v1) + s2 * v3.dot(v2), ref));
39 
40  VERIFY_IS_APPROX(v1.squaredNorm(), v1.norm() * v1.norm());
41  // check normalized() and normalize()
42  VERIFY_IS_APPROX(v1, v1.norm() * v1.normalized());
43  v3 = v1;
44  v3.normalize();
45  VERIFY_IS_APPROX(v1, v1.norm() * v3);
46  VERIFY_IS_APPROX(v3, v1.normalized());
47  VERIFY_IS_APPROX(v3.norm(), RealScalar(1));
48 
49  // check null inputs
50  VERIFY_IS_APPROX((v1 * 0).normalized(), (v1 * 0));
51 #if (!EIGEN_ARCH_i386) || defined(EIGEN_VECTORIZE)
53  VERIFY(numext::is_exactly_zero((v1 * very_small).norm()));
54  VERIFY_IS_APPROX((v1 * very_small).normalized(), (v1 * very_small));
55  v3 = v1 * very_small;
56  v3.normalize();
57  VERIFY_IS_APPROX(v3, (v1 * very_small));
58 #endif
59 
60  // check compatibility of dot and adjoint
62  : (std::max)((std::max)(v1.norm(), v2.norm()),
63  (std::max)((square * v2).norm(), (square.adjoint() * v1).norm()));
64  VERIFY(internal::isMuchSmallerThan(abs(v1.dot(square * v2) - (square.adjoint() * v1).dot(v2)), ref,
65  test_precision<Scalar>()));
66 
67  // check that Random().normalized() works: tricky as the random xpr must be evaluated by
68  // normalized() in order to produce a consistent result.
69  VERIFY_IS_APPROX(Vec::Random(v1.size()).normalized().norm(), RealScalar(1));
70  }
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
AnnoyingScalar conj(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:133
Map< RowVectorXf > v2(M2.data(), M2.size())
M1<< 1, 2, 3, 4, 5, 6, 7, 8, 9;Map< RowVectorXf > v1(M1.data(), M1.size())
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:46
#define min(a, b)
Definition: datatypes.h:22
#define max(a, b)
Definition: datatypes.h:23
#define VERIFY_IS_APPROX(a, b)
Definition: integer_types.cpp:13
Scalar EIGEN_BLAS_FUNC_NAME() dot(int *n, Scalar *px, int *incx, Scalar *py, int *incy)
Definition: level1_real_impl.h:52
#define VERIFY(a)
Definition: main.h:362
EIGEN_DEVICE_FUNC bool isMuchSmallerThan(const Scalar &x, const OtherScalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
Definition: MathFunctions.h:1916
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool is_exactly_zero(const X &x)
Definition: Meta.h:592
squared absolute sa ArrayBase::abs2 DOXCOMMA MatrixBase::cwiseAbs2 square(power 2)
bool test_isApproxWithRef(const Scalar &a, const Scalar &b, const ScalarRef &ref)
Definition: main.h:642
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217

References abs(), conj(), dot(), Eigen::numext::is_exactly_zero(), Eigen::internal::isMuchSmallerThan(), max, min, Eigen::square(), Eigen::test_isApproxWithRef(), v1(), v2(), VERIFY, and VERIFY_IS_APPROX.


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