[/ Copyright 2019 Nick Thompson Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). ] [section:vector_barycentric Vector-valued Barycentric Rational Interpolation] [heading Synopsis] `` #include namespace boost{ namespace math{ template class vector_barycentric_rational { public: using Real = typename TimeContainer::value_type; using Point = typename SpaceContainer::value_type; vector_barycentric_rational(TimeContainer&& times, SpaceContainer&& points, size_t approximation_order = 3); void operator()(Point& x, Real t) const; Point operator()(Real t) const; void prime(Point& dxdt, Real t) const; Point prime(Real t); void eval_with_prime(Point& x, Point& dxdt, Real t) const; std::pair eval_with_prime(Real t) const; }; }} `` [heading Description] The /n/ dimensional vector-valued barycentric rational interpolator is exactly the same as /n/ scalar-valued barycentric rational interpolators. This is provided primarily for convenience and a slight improvement in efficiency over using /n/ different rational interpolators and combining their results. Use of the class requires a `Point`-type which has size known at compile-time. These requirements are satisfied by (for example) `Eigen::Vector2d`s and `std::array` classes. The call to the constructor computes the weights: using boost::math::vector_barycentric_rational; std::vector t(100); std::vector y(100); // initialize t and y . . . vector_barycentric_rational interpolant(std::move(t), std::move(y)); To evaluate the interpolant, use double t = 2.3; Eigen::Vector2d y = interpolant(t); If you want to populate a vector passed into the interpolant, rather than get it returned, that syntax is supported: Eigen::Vector2d y; interpolant(y, t); We tested this with `Eigen::Vector`s and found no performance benefit, but other `Point`-types might not be the same. To evaluate the derivative of the interpolant use auto [y, y_prime] = interpolant.eval_with_prime(x); Computation of the derivative requires evaluation, so if you can try to use both values at once. [endsect] [/section:vector_barycentric Vector Barycentric Rational Interpolation]