我有两个 vector :

  • 沿轴的坐标x
  • 对这些坐标上的函数的评估f(x)

  • 我想在这些坐标处计算f的一阶导数的估计。
    该函数是波函数的描述符,x是二面角。
    因为结果 vector 的长度必须与两个现有 vector 的长度相同,所以我不能使用基于Newton's difference quotient的手动实现。
    在Python中,我可以使用scipy库获得这样的估计:
    spline = UnivariateSpline(X, Y, k=4, s=0)
    sd = spline.derivative(n=1)
    
    也许我可以在C++中做类似的事情?

    最佳答案

    我将从pchip开始。
    例:

    #include <boost/math/interpolators/pchip.hpp>
    // ...
    using boost::math::interpolators::pchip;
    auto f = pchip(std::move(x), std::move(y));
    double t = 3.2;
    std::cout << "f(" << t << " = " << f(t) << ", f'(" << t << ") = " << f.prime(t) << "\n";
    
    如果您不喜欢pchip的“字符”,则您有很多other options

    10-07 23:50