2个不稳定版本

0.2.0 2024年1月28日
0.1.0 2024年1月26日

#182 in 机器人

MIT/Apache

53KB
877

gcv_spline - 纯Rust中的广义交叉验证样条,用于插值和导数

此Rust crate实现了GCV样条,这是一种用于在未知点插值数据和准确求取平滑数据导数的通用且易于使用的样条结构。

GCV样条最初由Herman J. Woltring开发。私有woltring模块中的模块基于他的FORTRAN包和D. Twisk的C翻译。这些版本的注释包含在此实现中。


lib.rs:

gcv_spline - 纯Rust中的广义交叉验证样条,用于插值和导数

此crate实现了GCV样条,这是一种用于在未知点插值数据和准确求取平滑数据导数的通用且易于使用的样条结构。

GCV样条最初由Herman J. Woltring开发。私有woltring模块中的模块基于他的FORTRAN包和D. Twisk的C翻译。这些版本的注释包含在此实现中。

示例

use gcv_spline::GcvSpline;

// Points describe the function y = x**2
// Note that explicit typing is required when using literals
// to facilitate generic type support in gcv_spline
let time: Vec<f64> = vec![0., 1., 3., 4., 5., 6.];
let values = vec![0., 1., 9., 16., 25., 36.];

let spline = GcvSpline::from_data(&time, &values).unwrap();
// Interpolate at a missing point.
// This should be close to the expected value of 4.
assert!((spline.single_point(2.) - 4.).abs() < 1e-12);
// Take derivatives at the interpolated point.
// First derivative should be close to 4.
assert!((spline.point_derivative(2., 1) - 4.).abs() < 1e-12);
// Second derivative should be close to 2.
assert!((spline.point_derivative(2., 2) - 2.).abs() < 1e-12);

依赖项

~560KB
~11K SLoC