如何估计 C++ 中评估的单变量函数的一阶导数?

How can I estimate the first derivative of an evaluated univariate function in C++?

我有两个向量:

我想计算 f 在这些坐标处的一阶导数的估计值。

函数是波函数的描述符,x 是二面角。

因为结果向量必须与现有的两个向量长度相同,所以我不能使用基于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