![]() |
Eigen-unsupported
3.3.3
|
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