BesselFunctionsFunctors.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) 2016 Eugene Brevdo <ebrevdo@gmail.com>
5 // Copyright (C) 2016 Gael Guennebaud <gael.guennebaud@inria.fr>
6 //
7 // This Source Code Form is subject to the terms of the Mozilla
8 // Public License v. 2.0. If a copy of the MPL was not distributed
9 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 
11 #ifndef EIGEN_BESSELFUNCTIONS_FUNCTORS_H
12 #define EIGEN_BESSELFUNCTIONS_FUNCTORS_H
13 
14 // IWYU pragma: private
15 #include "./InternalHeaderCheck.h"
16 
17 namespace Eigen {
18 
19 namespace internal {
20 
26 template <typename Scalar>
29  using numext::bessel_i0;
30  return bessel_i0(x);
31  }
34 };
35 template <typename Scalar>
37  enum {
38  // On average, a Chebyshev polynomial of order N=20 is computed.
39  // The cost is N multiplications and 2N additions. We also add
40  // the cost of an additional exp over i0e.
43  };
44 };
45 
51 template <typename Scalar>
54  using numext::bessel_i0e;
55  return bessel_i0e(x);
56  }
59 };
60 template <typename Scalar>
62  enum {
63  // On average, a Chebyshev polynomial of order N=20 is computed.
64  // The cost is N multiplications and 2N additions.
67  };
68 };
69 
75 template <typename Scalar>
78  using numext::bessel_i1;
79  return bessel_i1(x);
80  }
83 };
84 template <typename Scalar>
86  enum {
87  // On average, a Chebyshev polynomial of order N=20 is computed.
88  // The cost is N multiplications and 2N additions. We also add
89  // the cost of an additional exp over i1e.
92  };
93 };
94 
100 template <typename Scalar>
103  using numext::bessel_i1e;
104  return bessel_i1e(x);
105  }
108 };
109 template <typename Scalar>
111  enum {
112  // On average, a Chebyshev polynomial of order N=20 is computed.
113  // The cost is N multiplications and 2N additions.
116  };
117 };
118 
124 template <typename Scalar>
127  using numext::bessel_j0;
128  return bessel_j0(x);
129  }
132 };
133 template <typename Scalar>
135  enum {
136  // 6 polynomial of order ~N=8 is computed.
137  // The cost is N multiplications and N additions each, along with a
138  // sine, cosine and rsqrt cost.
141  };
142 };
143 
149 template <typename Scalar>
152  using numext::bessel_y0;
153  return bessel_y0(x);
154  }
157 };
158 template <typename Scalar>
160  enum {
161  // 6 polynomial of order ~N=8 is computed.
162  // The cost is N multiplications and N additions each, along with a
163  // sine, cosine, rsqrt and j0 cost.
166  };
167 };
168 
174 template <typename Scalar>
177  using numext::bessel_j1;
178  return bessel_j1(x);
179  }
182 };
183 template <typename Scalar>
185  enum {
186  // 6 polynomial of order ~N=8 is computed.
187  // The cost is N multiplications and N additions each, along with a
188  // sine, cosine and rsqrt cost.
191  };
192 };
193 
199 template <typename Scalar>
202  using numext::bessel_y1;
203  return bessel_y1(x);
204  }
207 };
208 template <typename Scalar>
210  enum {
211  // 6 polynomial of order ~N=8 is computed.
212  // The cost is N multiplications and N additions each, along with a
213  // sine, cosine, rsqrt and j1 cost.
216  };
217 };
218 
224 template <typename Scalar>
227  using numext::bessel_k0;
228  return bessel_k0(x);
229  }
232 };
233 template <typename Scalar>
235  enum {
236  // On average, a Chebyshev polynomial of order N=10 is computed.
237  // The cost is N multiplications and 2N additions. In addition we compute
238  // i0, a log, exp and prsqrt and sin and cos.
241  };
242 };
243 
249 template <typename Scalar>
252  using numext::bessel_k0e;
253  return bessel_k0e(x);
254  }
257 };
258 template <typename Scalar>
260  enum {
261  // On average, a Chebyshev polynomial of order N=10 is computed.
262  // The cost is N multiplications and 2N additions. In addition we compute
263  // i0, a log, exp and prsqrt and sin and cos.
266  };
267 };
268 
274 template <typename Scalar>
277  using numext::bessel_k1;
278  return bessel_k1(x);
279  }
282 };
283 template <typename Scalar>
285  enum {
286  // On average, a Chebyshev polynomial of order N=10 is computed.
287  // The cost is N multiplications and 2N additions. In addition we compute
288  // i1, a log, exp and prsqrt and sin and cos.
291  };
292 };
293 
299 template <typename Scalar>
302  using numext::bessel_k1e;
303  return bessel_k1e(x);
304  }
307 };
308 template <typename Scalar>
310  enum {
311  // On average, a Chebyshev polynomial of order N=10 is computed.
312  // The cost is N multiplications and 2N additions. In addition we compute
313  // i1, a log, exp and prsqrt and sin and cos.
316  };
317 };
318 
319 } // end namespace internal
320 
321 } // end namespace Eigen
322 
323 #endif // EIGEN_BESSELFUNCTIONS_FUNCTORS_H
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
SCALAR Scalar
Definition: bench_gemm.cpp:45
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_i0(const Packet &x)
Definition: BesselFunctionsPacketMath.h:23
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_i1e(const Packet &x)
Definition: BesselFunctionsPacketMath.h:44
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_i0e(const Packet &x)
Definition: BesselFunctionsPacketMath.h:30
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_k1e(const Packet &x)
Definition: BesselFunctionsPacketMath.h:100
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_j1(const Packet &x)
Definition: BesselFunctionsPacketMath.h:58
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_k0(const Packet &x)
Definition: BesselFunctionsPacketMath.h:79
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_y0(const Packet &x)
Definition: BesselFunctionsPacketMath.h:65
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_i1(const Packet &x)
Definition: BesselFunctionsPacketMath.h:37
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_k1(const Packet &x)
Definition: BesselFunctionsPacketMath.h:93
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_y1(const Packet &x)
Definition: BesselFunctionsPacketMath.h:72
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_k0e(const Packet &x)
Definition: BesselFunctionsPacketMath.h:86
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_j0(const Packet &x)
Definition: BesselFunctionsPacketMath.h:51
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_k0e_op< typename Derived::Scalar >, const Derived > bessel_k0e(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:142
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_y0_op< typename Derived::Scalar >, const Derived > bessel_y0(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:227
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_j1_op< typename Derived::Scalar >, const Derived > bessel_j1(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:248
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_i0e_op< typename Derived::Scalar >, const Derived > bessel_i0e(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:56
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_k1_op< typename Derived::Scalar >, const Derived > bessel_k1(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:163
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_j0_op< typename Derived::Scalar >, const Derived > bessel_j0(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:206
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_k0_op< typename Derived::Scalar >, const Derived > bessel_k0(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:120
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_i1e_op< typename Derived::Scalar >, const Derived > bessel_i1e(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:99
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_k1e_op< typename Derived::Scalar >, const Derived > bessel_k1e(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:185
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_i1_op< typename Derived::Scalar >, const Derived > bessel_i1(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:77
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_i0_op< typename Derived::Scalar >, const Derived > bessel_i0(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:34
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_y1_op< typename Derived::Scalar >, const Derived > bessel_y1(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:269
Definition: Eigen_Colamd.h:49
list x
Definition: plotDoE.py:28
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217
Definition: XprHelper.h:205
@ PacketAccess
Definition: XprHelper.h:206
@ Cost
Definition: XprHelper.h:206
Definition: GenericPacketMath.h:108
Template functor to compute the modified Bessel function of the first kind of order zero.
Definition: BesselFunctionsFunctors.h:27
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &x) const
Definition: BesselFunctionsFunctors.h:33
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar &x) const
Definition: BesselFunctionsFunctors.h:28
packet_traits< Scalar >::type Packet
Definition: BesselFunctionsFunctors.h:32
Template functor to compute the exponentially scaled modified Bessel function of the first kind of or...
Definition: BesselFunctionsFunctors.h:52
packet_traits< Scalar >::type Packet
Definition: BesselFunctionsFunctors.h:57
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &x) const
Definition: BesselFunctionsFunctors.h:58
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar &x) const
Definition: BesselFunctionsFunctors.h:53
Template functor to compute the modified Bessel function of the first kind of order one.
Definition: BesselFunctionsFunctors.h:76
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar &x) const
Definition: BesselFunctionsFunctors.h:77
packet_traits< Scalar >::type Packet
Definition: BesselFunctionsFunctors.h:81
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &x) const
Definition: BesselFunctionsFunctors.h:82
Template functor to compute the exponentially scaled modified Bessel function of the first kind of or...
Definition: BesselFunctionsFunctors.h:101
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &x) const
Definition: BesselFunctionsFunctors.h:107
packet_traits< Scalar >::type Packet
Definition: BesselFunctionsFunctors.h:106
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar &x) const
Definition: BesselFunctionsFunctors.h:102
Template functor to compute the Bessel function of the second kind of order zero.
Definition: BesselFunctionsFunctors.h:125
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar &x) const
Definition: BesselFunctionsFunctors.h:126
packet_traits< Scalar >::type Packet
Definition: BesselFunctionsFunctors.h:130
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &x) const
Definition: BesselFunctionsFunctors.h:131
Template functor to compute the Bessel function of the first kind of order one.
Definition: BesselFunctionsFunctors.h:175
packet_traits< Scalar >::type Packet
Definition: BesselFunctionsFunctors.h:180
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &x) const
Definition: BesselFunctionsFunctors.h:181
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar &x) const
Definition: BesselFunctionsFunctors.h:176
Template functor to compute the modified Bessel function of the second kind of order zero.
Definition: BesselFunctionsFunctors.h:225
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar &x) const
Definition: BesselFunctionsFunctors.h:226
packet_traits< Scalar >::type Packet
Definition: BesselFunctionsFunctors.h:230
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &x) const
Definition: BesselFunctionsFunctors.h:231
Template functor to compute the exponentially scaled modified Bessel function of the second kind of o...
Definition: BesselFunctionsFunctors.h:250
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar &x) const
Definition: BesselFunctionsFunctors.h:251
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &x) const
Definition: BesselFunctionsFunctors.h:256
packet_traits< Scalar >::type Packet
Definition: BesselFunctionsFunctors.h:255
Template functor to compute the modified Bessel function of the second kind of order one.
Definition: BesselFunctionsFunctors.h:275
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar &x) const
Definition: BesselFunctionsFunctors.h:276
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &x) const
Definition: BesselFunctionsFunctors.h:281
packet_traits< Scalar >::type Packet
Definition: BesselFunctionsFunctors.h:280
Template functor to compute the exponentially scaled modified Bessel function of the second kind of o...
Definition: BesselFunctionsFunctors.h:300
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &x) const
Definition: BesselFunctionsFunctors.h:306
packet_traits< Scalar >::type Packet
Definition: BesselFunctionsFunctors.h:305
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar &x) const
Definition: BesselFunctionsFunctors.h:301
Template functor to compute the Bessel function of the second kind of order zero.
Definition: BesselFunctionsFunctors.h:150
packet_traits< Scalar >::type Packet
Definition: BesselFunctionsFunctors.h:155
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar &x) const
Definition: BesselFunctionsFunctors.h:151
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &x) const
Definition: BesselFunctionsFunctors.h:156
Template functor to compute the Bessel function of the second kind of order one.
Definition: BesselFunctionsFunctors.h:200
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar &x) const
Definition: BesselFunctionsFunctors.h:201
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet &x) const
Definition: BesselFunctionsFunctors.h:206
packet_traits< Scalar >::type Packet
Definition: BesselFunctionsFunctors.h:205