如何估计 C++ 中评估的单变量函数的一阶导数?
How can I estimate the first derivative of an evaluated univariate function in C++?
我有两个向量:
- 沿轴的坐标,
x
;
- 对这些坐标的函数求值,
f(x)
。
我想计算 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。
我有两个向量:
- 沿轴的坐标,
x
; - 对这些坐标的函数求值,
f(x)
。
我想计算 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。