|
| int | abs (int a) |
| |
| long | abs (long a) |
| |
| long long | abs (long long a) |
| |
| float | abs (float a) |
| |
| double | abs (double a) |
| |
| long double | abs (long double a) |
| |
| template<class T > |
| T | abs (std::complex< T > a) |
| |
| template<class Arg , typename = typename std::enable_if<IsSymbolic<Arg>::value>::type> |
| auto | abs (const Arg &arg) -> STATOR_AUTORETURN((UnaryOp< decltype(store(arg)), detail::Absolute >(arg))) |
| |
| template<std::intmax_t num, std::intmax_t den> |
| constexpr C<(1 - 2 *(num< 0)) *num,(1 - 2 *(den< 0)) *den > | abs (const C< num, den > &a) |
| |
| template<class Arg > |
| auto | arbsign (const Arg &arg) -> STATOR_AUTORETURN((UnaryOp< decltype(store(arg)), detail::Arbsign >(arg))) |
| |
| f _l _r | C< 1 > ())) |
| |
| template<size_t NewOrder, size_t Order, class Coeff_t , class PolyVar > |
| Polynomial< NewOrder, Coeff_t, PolyVar > | change_order (const Polynomial< Order, Coeff_t, PolyVar > &f) |
| | Change the order of a Polynomial. More...
|
| |
| float | cos (float a) |
| |
| double | cos (double a) |
| |
| long double | cos (long double a) |
| |
| template<class T > |
| std::complex< T > | cos (std::complex< T > a) |
| |
| template<class Arg , typename = typename std::enable_if<IsSymbolic<Arg>::value>::type> |
| auto | cos (const Arg &arg) -> STATOR_AUTORETURN((UnaryOp< decltype(store(arg)), detail::Cosine >(arg))) |
| |
| template<std::intmax_t num, std::intmax_t den> |
| auto | cos (const C< num, den > &a) -> STATOR_AUTORETURN(cos_Cimpl(a, detail::select_overload |
| |
| template<std::intmax_t num, std::intmax_t den, typename = typename std::enable_if<is_whole_factor<std::ratio<num, den>, pi>::value>::type> |
| constexpr Unity | cos_Cimpl (const C< num, den > &a, detail::choice< 0 >) |
| |
| template<std::intmax_t num, std::intmax_t den, typename = typename std::enable_if<is_whole_factor<std::ratio<num, den>, pi, decltype(pi() / C<2>())>::value>::type> |
| constexpr Null | cos_Cimpl (const C< num, den > &a, detail::choice< 0 >) |
| |
| template<typename Expression > |
| auto | derivative (const Expression &) |
| | Performs a symbolic derivative on the expression. More...
|
| |
| template<class Var , class Arg > |
| auto | derivative (const UnaryOp< Arg, detail::Sine > &f, Var x) -> STATOR_AUTORETURN(derivative(f._arg, x) *sym::cos(f._arg)) |
| |
| template<class Var , class Arg > |
| auto | derivative (const UnaryOp< Arg, detail::Cosine > &f, Var x) -> STATOR_AUTORETURN(-derivative(f._arg, x) *sym::sin(f._arg)) |
| |
| template<class Var , class Arg > |
| auto | derivative (const UnaryOp< Arg, detail::Exp > &f, Var x) -> STATOR_AUTORETURN(derivative(f._arg, x) *f) |
| |
| template<class Var , class Arg > |
| auto | derivative (const UnaryOp< Arg, detail::Log > &f, Var x) -> STATOR_AUTORETURN(derivative(f._arg, x)/f._arg) |
| |
| template<class Var , class Arg > |
| auto | derivative (const UnaryOp< Arg, detail::Absolute > &f, Var x) -> STATOR_AUTORETURN(derivative(f._arg, x) *sym::abs(f._arg)/f._arg) |
| |
| template<class Var , class Arg > |
| auto | derivative (const UnaryOp< Arg, detail::Arbsign > &f, Var x) -> STATOR_AUTORETURN(derivative(f._arg, x) *sym::arbsign(Unity())) |
| |
| template<class T , class ... Args, typename = typename std::enable_if<detail::IsConstant<T>::value>::type> |
| Null | derivative (const T &, Var< Args... >) |
| | Determine the derivative of a symbolic expression. More...
|
| |
| template<class ... Args1, class ... Args2, typename = typename std::enable_if<!std::is_base_of<Dynamic, Var<Args1...> >::value && !std::is_base_of<Dynamic, Var<Args2...> >::value>::type> |
| auto | derivative (Var< Args1... >, Var< Args2... >) -> typename std::enable_if< Var< Args1... >::idx==Var< Args2... >::idx, Unity >::type |
| | Determine the derivative of a variable. More...
|
| |
| template<class ... Args1, class ... Args2, typename = typename std::enable_if<std::is_base_of<Dynamic, Var<Args1...> >::value || std::is_base_of<Dynamic, Var<Args2...> >::value>::type> |
| Expr | derivative (Var< Args1... > v1, Var< Args2... > v2) |
| | Determine the derivative of a variable by another variable. More...
|
| |
| template<class Var > |
| Expr | derivative (const Expr &f, const Var v) |
| |
| template<class T , typename = typename std::enable_if<std::is_arithmetic<T>::value>::type> |
| T | empty_sum (const T &) |
| | Returns the empty sum of a type. More...
|
| |
| template<class T , typename = typename std::enable_if<std::is_base_of<Eigen::EigenBase<T>, T>::value>::type> |
| auto | empty_sum (const T &) -> STATOR_AUTORETURN_BYVALUE(T::Zero()) |
| | Returns the empty sum of a type. More...
|
| |
| template<class T > |
| T | empty_sum (const std::complex< T > &) |
| |
| float | exp (float a) |
| |
| double | exp (double a) |
| |
| long double | exp (long double a) |
| |
| template<class T > |
| std::complex< T > | exp (std::complex< T > a) |
| |
| template<class Arg , typename = typename std::enable_if<IsSymbolic<Arg>::value>::type> |
| auto | exp (const Arg &arg) -> STATOR_AUTORETURN((UnaryOp< decltype(store(arg)), detail::Exp >(arg))) |
| |
| template<class T > |
| auto | expand (const T &a) -> STATOR_AUTORETURN(simplify< ExpandConfig >(a)) |
| | A variant of simplify that expands into Polynomial types aggressively. More...
|
| |
| template<class Var > |
| double | fast_sub (const Expr &f, const Relation< Var, double > &rel) |
| |
| template<class T , class Var > |
| auto | integrate (const T &a, Var) -> typename std::enable_if< std::is_same< decltype(store(derivative(a, Var()))), Null >::value, decltype(store(a *Var()))>::type |
| | Integration of any constant/independent expression. More...
|
| |
| template<class ... VarArgs, class LHS , class RHS > |
| auto | integrate (const AddOp< LHS, RHS > &a, Var< VarArgs... > x) -> STATOR_AUTORETURN(integrate(a._l, x)+integrate(a._r, x)) |
| | Distributive integration over addition. More...
|
| |
| template<class ... VarArgs1, class ... VarArgs2, typename = typename enable_if_var_in<Var<VarArgs1...>, Var<VarArgs2...> >::type> |
| auto | integrate (Var< VarArgs1... >, Var< VarArgs2... >) -> STATOR_AUTORETURN((C< 1, 2 >() *pow< 2 >(typename variable_combine< Var< VarArgs1... >, Var< VarArgs2... > >::type()))) |
| | Integration of $x$ by $x$. More...
|
| |
| template<class ... VarArgs1, class ... VarArgs2, std::intmax_t Power, typename = typename enable_if_var_in<Var<VarArgs1...>, Var<VarArgs2...> >::type> |
| auto | integrate (const PowerOp< Var< VarArgs1... >, C< Power > > &a, Var< VarArgs2... >) -> STATOR_AUTORETURN((C< 1, Power+1 >() *pow(typename variable_combine< Var< VarArgs1... >, Var< VarArgs2... > >::type(), C< Power+1 >()))) |
| | Integration of $x^n$ by $x$. More...
|
| |
| template<class T > |
| constexpr std::enable_if< detail::IsConstant< T >::value, bool >::type | is_constant (const T &) |
| |
| template<class T > |
| constexpr std::enable_if<!detail::IsConstant< T >::value, bool >::type | is_constant (const T &) |
| |
| bool | is_constant (const Expr &a) |
| |
| float | log (float a) |
| |
| double | log (double a) |
| |
| long double | log (long double a) |
| |
| template<class T > |
| std::complex< T > | log (std::complex< T > a) |
| |
| template<class Arg , typename = typename std::enable_if<IsSymbolic<Arg>::value>::type> |
| auto | log (const Arg &arg) -> STATOR_AUTORETURN((UnaryOp< decltype(store(arg)), detail::Log >(arg))) |
| |
| template<class T > |
| auto | N (const T &a) -> STATOR_AUTORETURN(simplify< NConfig >(a)) |
| | A variant of simplify that converts compile time symbols into numbers. More...
|
| |
| template<std::intmax_t n1, std::intmax_t d1, std::intmax_t n2, std::intmax_t d2> |
| constexpr auto | operator* (C< n1, d1 >, C< n2, d2 >) -> STATOR_AUTORETURN((typename detail::C_wrap< std::ratio_multiply< std::ratio< n1, d1 >, std::ratio< n2, d2 > > >::type())) |
| |
| template<class T , typename = typename std::enable_if<!is_C<T>::value>::type> |
| Null | operator* (const T &, Null) |
| |
| template<class T , typename = typename std::enable_if<!is_C<T>::value>::type> |
| Null | operator* (Null, const T &) |
| |
| template<class T , typename = typename std::enable_if<!is_C<T>::value>::type> |
| auto | operator* (const T &a, Unity) -> STATOR_AUTORETURN(a) |
| |
| template<class T , typename = typename std::enable_if<!is_C<T>::value>::type> |
| auto | operator* (Unity, const T &a) -> STATOR_AUTORETURN(a) |
| |
| template<std::intmax_t n1, std::intmax_t d1, std::intmax_t n2, std::intmax_t d2> |
| constexpr auto | operator+ (C< n1, d1 >, C< n2, d2 >) -> STATOR_AUTORETURN((typename detail::C_wrap< std::ratio_add< std::ratio< n1, d1 >, std::ratio< n2, d2 > > >::type())) |
| |
| template<class T , typename = typename std::enable_if<!is_C<T>::value>::type> |
| T | operator+ (const T &l, Null) |
| |
| template<class T , typename = typename std::enable_if<!is_C<T>::value>::type> |
| T | operator+ (Null, const T &r) |
| |
| template<std::intmax_t n1, std::intmax_t d1, std::intmax_t n2, std::intmax_t d2> |
| constexpr auto | operator- (C< n1, d1 >, C< n2, d2 >) -> STATOR_AUTORETURN((typename detail::C_wrap< std::ratio_subtract< std::ratio< n1, d1 >, std::ratio< n2, d2 > > >::type())) |
| |
| template<class T , typename = typename std::enable_if<!is_C<T>::value>::type> |
| T | operator- (const T &l, Null) |
| |
| template<class T , typename = typename std::enable_if<!is_C<T>::value>::type> |
| auto | operator- (Null, const T &r) -> STATOR_AUTORETURN(-r) |
| |
| template<std::intmax_t n1, std::intmax_t d1, std::intmax_t n2, std::intmax_t d2> |
| constexpr auto | operator/ (C< n1, d1 >, C< n2, d2 >) -> STATOR_AUTORETURN((typename detail::C_wrap< std::ratio_divide< std::ratio< n1, d1 >, std::ratio< n2, d2 > > >::type())) |
| |
| template<std::intmax_t Num, std::intmax_t Denom> |
| std::ostream & | operator<< (std::ostream &os, const C< Num, Denom >) |
| | Output operator for compile-time constant (C types). More...
|
| |
| std::ostream & | operator<< (std::ostream &os, const C< 1, 4 >) |
| | Output operator specialised for one quarter. More...
|
| |
| std::ostream & | operator<< (std::ostream &os, const C< 1, 2 >) |
| | Output operator specialised for one half. More...
|
| |
| std::ostream & | operator<< (std::ostream &os, const C< 3, 4 >) |
| | Output operator specialised for three quarters. More...
|
| |
| std::ostream & | operator<< (std::ostream &os, const pi) |
| | Specialized output operator for . More...
|
| |
| template<class T > |
| std::ostream & | operator<< (std::ostream &os, const std::complex< T > &c) |
| |
| template<class T , typename = typename std::enable_if<sym::IsSymbolic<T>::value>::type> |
| std::ostream & | operator<< (std::ostream &os, const T &v) |
| |
| template<std::intmax_t n1, std::intmax_t d1, std::intmax_t n2, std::intmax_t d2> |
| constexpr bool | operator== (const C< n1, d1 > &, const C< n2, d2 > &) |
| |
| template<class LHS , class RHS , typename = typename std::enable_if<(std::is_arithmetic<LHS>::value && std::is_arithmetic<RHS>::value)>::type> |
| auto | pow (const LHS &l, const RHS &r) -> STATOR_AUTORETURN(std::pow(l, r)) |
| |
| template<class LHS , std::intmax_t num, std::intmax_t den, typename = typename std::enable_if<std::is_arithmetic<LHS>::value>::type> |
| auto | pow (const LHS &l, const C< num, den > &r) -> STATOR_AUTORETURN(std::pow(l, double(r))) |
| |
| template<class LHS , typename = typename std::enable_if<std::is_arithmetic<LHS>::value>::type> |
| auto | pow (const LHS &l, const C< 1, 3 > &r) -> STATOR_AUTORETURN(std::cbrt(l)) |
| |
| template<class LHS , typename = typename std::enable_if<std::is_arithmetic<LHS>::value>::type> |
| auto | pow (const LHS &l, const C< 1, 2 > &r) -> STATOR_AUTORETURN(std::sqrt(l)) |
| |
| template<class LHS , typename = typename std::enable_if<std::is_base_of<Eigen::EigenBase<LHS>, LHS>::value>::type> |
| auto | pow (const LHS &l, const C< 2, 1 > &r) -> STATOR_AUTORETURN_BYVALUE(l.squaredNorm()) |
| |
| template<class LHS > |
| auto | pow (const LHS &l, const C< 1, 1 > &r) -> STATOR_AUTORETURN(l) |
| |
| template<std::intmax_t num1, std::intmax_t den1, std::intmax_t num2> |
| auto | pow (const C< num1, den1 > &l, const C< num2, 1 > &r) -> STATOR_AUTORETURN(PowerOpSub< num2 >::eval(sub(l, num2))) |
| |
| template<class F , class Real , typename = typename std::enable_if<detail::IsConstant<F>::value>::type> |
| double | precision (const F &f, const Real) |
| | Estimate the error in evaluating a function at a given time. More...
|
| |
| template<class F , class Real , typename = typename std::enable_if<detail::IsConstant<F>::value>::type> |
| F | shift_function (const F &f, const Real t) |
| | Shift a function forward. It returns . More...
|
| |
| template<class Config = DefaultSimplifyConfig> |
| void | simplify () |
| | The simplify base implementation. More...
|
| |
| template<class Config = DefaultSimplifyConfig, class Arg , std::intmax_t Power, typename = typename std::enable_if<PowerOpEnableExpansion<Arg>::value>::type> |
| auto | simplify (const PowerOp< Arg, C< Power, 1 > > &f) -> STATOR_AUTORETURN(simplify_powerop_impl< Config >(f, detail::select_overload |
| | Expansion operator for PowerOp types. More...
|
| |
| template<class Config = DefaultSimplifyConfig, class L , class Op , class R > |
| auto | simplify (BinaryOp< L, Op, R > t) -> STATOR_AUTORETURN(simplify_BinaryOp< Config >(t, detail::select_overload |
| |
| template<class Config = DefaultSimplifyConfig, class PolyVar , class ... VarArgs, size_t Order, class Real , typename = typename std::enable_if<(Config::expand_to_Polynomial && variable_in<Var<VarArgs...>, PolyVar>::value)>::type> |
| Polynomial< Order+1, Real, typename variable_combine< PolyVar, Var< VarArgs... > >::type > | simplify (const MultiplyOp< Polynomial< Order, Real, PolyVar >, Var< VarArgs... > > &f) |
| | Simplification of a Polynomial RHS multiplied by a Var. More...
|
| |
| template<class Config = DefaultSimplifyConfig, class ... VarArgs, typename = typename std::enable_if<Config::expand_to_Polynomial>::type> |
| auto | simplify (Var< VarArgs... >) -> STATOR_AUTORETURN((Polynomial< 1, int, Var< VarArgs... > > |
| | Conversion of a Var to a polynomial if polynomial expansion is enabled. More...
|
| |
| template<class Config = DefaultSimplifyConfig, class ... VarArgs, std::intmax_t Power, typename = typename std::enable_if<Config::expand_to_Polynomial>::type> |
| Polynomial< Power, int, Var< VarArgs... > > | simplify (const PowerOp< Var< VarArgs... >, C< Power, 1 > > &) |
| | Conversion of a PowerOp to a Polynomial when Polynomial expansion is enabled. More...
|
| |
| template<class Config , std::intmax_t num, std::intmax_t den, typename = typename std::enable_if<Config::expand_Constants>::type> |
| auto | simplify (const C< num, den > &f) -> STATOR_AUTORETURN(typename Config::expand_Constants_to_t(num)/typename Config::expand_Constants_to_t(den)) |
| |
| template<class Config = DefaultSimplifyConfig, class Real1 , size_t N, class Real2 , size_t M, class PolyVar1 , class PolyVar2 , class Op , typename = typename std::enable_if<std::is_same<Op,detail::Add>::value || std::is_same<Op,detail::Subtract>::value>::type, typename = typename enable_if_var_in<PolyVar1, PolyVar2>::type> |
| auto | simplify (const BinaryOp< Polynomial< N, Real1, PolyVar1 >, Op, Polynomial< M, Real2, PolyVar2 >> &f) -> Polynomial< detail::max_order(M, N), decltype(store(Op::apply(f._l[0], f._r[0]))), typename variable_combine< PolyVar1, PolyVar2 >::type > |
| | Addition operator for two Polynomial types. More...
|
| |
| template<class Config = DefaultSimplifyConfig, class Real1 , class Real2 , size_t M, size_t N, class PolyVar1 , class PolyVar2 , class Op , typename = typename std::enable_if<std::is_same<Op,detail::Multiply>::value>::type> |
| auto | simplify (const BinaryOp< Polynomial< M, Real1, PolyVar1 >, Op, Polynomial< N, Real2, PolyVar2 >> &f) -> Polynomial< M+N, decltype(store(Op::apply(f._l[0], f._r[0]))), typename variable_combine< PolyVar1, PolyVar2 >::type > |
| | Multiplication between two Polynomial types. More...
|
| |
| template<class Config = DefaultSimplifyConfig, class Real1 , class Real2 , size_t M, class PolyVar1 , class PolyVar2 > |
| auto | simplify (const BinaryOp< Polynomial< M, Real1, PolyVar1 >, detail::Divide, Polynomial< 0, Real2, PolyVar2 >> &f) -> Polynomial< M, decltype(store(f._l[0]/f._r[0])), typename variable_combine< PolyVar1, PolyVar2 >::type > |
| | Division between two Polynomial types. More...
|
| |
| template<class Config = DefaultSimplifyConfig, class Arg , class Op > |
| auto | simplify (const UnaryOp< Arg, Op > &f) -> STATOR_AUTORETURN(simplify_UnaryOp< Config >(f, detail::select_overload |
| |
| template<class Config = DefaultSimplifyConfig, class Arg , std::intmax_t Power> |
| auto | simplify (const PowerOp< UnaryOp< Arg, detail::Arbsign >, C< Power, 1 > > &f) -> typename std::enable_if<!(Power % 2), decltype(try_simplify< Config >(pow(f._l._arg, C< Power >())))>::type |
| |
| Expr | simplify (const Expr &f) |
| |
| template<class Config , class LHS , class RHS , class Op > |
| auto | simplify_BinaryOp (const BinaryOp< LHS, Op, RHS > &f, detail::choice< 0 >) -> typename std::enable_if<!std::is_same< decltype(Op::apply(f._l, f._r)), BinaryOp< LHS, Op, RHS > >::value, decltype(Op::apply(f._l, f._r))>::type |
| |
| template<class Config , class LHS , class RHS , class Op , typename = typename std::enable_if<std::is_same<RHS, typename Op::right_zero>::value >::type> |
| Op::right_zero | simplify_BinaryOp (const BinaryOp< LHS, Op, RHS > &, detail::choice< 0 >) |
| |
| template<class Config , class LHS , class RHS , class Op , typename = typename std::enable_if<std::is_same<LHS, typename Op::left_zero>::value && !std::is_same<RHS, typename Op::right_zero>::value>::type> |
| Op::left_zero | simplify_BinaryOp (const BinaryOp< LHS, Op, RHS > &, detail::choice< 0 >) |
| |
| template<class Config , class LHS , class Op > |
| auto | simplify_BinaryOp (const BinaryOp< LHS, Op, typename Op::right_identity > &op, detail::choice< 0 >) -> STATOR_AUTORETURN(try_simplify< Config >(op._l)) |
| |
| template<class Config , class RHS , class Op , typename = typename std::enable_if<!std::is_same<RHS, typename Op::right_identity>::value>::type> |
| auto | simplify_BinaryOp (const BinaryOp< typename Op::left_identity, Op, RHS > &op, detail::choice< 0 >) -> STATOR_AUTORETURN(try_simplify< Config >(op._r)) |
| |
| template<class Config , class ... VarArgs1, class ... VarArgs2, typename = typename enable_if_var_in<Var<VarArgs1...>, Var<VarArgs2...> >::type> |
| Unity | simplify_BinaryOp (const BinaryOp< Var< VarArgs1... >, detail::Divide, Var< VarArgs2... >> &op, detail::choice< 0 >) |
| |
| template<class Config , class RHS , typename = typename std::enable_if<!std::is_same<RHS, Null>::value>::type> |
| RHS | simplify_BinaryOp (const SubtractOp< Null, RHS > &r, detail::choice< 0 >) |
| |
| template<class Config , class ... VarArgs1, class ... VarArgs2, typename = typename enable_if_var_in<Var<VarArgs1...>, Var<VarArgs2...> >::type> |
| auto | simplify_BinaryOp (const MultiplyOp< Var< VarArgs1... >, Var< VarArgs2... > > &, detail::choice< 0 >) -> STATOR_AUTORETURN(sym::pow(typename variable_combine< Var< VarArgs1... >, Var< VarArgs2... > >::type(), C< 2 >())) |
| |
| template<class Config , class ... VarArgs1, class ... VarArgs2, class Order , typename = typename enable_if_var_in<Var<VarArgs1...>, Var<VarArgs2...> >::type> |
| auto | simplify_BinaryOp (const MultiplyOp< PowerOp< Var< VarArgs1... >, Order >, Var< VarArgs2... > > &f, detail::choice< 0 >) -> STATOR_AUTORETURN(sym::pow(typename variable_combine< Var< VarArgs1... >, Var< VarArgs2... > >::type |
| |
| template<class Config , class ... VarArgs1, class ... VarArgs2, class Order , typename = typename enable_if_var_in<Var<VarArgs1...>, Var<VarArgs2...> >::type> |
| auto | simplify_BinaryOp (const MultiplyOp< Var< VarArgs1... >, PowerOp< Var< VarArgs2... >, Order > > &f, detail::choice< 0 >) -> STATOR_AUTORETURN(sym::pow(typename variable_combine< Var< VarArgs1... >, Var< VarArgs2... > >::type |
| |
| template<class Config , class LHS , class RHS , class Op > |
| auto | simplify_BinaryOp (const BinaryOp< LHS, Op, RHS > &f, detail::choice< 2 >) -> STATOR_AUTORETURN(try_simplify< Config >(Op::apply(simplify< Config >(f._l), simplify< Config >(f._r)))) |
| |
| template<class Config , class LHS , class RHS , class Op > |
| auto | simplify_BinaryOp (const BinaryOp< LHS, Op, RHS > &f, detail::choice< 3 >) -> STATOR_AUTORETURN(try_simplify< Config >(Op::apply(simplify< Config >(f._l), f._r))) |
| |
| template<class Config , class Arg1 , class Arg2 , class Arg3 , class Op , typename = typename std::enable_if<Op::associative>::type> |
| auto | simplify_BinaryOp (const BinaryOp< BinaryOp< Arg1, Op, Arg2 >, Op, Arg3 > &f, detail::choice< 6 >) -> STATOR_AUTORETURN(try_simplify< Config >(Op::apply(f._l._l, simplify< Config >(BinaryOp< Arg2, Op, Arg3 >(f._l._r, f._r))))) |
| |
| template<class Config , class Arg1 , class Arg2 , class Arg3 , class Op , typename = typename std::enable_if<Op::associative>::type> |
| auto | simplify_BinaryOp (const BinaryOp< Arg1, Op, BinaryOp< Arg2, Op, Arg3 > > &f, detail::choice< 6 >) -> STATOR_AUTORETURN(try_simplify< Config >(Op::apply(simplify< Config >(BinaryOp< Arg1, Op, Arg2 >(f._l, f._r._l)), f._r._r))) |
| |
| template<class Config , class Arg1 , class Arg2 , class Arg3 , class Op , typename = typename std::enable_if<Op::associative>::type> |
| auto | simplify_BinaryOp (const BinaryOp< BinaryOp< Arg1, Op, Arg2 >, Op, Arg3 > &f, detail::choice< 7 >) -> STATOR_AUTORETURN(try_simplify< Config >(Op::apply(simplify< Config >(BinaryOp< Arg1, Op, Arg3 >(f._l._l, f._r)), f._l._r))) |
| |
| template<class Config , class Arg1 , class Arg2 , class Arg3 , class Op , typename = typename std::enable_if<Op::associative>::type> |
| auto | simplify_BinaryOp (const BinaryOp< Arg1, Op, BinaryOp< Arg2, Op, Arg3 > > &f, detail::choice< 7 >) -> STATOR_AUTORETURN(try_simplify< Config >(Op::apply(simplify< Config >(BinaryOp< Arg1, Op, Arg3 >(f._l, f._r._r)), f._r._l))) |
| |
| template<class Config , class PolyVar , size_t Order, class Real , class Op , class Real2 , typename = typename std::enable_if<Config::expand_to_Polynomial && detail::IsConstant<Real2>::value>::type> |
| auto | simplify_BinaryOp (const BinaryOp< Polynomial< Order, Real, PolyVar >, Op, Real2 > &f, detail::last_choice) -> STATOR_AUTORETURN(try_simplify< Config >(Op::apply(f._l, Polynomial< 0, decltype(toArithmetic(f._r)), PolyVar > |
| | Simplification of a Polynomial operating with a constant RHS. More...
|
| |
| template<class Config , class PolyVar , size_t Order, class Real , class Op , class Real2 , typename = typename std::enable_if<Config::expand_to_Polynomial && detail::IsConstant<Real2>::value>::type> |
| auto | simplify_BinaryOp (const BinaryOp< Real2, Op, Polynomial< Order, Real, PolyVar >> &f, detail::last_choice) -> STATOR_AUTORETURN(try_simplify< Config >(Op::apply(Polynomial< 0, decltype(toArithmetic(f._l)), PolyVar > |
| | Simplification of a Polynomial operating with a constant LHS. More...
|
| |
| template<class Config = DefaultSimplifyConfig, class Arg1 , class Arg2 , class Op , typename = typename std::enable_if<std::is_same<Op,detail::Multiply>::value || std::is_same<Op,detail::Divide>::value>::type> |
| auto | simplify_BinaryOp (const BinaryOp< UnaryOp< Arg1, detail::Arbsign >, Op, UnaryOp< Arg2, detail::Arbsign > > &f, detail::choice< 4 >) -> STATOR_AUTORETURN(try_simplify< Config >(detail::Arbsign::apply(Op::apply(f._l._arg, f._r._arg)))) |
| |
| template<class Config , class LHS , class Arg , class Op , typename = typename std::enable_if<std::is_same<Op,detail::Multiply>::value || std::is_same<Op,detail::Divide>::value>::type> |
| auto | simplify_BinaryOp (const BinaryOp< LHS, Op, UnaryOp< Arg, detail::Arbsign > > &f, detail::choice< 5 >) -> STATOR_AUTORETURN(try_simplify< Config >(detail::Arbsign::apply(Op::apply(f._l, f._r._arg)))) |
| |
| template<class Config , class RHS , class Arg , class Op , typename = typename std::enable_if<std::is_same<Op,detail::Multiply>::value || std::is_same<Op,detail::Divide>::value>::type> |
| auto | simplify_BinaryOp (const BinaryOp< UnaryOp< Arg, detail::Arbsign >, Op, RHS > &f, detail::choice< 5 >) -> STATOR_AUTORETURN(try_simplify< Config >(detail::Arbsign::apply(Op::apply(f._l._arg, f._r)))) |
| |
| template<class Config , class Arg , std::intmax_t Power> |
| auto | simplify_powerop_impl (const PowerOp< Arg, C< Power, 1 > > &f, detail::choice< 0 >) -> STATOR_AUTORETURN(try_simplify< Config >(PowerOpSub< Power >::eval(simplify< Config >(f._l)))) |
| |
| template<class Config , class Arg , std::intmax_t Power> |
| auto | simplify_powerop_impl (const PowerOp< Arg, C< Power, 1 > > &f, detail::choice< 1 >) -> STATOR_AUTORETURN(simplify< Config >(PowerOpSub< Power >::eval(f._l))) |
| |
| template<class Config , class Arg > |
| auto | simplify_UnaryOp (const UnaryOp< UnaryOp< Arg, detail::Arbsign >, detail::Arbsign > &f, detail::choice< 0 >) -> STATOR_AUTORETURN(try_simplify< Config >(detail::Arbsign::apply(f._arg._arg))) |
| | Specialisation for squares of matrix expressions. More...
|
| |
| template<class Config , class Arg , class Op > |
| auto | simplify_UnaryOp (const UnaryOp< Arg, Op > &f, detail::last_choice) -> STATOR_AUTORETURN(try_simplify< Config >(Op::apply(simplify< Config >(f._arg)))) |
| |
| float | sin (float a) |
| |
| double | sin (double a) |
| |
| long double | sin (long double a) |
| |
| template<class T > |
| std::complex< T > | sin (std::complex< T > a) |
| |
| template<class Arg , typename = typename std::enable_if<IsSymbolic<Arg>::value>::type> |
| auto | sin (const Arg &arg) -> STATOR_AUTORETURN((UnaryOp< decltype(store(arg)), detail::Sine >(arg))) |
| |
| template<std::intmax_t num, std::intmax_t den> |
| auto | sin (const C< num, den > &a) -> STATOR_AUTORETURN(sin_Cimpl(a, detail::select_overload |
| |
| template<std::intmax_t num, std::intmax_t den, typename = typename std::enable_if<is_whole_factor<std::ratio<num, den>, pi>::value>::type> |
| constexpr Null | sin_Cimpl (const C< num, den > &a, detail::choice< 0 >) |
| |
| template<std::intmax_t num, std::intmax_t den, typename = typename std::enable_if<is_whole_factor<std::ratio<num, den>, pi, decltype(pi() / C<2>())>::value>::type> |
| constexpr Unity | sin_Cimpl (const C< num, den > &a, detail::choice< 0 >) |
| |
| StackVector< double, 0 > | solve_real_roots (Null f) |
| |
| template<class LHS , class RHS , class Op , class Var , class Arg > |
| auto | sub (BinaryOp< LHS, Op, RHS > f, Relation< Var, Arg > x) -> STATOR_AUTORETURN_BYVALUE(Op::apply(sub(f._l, x), sub(f._r, x))) |
| |
| template<class Var , class Arg1 , class Arg2 , class Op > |
| auto | sub (const UnaryOp< Arg1, Op > &f, const Relation< Var, Arg2 > &x) -> STATOR_AUTORETURN(Op::apply(sub(f._arg, x))) |
| |
| template<class T , class Var , class Arg , typename = typename std::enable_if<detail::IsConstant<T>::value>::type> |
| auto | sub (const T &f, const Relation< Var, Arg > &) -> STATOR_AUTORETURN_BYVALUE(f) |
| | Default implementation of substitution of a symbolic expression at a given point. More...
|
| |
| template<typename ... Args1, typename ... Args2, class Arg , typename = typename enable_if_var_in<Var<Args1...>, Var<Args2...> >::type> |
| auto | sub (const Var< Args1... > &f, const Relation< Var< Args2... >, Arg > &x) -> STATOR_AUTORETURN_BYVALUE(x._val) |
| | Evaluates a symbolic Var at a given point. More...
|
| |
| template<class ... Args1, class Arg , class Var2 , typename = typename enable_if_var_not_in<Var<Args1...>, Var2>::type> |
| Var< Args1... > | sub (const Var< Args1... > &f, const Relation< Var2, Arg > &x) |
| | Evaluates a symbolic Var at a given point. More...
|
| |
| template<class Var , class Arg > |
| Expr | sub (const Expr &f, const Relation< Var, Arg > &rel) |
| |
| template<size_t Order, class Var , class F , class Real > |
| auto | taylor_series (const F &f, Real a, Var) -> STATOR_AUTORETURN(try_simplify(detail::TaylorSeriesWorker< 0, Order, Var >::eval(f, a))) |
| | Generate a Taylor series representation of a Symbolic expression. More...
|
| |
| template<class T , typename = typename std::enable_if<std::is_arithmetic<T>::value || std::is_base_of<Eigen::EigenBase<T>, T>::value>::type> |
| auto | toArithmetic (T val) -> STATOR_AUTORETURN_BYVALUE(val) |
| | A converter to arithmetic types. More...
|
| |
| template<class T , typename = typename std::enable_if<std::is_arithmetic<T>::value>::type> |
| auto | toArithmetic (std::complex< T > val) -> STATOR_AUTORETURN_BYVALUE(val) |
| |
| template<std::intmax_t n1, std::intmax_t d1, typename = typename std::enable_if<!(n1 % d1)>::type> |
| std::intmax_t | toArithmetic (C< n1, d1 > val) |
| |
| template<std::intmax_t n1, std::intmax_t d1, typename = typename std::enable_if<n1 % d1>::type> |
| double | toArithmetic (C< n1, d1 > val) |
| |
| template<class T > |
| auto | try_expand (const T &a) -> STATOR_AUTORETURN(try_simplify< ExpandConfig >(a)) |
| | A variant of try_simplify that expands into Polynomial types aggressively. More...
|
| |
| template<class T > |
| auto | try_N (const T &a) -> STATOR_AUTORETURN(try_simplify< NConfig >(a)) |
| | A variant of try_simplify that converts compile time symbols into numbers. More...
|
| |
| template<class Config = DefaultSimplifyConfig, class T > |
| auto | try_simplify (const T &a) -> decltype(detail::try_simplify_imp< Config >(a, detail::select_overload |
| | A method to apply simplification only if it is available. More...
|
| |
|
| template<class Arg , typename = typename std::enable_if<IsSymbolic<SymbolicOperator>::value>::type> |
| Arg | operator+ (const Arg &l) |
| | Symbolic unary positive operator. More...
|
| |
| template<class Arg , typename = typename std::enable_if<IsSymbolic<SymbolicOperator>::value>::type> |
| auto | operator- (const Arg &l) -> STATOR_AUTORETURN(C<-1 >() *l) template< class LHS, class RHS, typename=typename std::enable_if< ApplySymbolicOps< LHS, RHS >::value >::type > auto operator+(const LHS &l, const RHS &r) -> STATOR_AUTORETURN((AddOp< decltype(store(l)), decltype(store(r))>(l, r))) template< class LHS, class RHS, typename=typename std::enable_if< ApplySymbolicOps< LHS, RHS >::value >::type > auto operator*(const LHS &l, const RHS &r) -> STATOR_AUTORETURN((MultiplyOp< decltype(store(l)), decltype(store(r))>(l, r))) template< class LHS, class RHS, typename=typename std::enable_if< ApplySymbolicOps< LHS, RHS >::value >::type > auto operator-(const LHS &l, const RHS &r) -> STATOR_AUTORETURN((SubtractOp< decltype(store(l)), decltype(store(r))>(l, r))) template< class LHS, class RHS, typename=typename std::enable_if< ApplySymbolicOps< LHS, RHS >::value >::type > auto operator/(const LHS &l, const RHS &r) -> STATOR_AUTORETURN((DivideOp< decltype(store(l)), decltype(store(r))>(l, r))) template< class LHS, class RHS, typename=typename std::enable_if< ApplySymbolicOps< LHS, RHS >::value >::type > auto pow(const LHS &l, const RHS &r) -> STATOR_AUTORETURN((PowerOp< decltype(store(l)), decltype(store(r))>(l, r))) |
| | Symbolic unary negation operator. More...
|
| |
| template<class Var , class LHS , class RHS > |
| auto | derivative (const AddOp< LHS, RHS > &f, Var v) -> STATOR_AUTORETURN(derivative(f._l, v)+derivative(f._r, v)) template< class Var, class LHS, class RHS > auto derivative(const SubtractOp< LHS, RHS > &f, Var v) -> STATOR_AUTORETURN(derivative(f._l, v) - derivative(f._r, v)) template< class Var, class LHS, class RHS > auto derivative(const MultiplyOp< LHS, RHS > &f, Var v) -> STATOR_AUTORETURN(derivative(f._l, v) *f._r+f._l *derivative(f._r, v)) template< class Var, class LHS, class RHS > auto derivative(const DivideOp< LHS, RHS > &f, Var v) -> STATOR_AUTORETURN((derivative(f._l, v) *f._r - f._l *derivative(f._r, v))/pow(f._r, C< 2 >())) template< class Var, class Arg, std::intmax_t num, std::intmax_t den > auto derivative(const PowerOp< Arg, C< num, den > > &f, Var v) -> STATOR_AUTORETURN((C< num, den >() *derivative(f._l, v) *pow(f._l, C< num, den >() -C< 1 >()))) |
| | Derivatives of AddOp operations. More...
|
| |
| template<class Var , class Arg , class Power > |
| auto | derivative (const PowerOp< Arg, Power > &f, Var v) -> STATOR_AUTORETURN(f._r *derivative(f._l, v) *pow(f._l, f._r - C< 1 >())+derivative(f._r, v) *log(f._l) *f) |
| | Derivative of a PowerOp operation. More...
|
| |
|
| template<class T > |
| size_t | subtraction_precision (const T f1, const T f2) |
| | Calculate a "precision" for subtraction between two float types. More...
|
| |
| template<class T > |
| size_t | addition_precision (const T f1, const T f2) |
| | Calculate a "precision" for addition between two float types. More...
|
| |