SpecialFunctionsArrayAPI.h
00001 // This file is part of Eigen, a lightweight C++ template library
00002 // for linear algebra.
00003 //
00004 // Copyright (C) 2016 Gael Guennebaud <gael.guennebaud@inria.fr>
00005 //
00006 // This Source Code Form is subject to the terms of the Mozilla
00007 // Public License v. 2.0. If a copy of the MPL was not distributed
00008 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
00009 
00010 
00011 #ifndef EIGEN_SPECIALFUNCTIONS_ARRAYAPI_H
00012 #define EIGEN_SPECIALFUNCTIONS_ARRAYAPI_H
00013 
00014 namespace Eigen {
00015 
00026 template<typename Derived,typename ExponentDerived>
00027 inline const Eigen::CwiseBinaryOp<Eigen::internal::scalar_igamma_op<typename Derived::Scalar>, const Derived, const ExponentDerived>
00028 igamma(const Eigen::ArrayBase<Derived>& a, const Eigen::ArrayBase<ExponentDerived>& x)
00029 {
00030   return Eigen::CwiseBinaryOp<Eigen::internal::scalar_igamma_op<typename Derived::Scalar>, const Derived, const ExponentDerived>(
00031     a.derived(),
00032     x.derived()
00033   );
00034 }
00035 
00046 template<typename Derived,typename ExponentDerived>
00047 inline const Eigen::CwiseBinaryOp<Eigen::internal::scalar_igammac_op<typename Derived::Scalar>, const Derived, const ExponentDerived>
00048 igammac(const Eigen::ArrayBase<Derived>& a, const Eigen::ArrayBase<ExponentDerived>& x)
00049 {
00050   return Eigen::CwiseBinaryOp<Eigen::internal::scalar_igammac_op<typename Derived::Scalar>, const Derived, const ExponentDerived>(
00051     a.derived(),
00052     x.derived()
00053   );
00054 }
00055 
00066 // * \warning Be careful with the order of the parameters: x.polygamma(n) is equivalent to polygamma(n,x)
00067 // * \sa ArrayBase::polygamma()
00068 template<typename DerivedN,typename DerivedX>
00069 inline const Eigen::CwiseBinaryOp<Eigen::internal::scalar_polygamma_op<typename DerivedX::Scalar>, const DerivedN, const DerivedX>
00070 polygamma(const Eigen::ArrayBase<DerivedN>& n, const Eigen::ArrayBase<DerivedX>& x)
00071 {
00072   return Eigen::CwiseBinaryOp<Eigen::internal::scalar_polygamma_op<typename DerivedX::Scalar>, const DerivedN, const DerivedX>(
00073     n.derived(),
00074     x.derived()
00075   );
00076 }
00077 
00088 template<typename ArgADerived, typename ArgBDerived, typename ArgXDerived>
00089 inline const Eigen::CwiseTernaryOp<Eigen::internal::scalar_betainc_op<typename ArgXDerived::Scalar>, const ArgADerived, const ArgBDerived, const ArgXDerived>
00090 betainc(const Eigen::ArrayBase<ArgADerived>& a, const Eigen::ArrayBase<ArgBDerived>& b, const Eigen::ArrayBase<ArgXDerived>& x)
00091 {
00092   return Eigen::CwiseTernaryOp<Eigen::internal::scalar_betainc_op<typename ArgXDerived::Scalar>, const ArgADerived, const ArgBDerived, const ArgXDerived>(
00093     a.derived(),
00094     b.derived(),
00095     x.derived()
00096   );
00097 }
00098 
00099 
00112 template<typename DerivedX,typename DerivedQ>
00113 inline const Eigen::CwiseBinaryOp<Eigen::internal::scalar_zeta_op<typename DerivedX::Scalar>, const DerivedX, const DerivedQ>
00114 zeta(const Eigen::ArrayBase<DerivedX>& x, const Eigen::ArrayBase<DerivedQ>& q)
00115 {
00116   return Eigen::CwiseBinaryOp<Eigen::internal::scalar_zeta_op<typename DerivedX::Scalar>, const DerivedX, const DerivedQ>(
00117     x.derived(),
00118     q.derived()
00119   );
00120 }
00121 
00122 } // end namespace Eigen
00123 
00124 #endif // EIGEN_SPECIALFUNCTIONS_ARRAYAPI_H
 All Classes Functions Variables Typedefs Enumerator