(T)` | The p-th power of an expression. | | `sqrt(T)` | The square-root of an expression | | `exp(T)` | The exponential function applied to the evaluated expression | | `log(T)` | The natural logarithm applied to an evaluated expression. | | `cos(T), sin(T), tan(T)` | Cosine, sine, and tangens applied to an evaluated expression. | | `acos(T), asin(T), atan(T)` | Arccosine, Arcsine, and arctangent applied to an evaluated expression | | `atan2(T1, T2)` | The atan2 function, i.e. arctan(T1 / T2). | | `cosh(T), sinh(T), tanh(T)` | Hyperbolic cosine, hyperbolic sine, and hyperbolic tangent. | | `acosh(T), asinh(T), atanh(T)` | Inverse hyperbolic functions applied to an evaluated expression. | | `max(T1, T2), min(T1, T2)` | The maximum/minimum of two evaluated expressions T1 and T2. | | `abs_(T), signum(T)` | The absolute value and the sign (`T < 0 => signum(T) := -1, T>0 => signum(T) := 1, T==0 => signum(T) := 0`) | | `clamp(T, lo, hi)` | Applies the `std::clamp` function locally to the evaluated expression `T`, where `lo` and `hi` are fixed values. | | `ceil(T), floor(T)` | Round down or up the evaluated expression. | | `function_(F, T1, T2, T3, ...)` | Apply a functor to the evaluated expressions `T1,T2,...` | A functor is a class with the following structure: ```c++ struct Functor : public FunctorBase { typedef (...) value_type; int getDegree(int d1, int d2, ...) const { return (...); } value_type operator()(const T1::value_type&, const T2::value_type&, ...) const { return (...); } }; ``` or any valid function object in c++. When it is derived from `FunctorBase` one can specify an polynomial degree of the functor, relative to the polynomial degrees of the arguments passed to the functor, i.e. the polynomial degrees of the passed expressions. The `getDegree()` functor is then evaluated in the following form: ```c++ getDegree(T1.getDegree(), T2.getDegree(), ...) ``` ### Vektor-/Matrix-Expressions For vector- and matrix-valued expressions, like, e.g., `gradientOf(DV)` one can apply functions that act on the vectors/matrices on evaluation. In the following list, the notation `V` refers to a vector expressions and `M` to a matrix expression: | Expression | Semantics | | ---------- | --------- | | `+, -` | Arithmetic operations (elementwise) | | `unary_dot(V)` | Scalarprodukt (dorproduct) of a vector with itself: `result = V^H * V`. | | `dot(V1, V2)` | Scalarprodukt (dorproduct) of two vectors: `result = V1^H * V2`. | | `one_norm(V)` | The 1-norm of a vectors `result = sum_i(abs(V_i))`. | | `one_norm(M)` | The 1-norm of a matrix `result = max_j(sum_i(abs(M_ij)))`. | | `two_norm(V)` | The 2-norm of a vector `result = sqrt(V^H * V)`. | | `p_norm

(V)` | The p-norm of a vector `result = [sum_i(abs(v_i)^p)]^(1/p)`. | | `cross(V1, V2)` | Crossproduct of two vectors: `result = V1 x V2`. | | `diagonal(V)` | Diagonal matrix with diagonal entries of the passed vector: `matrix = diagonal(V)`. | | `outer(V1, V2)` | Outer product (dyadic product / tensorproduct) of two vectors: `matrix = V1 * V2^T`. | | `trans(M)` | The transposed matrix: `result = M^T`. | | `at(V, i)` | Access a component of a vector: `result = V_i`. | | `at(M, i, j)` | Access a component of a matrix: `result = M_ij`. |