Logo MTL4
Public Member Functions | Public Attributes
math::InnerProduct< I, Vector, Scalar > Struct Template Reference

Concept InnerProduct. More...

#include <vector_concepts.hpp>

Inheritance diagram for math::InnerProduct< I, Vector, Scalar >:
Inheritance graph
[legend]
Collaboration diagram for math::InnerProduct< I, Vector, Scalar >:
Collaboration graph
[legend]

List of all members.

Public Member Functions

axiom ConjugateSymmetry (I inner, Vector v, Vector w)
 The arguments can be changed and the result is then the complex conjugate.
axiom SequiLinearity (I inner, Scalar a, Scalar b, Vector u, Vector v, Vector w)
 The inner product is linear in the second argument and conjugate linear in the first one.
axiom NonNegativity (I inner, Vector v, MagnitudeType< Scalar >::type magnitude)
 The inner product of a vector with itself is not negative.
axiom NonDegeneracy (I inner, Vector v, Vector w, Scalar s)
 Non-degeneracy not representable with axiom.

Public Attributes

associated_type magnitude_type
 Associated type: the real magnitude type of the scalar.

Detailed Description

template<typename I, typename Vector, typename Scalar = typename Vector::value_type>
struct math::InnerProduct< I, Vector, Scalar >

Concept InnerProduct.

Semantic requirements of a inner product

Parameters:
IThe inner product functor
VectorThe the type of a vector or a collection
ScalarThe scalar over which the vector field is defined
Refinement of:
  • std::Callable2 <I, Vector, Vector>
Associated types:
  • magnitude_type
Requires:
  • std::Convertible<std::Callable2 <I, Vector, Vector>::result_type, Scalar> ; result of inner product convertible to scalar to be used in expressions
  • HasConjugate < Scalar >
  • RealMagnitude < Scalar > ; the scalar value needs a real magnitude type

Member Function Documentation

template<typename I , typename Vector , typename Scalar = typename Vector::value_type>
axiom math::InnerProduct< I, Vector, Scalar >::ConjugateSymmetry ( inner,
Vector  v,
Vector  w 
) [inline]

The arguments can be changed and the result is then the complex conjugate.

inner(v, w) == conj(inner(w, v));

template<typename I , typename Vector , typename Scalar = typename Vector::value_type>
axiom math::InnerProduct< I, Vector, Scalar >::NonDegeneracy ( inner,
Vector  v,
Vector  w,
Scalar  s 
) [inline]

Non-degeneracy not representable with axiom.

$\langle v, w\rangle = 0 \forall w \Leftrightarrow v = \vec{0}$

template<typename I , typename Vector , typename Scalar = typename Vector::value_type>
axiom math::InnerProduct< I, Vector, Scalar >::NonNegativity ( inner,
Vector  v,
MagnitudeType< Scalar >::type  magnitude 
) [inline]

The inner product of a vector with itself is not negative.

inner(v, v) == conj(inner(v, v)) implies inner(v, v) is representable as real

magnitude_type(inner(v, v)) >= zero(magnitude);

template<typename I , typename Vector , typename Scalar = typename Vector::value_type>
axiom math::InnerProduct< I, Vector, Scalar >::SequiLinearity ( inner,
Scalar  a,
Scalar  b,
Vector  u,
Vector  v,
Vector  w 
) [inline]

The inner product is linear in the second argument and conjugate linear in the first one.

The equalities are partly redundant with ConjugateSymmetry

inner(v, b * w) == b * inner(v, w);

inner(u, v + w) == inner(u, v) + inner(u, w);

inner(a * v, w) == conj(a) * inner(v, w);

inner(u + v, w) == inner(u, w) + inner(v, w);


Member Data Documentation

template<typename I , typename Vector , typename Scalar = typename Vector::value_type>
associated_type math::InnerProduct< I, Vector, Scalar >::magnitude_type

Associated type: the real magnitude type of the scalar.

By default RealMagnitude<Scalar>::type


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


math::InnerProduct< I, Vector, Scalar > Struct Template Reference -- MTL 4 -- Peter Gottschling and Andrew Lumsdaine -- Gen. with rev. 7542 on Sat Aug 11 2012 by doxygen 1.7.6.1 -- © 2010 by SimuNova UG.