Logo MTL4

math::InnerProduct< I, Vector, Scalar > Struct Template Reference
[Concepts]

Concept InnerProduct. More...

#include <vector_concepts.hpp>

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:
I The inner product functor
Vector The the type of a vector or a collection
Scalar The 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 -- Generated on 24 Aug 2009 by Doxygen 1.5.9 -- Copyright 2008-09 by TU Dresden and the Trustees of Indiana University.