我有两个 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。