微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

提升三次 Hermite 插值“需要模板参数列表”

如何解决提升三次 Hermite 插值“需要模板参数列表”

我正在尝试使用 boost 库中的三次 hermite 插值来插入非等距数据。但是,实现 documentation 中的示例会产生错误“C2955:'boost::math::interpolators::cubic_hermite':使用类模板需要模板参数列表”。

这是我的代码

CMakeLists.txt

cmake_minimum_required(VERSION 3.18)

project(CubichermiteTest LANGUAGES CXX)

set(Boost_USE_STATIC_LIBS        ON)
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME    OFF)
#set(Boost_DEBUG ON)
set(BOOST_ROOT "C:/local/boost_1_76_0/boost" )
set(BOOST_INCLUDEDIR "C:/local/boost_1_76_0" )
set(BOOST_LIBRARYDIR "C:/local/boost_1_76_0/lib64-msvc-14.2" )

find_package(Boost 1.76.0 required)

add_executable(CubichermiteTest
  main.cpp
)
target_link_libraries(CubichermiteTest Boost::boost)

main.cpp

#include <iostream>
#include <vector>
#include <boost/math/interpolators/cubic_hermite.hpp>

int main()
{
    std::vector<double> x{1,5,9,12};
    std::vector<double> y{8,17,4,-3};
    std::vector<double> dydx{5,-2,-1,2};
    using boost::math::interpolators::cubic_hermite;
    auto spline = cubic_hermite(std::move(x),std::move(y),std::move(dydx));
    // evaluate at a point:
    double z = spline(3.4);
    // evaluate derivative at a point:
    double zprime = spline.prime(3.4);
    
    std::cout << zprime << '\n';
}

调用cubic_hermite时产生的错误错误的原因可能是什么?

解决方法

代码示例建议您要使用类模板参数推导(对于 RandomAccessContainercubic_hermite 模板参数)。要么确保您的编译器使用 C++17 标准(因为没有早期标准支持此功能)或明确指定模板参数,例如

auto spline = cubic_hermite<decltype(x)>(std::move(x),std::move(y),std::move(dydx));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。