cart-elc

Source code for CART-ELC
git clone git://git.laack.co/cart-elc.git
Log | Files | Refs | README | LICENSE

BesselFunctionsArrayAPI.h (10015B)


      1 // This file is part of Eigen, a lightweight C++ template library
      2 // for linear algebra.
      3 //
      4 // Copyright (C) 2016 Gael Guennebaud <gael.guennebaud@inria.fr>
      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 
     11 #ifndef EIGEN_BESSELFUNCTIONS_ARRAYAPI_H
     12 #define EIGEN_BESSELFUNCTIONS_ARRAYAPI_H
     13 
     14 namespace Eigen {
     15 
     16 /** \returns an expression of the coefficient-wise i0(\a x) to the given
     17  * arrays.
     18   *
     19   * It returns the modified Bessel function of the first kind of order zero.
     20   *
     21   * \param x is the argument
     22   *
     23   * \note This function supports only float and double scalar types. To support
     24   * other scalar types, the user has to provide implementations of i0(T) for
     25   * any scalar type T to be supported.
     26   *
     27   * \sa ArrayBase::bessel_i0()
     28   */
     29 template <typename Derived>
     30 EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp<
     31     Eigen::internal::scalar_bessel_i0_op<typename Derived::Scalar>, const Derived>
     32 bessel_i0(const Eigen::ArrayBase<Derived>& x) {
     33   return Eigen::CwiseUnaryOp<
     34       Eigen::internal::scalar_bessel_i0_op<typename Derived::Scalar>,
     35       const Derived>(x.derived());
     36 }
     37 
     38 /** \returns an expression of the coefficient-wise i0e(\a x) to the given
     39  * arrays.
     40   *
     41   * It returns the exponentially scaled modified Bessel
     42   * function of the first kind of order zero.
     43   *
     44   * \param x is the argument
     45   *
     46   * \note This function supports only float and double scalar types. To support
     47   * other scalar types, the user has to provide implementations of i0e(T) for
     48   * any scalar type T to be supported.
     49   *
     50   * \sa ArrayBase::bessel_i0e()
     51   */
     52 template <typename Derived>
     53 EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp<
     54     Eigen::internal::scalar_bessel_i0e_op<typename Derived::Scalar>, const Derived>
     55 bessel_i0e(const Eigen::ArrayBase<Derived>& x) {
     56   return Eigen::CwiseUnaryOp<
     57       Eigen::internal::scalar_bessel_i0e_op<typename Derived::Scalar>,
     58       const Derived>(x.derived());
     59 }
     60 
     61 /** \returns an expression of the coefficient-wise i1(\a x) to the given
     62  * arrays.
     63   *
     64   * It returns the modified Bessel function of the first kind of order one.
     65   *
     66   * \param x is the argument
     67   *
     68   * \note This function supports only float and double scalar types. To support
     69   * other scalar types, the user has to provide implementations of i1(T) for
     70   * any scalar type T to be supported.
     71   *
     72   * \sa ArrayBase::bessel_i1()
     73   */
     74 template <typename Derived>
     75 EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp<
     76     Eigen::internal::scalar_bessel_i1_op<typename Derived::Scalar>, const Derived>
     77 bessel_i1(const Eigen::ArrayBase<Derived>& x) {
     78   return Eigen::CwiseUnaryOp<
     79       Eigen::internal::scalar_bessel_i1_op<typename Derived::Scalar>,
     80       const Derived>(x.derived());
     81 }
     82 
     83 /** \returns an expression of the coefficient-wise i1e(\a x) to the given
     84  * arrays.
     85   *
     86   * It returns the exponentially scaled modified Bessel
     87   * function of the first kind of order one.
     88   *
     89   * \param x is the argument
     90   *
     91   * \note This function supports only float and double scalar types. To support
     92   * other scalar types, the user has to provide implementations of i1e(T) for
     93   * any scalar type T to be supported.
     94   *
     95   * \sa ArrayBase::bessel_i1e()
     96   */
     97 template <typename Derived>
     98 EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp<
     99     Eigen::internal::scalar_bessel_i1e_op<typename Derived::Scalar>, const Derived>
    100 bessel_i1e(const Eigen::ArrayBase<Derived>& x) {
    101   return Eigen::CwiseUnaryOp<
    102       Eigen::internal::scalar_bessel_i1e_op<typename Derived::Scalar>,
    103       const Derived>(x.derived());
    104 }
    105 
    106 /** \returns an expression of the coefficient-wise k0(\a x) to the given
    107  * arrays.
    108   *
    109   * It returns the modified Bessel function of the second kind of order zero.
    110   *
    111   * \param x is the argument
    112   *
    113   * \note This function supports only float and double scalar types. To support
    114   * other scalar types, the user has to provide implementations of k0(T) for
    115   * any scalar type T to be supported.
    116   *
    117   * \sa ArrayBase::bessel_k0()
    118   */
    119 template <typename Derived>
    120 EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp<
    121     Eigen::internal::scalar_bessel_k0_op<typename Derived::Scalar>, const Derived>
    122 bessel_k0(const Eigen::ArrayBase<Derived>& x) {
    123   return Eigen::CwiseUnaryOp<
    124       Eigen::internal::scalar_bessel_k0_op<typename Derived::Scalar>,
    125       const Derived>(x.derived());
    126 }
    127 
    128 /** \returns an expression of the coefficient-wise k0e(\a x) to the given
    129  * arrays.
    130   *
    131   * It returns the exponentially scaled modified Bessel
    132   * function of the second kind of order zero.
    133   *
    134   * \param x is the argument
    135   *
    136   * \note This function supports only float and double scalar types. To support
    137   * other scalar types, the user has to provide implementations of k0e(T) for
    138   * any scalar type T to be supported.
    139   *
    140   * \sa ArrayBase::bessel_k0e()
    141   */
    142 template <typename Derived>
    143 EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp<
    144     Eigen::internal::scalar_bessel_k0e_op<typename Derived::Scalar>, const Derived>
    145 bessel_k0e(const Eigen::ArrayBase<Derived>& x) {
    146   return Eigen::CwiseUnaryOp<
    147       Eigen::internal::scalar_bessel_k0e_op<typename Derived::Scalar>,
    148       const Derived>(x.derived());
    149 }
    150 
    151 /** \returns an expression of the coefficient-wise k1(\a x) to the given
    152  * arrays.
    153   *
    154   * It returns the modified Bessel function of the second kind of order one.
    155   *
    156   * \param x is the argument
    157   *
    158   * \note This function supports only float and double scalar types. To support
    159   * other scalar types, the user has to provide implementations of k1(T) for
    160   * any scalar type T to be supported.
    161   *
    162   * \sa ArrayBase::bessel_k1()
    163   */
    164 template <typename Derived>
    165 EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp<
    166     Eigen::internal::scalar_bessel_k1_op<typename Derived::Scalar>, const Derived>
    167 bessel_k1(const Eigen::ArrayBase<Derived>& x) {
    168   return Eigen::CwiseUnaryOp<
    169       Eigen::internal::scalar_bessel_k1_op<typename Derived::Scalar>,
    170       const Derived>(x.derived());
    171 }
    172 
    173 /** \returns an expression of the coefficient-wise k1e(\a x) to the given
    174  * arrays.
    175   *
    176   * It returns the exponentially scaled modified Bessel
    177   * function of the second kind of order one.
    178   *
    179   * \param x is the argument
    180   *
    181   * \note This function supports only float and double scalar types. To support
    182   * other scalar types, the user has to provide implementations of k1e(T) for
    183   * any scalar type T to be supported.
    184   *
    185   * \sa ArrayBase::bessel_k1e()
    186   */
    187 template <typename Derived>
    188 EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp<
    189     Eigen::internal::scalar_bessel_k1e_op<typename Derived::Scalar>, const Derived>
    190 bessel_k1e(const Eigen::ArrayBase<Derived>& x) {
    191   return Eigen::CwiseUnaryOp<
    192       Eigen::internal::scalar_bessel_k1e_op<typename Derived::Scalar>,
    193       const Derived>(x.derived());
    194 }
    195 
    196 /** \returns an expression of the coefficient-wise j0(\a x) to the given
    197  * arrays.
    198   *
    199   * It returns the Bessel function of the first kind of order zero.
    200   *
    201   * \param x is the argument
    202   *
    203   * \note This function supports only float and double scalar types. To support
    204   * other scalar types, the user has to provide implementations of j0(T) for
    205   * any scalar type T to be supported.
    206   *
    207   * \sa ArrayBase::bessel_j0()
    208   */
    209 template <typename Derived>
    210 EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp<
    211     Eigen::internal::scalar_bessel_j0_op<typename Derived::Scalar>, const Derived>
    212 bessel_j0(const Eigen::ArrayBase<Derived>& x) {
    213   return Eigen::CwiseUnaryOp<
    214       Eigen::internal::scalar_bessel_j0_op<typename Derived::Scalar>,
    215       const Derived>(x.derived());
    216 }
    217 
    218 /** \returns an expression of the coefficient-wise y0(\a x) to the given
    219  * arrays.
    220   *
    221   * It returns the Bessel function of the second kind of order zero.
    222   *
    223   * \param x is the argument
    224   *
    225   * \note This function supports only float and double scalar types. To support
    226   * other scalar types, the user has to provide implementations of y0(T) for
    227   * any scalar type T to be supported.
    228   *
    229   * \sa ArrayBase::bessel_y0()
    230   */
    231 template <typename Derived>
    232 EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp<
    233     Eigen::internal::scalar_bessel_y0_op<typename Derived::Scalar>, const Derived>
    234 bessel_y0(const Eigen::ArrayBase<Derived>& x) {
    235   return Eigen::CwiseUnaryOp<
    236       Eigen::internal::scalar_bessel_y0_op<typename Derived::Scalar>,
    237       const Derived>(x.derived());
    238 }
    239 
    240 /** \returns an expression of the coefficient-wise j1(\a x) to the given
    241  * arrays.
    242   *
    243   * It returns the modified Bessel function of the first kind of order one.
    244   *
    245   * \param x is the argument
    246   *
    247   * \note This function supports only float and double scalar types. To support
    248   * other scalar types, the user has to provide implementations of j1(T) for
    249   * any scalar type T to be supported.
    250   *
    251   * \sa ArrayBase::bessel_j1()
    252   */
    253 template <typename Derived>
    254 EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp<
    255     Eigen::internal::scalar_bessel_j1_op<typename Derived::Scalar>, const Derived>
    256 bessel_j1(const Eigen::ArrayBase<Derived>& x) {
    257   return Eigen::CwiseUnaryOp<
    258       Eigen::internal::scalar_bessel_j1_op<typename Derived::Scalar>,
    259       const Derived>(x.derived());
    260 }
    261 
    262 /** \returns an expression of the coefficient-wise y1(\a x) to the given
    263  * arrays.
    264   *
    265   * It returns the Bessel function of the second kind of order one.
    266   *
    267   * \param x is the argument
    268   *
    269   * \note This function supports only float and double scalar types. To support
    270   * other scalar types, the user has to provide implementations of y1(T) for
    271   * any scalar type T to be supported.
    272   *
    273   * \sa ArrayBase::bessel_y1()
    274   */
    275 template <typename Derived>
    276 EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp<
    277     Eigen::internal::scalar_bessel_y1_op<typename Derived::Scalar>, const Derived>
    278 bessel_y1(const Eigen::ArrayBase<Derived>& x) {
    279   return Eigen::CwiseUnaryOp<
    280       Eigen::internal::scalar_bessel_y1_op<typename Derived::Scalar>,
    281       const Derived>(x.derived());
    282 }
    283 
    284 } // end namespace Eigen
    285 
    286 #endif // EIGEN_BESSELFUNCTIONS_ARRAYAPI_H