WPILibC++ 2023.4.3-108-ge5452e3
StemFunction.h
Go to the documentation of this file.
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2010, 2013 Jitse Niesen <jitse@maths.leeds.ac.uk>
5//
6// This Source Code Form is subject to the terms of the Mozilla
7// Public License v. 2.0. If a copy of the MPL was not distributed
8// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
10#ifndef EIGEN_STEM_FUNCTION
11#define EIGEN_STEM_FUNCTION
12
13namespace Eigen {
14
15namespace internal {
16
17/** \brief The exponential function (and its derivatives). */
18template <typename Scalar>
19Scalar stem_function_exp(Scalar x, int)
20{
21 using std::exp;
22 return exp(x);
23}
24
25/** \brief Cosine (and its derivatives). */
26template <typename Scalar>
27Scalar stem_function_cos(Scalar x, int n)
28{
29 using std::cos;
30 using std::sin;
31 Scalar res;
32
33 switch (n % 4) {
34 case 0:
35 res = std::cos(x);
36 break;
37 case 1:
38 res = -std::sin(x);
39 break;
40 case 2:
41 res = -std::cos(x);
42 break;
43 case 3:
44 res = std::sin(x);
45 break;
46 }
47 return res;
48}
49
50/** \brief Sine (and its derivatives). */
51template <typename Scalar>
52Scalar stem_function_sin(Scalar x, int n)
53{
54 using std::cos;
55 using std::sin;
56 Scalar res;
57
58 switch (n % 4) {
59 case 0:
60 res = std::sin(x);
61 break;
62 case 1:
63 res = std::cos(x);
64 break;
65 case 2:
66 res = -std::sin(x);
67 break;
68 case 3:
69 res = -std::cos(x);
70 break;
71 }
72 return res;
73}
74
75/** \brief Hyperbolic cosine (and its derivatives). */
76template <typename Scalar>
77Scalar stem_function_cosh(Scalar x, int n)
78{
79 using std::cosh;
80 using std::sinh;
81 Scalar res;
82
83 switch (n % 2) {
84 case 0:
85 res = std::cosh(x);
86 break;
87 case 1:
88 res = std::sinh(x);
89 break;
90 }
91 return res;
92}
93
94/** \brief Hyperbolic sine (and its derivatives). */
95template <typename Scalar>
96Scalar stem_function_sinh(Scalar x, int n)
97{
98 using std::cosh;
99 using std::sinh;
100 Scalar res;
101
102 switch (n % 2) {
103 case 0:
104 res = std::sinh(x);
105 break;
106 case 1:
107 res = std::cosh(x);
108 break;
109 }
110 return res;
111}
112
113} // end namespace internal
114
115} // end namespace Eigen
116
117#endif // EIGEN_STEM_FUNCTION
dimensionless::scalar_t sinh(const AngleUnit angle) noexcept
Compute hyperbolic sine.
Definition: math.h:226
dimensionless::scalar_t cosh(const AngleUnit angle) noexcept
Compute hyperbolic cosine.
Definition: math.h:206
dimensionless::scalar_t cos(const AngleUnit angle) noexcept
Compute cosine.
Definition: math.h:61
dimensionless::scalar_t sin(const AngleUnit angle) noexcept
Compute sine.
Definition: math.h:81
Scalar stem_function_exp(Scalar x, int)
The exponential function (and its derivatives).
Definition: StemFunction.h:19
Scalar stem_function_sin(Scalar x, int n)
Sine (and its derivatives).
Definition: StemFunction.h:52
Scalar stem_function_cos(Scalar x, int n)
Cosine (and its derivatives).
Definition: StemFunction.h:27
Scalar stem_function_cosh(Scalar x, int n)
Hyperbolic cosine (and its derivatives).
Definition: StemFunction.h:77
Scalar stem_function_sinh(Scalar x, int n)
Hyperbolic sine (and its derivatives).
Definition: StemFunction.h:96
Namespace containing all symbols from the Eigen library.
Definition: Core:141
Definition: Eigen_Colamd.h:50