123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #ifndef BOOST_MATH_INTERPOLATORS_BARYCENTRIC_RATIONAL_HPP
- #define BOOST_MATH_INTERPOLATORS_BARYCENTRIC_RATIONAL_HPP
- #include <memory>
- #include <boost/math/interpolators/detail/barycentric_rational_detail.hpp>
- namespace boost{ namespace math{ namespace interpolators{
- template<class Real>
- class barycentric_rational
- {
- public:
- barycentric_rational(const Real* const x, const Real* const y, size_t n, size_t approximation_order = 3);
- barycentric_rational(std::vector<Real>&& x, std::vector<Real>&& y, size_t approximation_order = 3);
- template <class InputIterator1, class InputIterator2>
- barycentric_rational(InputIterator1 start_x, InputIterator1 end_x, InputIterator2 start_y, size_t approximation_order = 3, typename std::enable_if<!std::is_integral<InputIterator2>::value>::type* = nullptr);
- Real operator()(Real x) const;
- Real prime(Real x) const;
- std::vector<Real>&& return_x()
- {
- return m_imp->return_x();
- }
- std::vector<Real>&& return_y()
- {
- return m_imp->return_y();
- }
- private:
- std::shared_ptr<detail::barycentric_rational_imp<Real>> m_imp;
- };
- template <class Real>
- barycentric_rational<Real>::barycentric_rational(const Real* const x, const Real* const y, size_t n, size_t approximation_order):
- m_imp(std::make_shared<detail::barycentric_rational_imp<Real>>(x, x + n, y, approximation_order))
- {
- return;
- }
- template <class Real>
- barycentric_rational<Real>::barycentric_rational(std::vector<Real>&& x, std::vector<Real>&& y, size_t approximation_order):
- m_imp(std::make_shared<detail::barycentric_rational_imp<Real>>(std::move(x), std::move(y), approximation_order))
- {
- return;
- }
- template <class Real>
- template <class InputIterator1, class InputIterator2>
- barycentric_rational<Real>::barycentric_rational(InputIterator1 start_x, InputIterator1 end_x, InputIterator2 start_y, size_t approximation_order, typename std::enable_if<!std::is_integral<InputIterator2>::value>::type*)
- : m_imp(std::make_shared<detail::barycentric_rational_imp<Real>>(start_x, end_x, start_y, approximation_order))
- {
- }
- template<class Real>
- Real barycentric_rational<Real>::operator()(Real x) const
- {
- return m_imp->operator()(x);
- }
- template<class Real>
- Real barycentric_rational<Real>::prime(Real x) const
- {
- return m_imp->prime(x);
- }
- }}}
- #endif
|