18个版本 (破坏性更新)
0.14.0 | 2024年7月22日 |
---|---|
0.13.1 | 2023年9月2日 |
0.13.0 | 2023年1月27日 |
0.12.0 | 2022年2月4日 |
0.4.0 | 2020年3月8日 |
#121 in 算法
3,714 每月下载量
用于 3 crates
185KB
4K SLoC
levenberg-marquardt
非线性最小二乘问题求解器
该实现是从经典的MINPACK Levenberg-Marquardt (LM) 算法实现移植过来的。这个版本的算法有时被称为精确 LM。
所有当前的单元测试表明,我们在浮点级别上实现了与MINPACK实现相同的输出,特别是对于秩不足的不稳定问题。这主要用于测试。Fortran算法通过添加对NaN
和inf
的处理进行了扩展,类似于lmfit所做的那样。
该包提供了一个名为minpack-compat
的功能,该功能将浮点常数设置为MINPACK使用的值,并移除了“零残差”的终止条件。这对于与MINPACK实现相同的输出是必要的,但通常不推荐。
使用
有关详细信息,请参阅文档。
impl LeastSquaresProblem<f64> for Problem {
// define this trait for the problem you want to solve
}
let problem = Problem::new(initial_params);
let (problem, report) = LevenbergMarquardt::new().minimize(problem);
assert!(report.termination.was_successful());
参考文献
软件
该算法的一个原始参考文献似乎是
Moré J.J. (1978) The Levenberg-Marquardt algorithm: Implementation and theory. In: Watson G.A. (eds) Numerical Analysis. Lecture Notes in Mathematics, vol 630. Springer, Berlin, Heidelberg.
MINPACK的一个作者。
该算法也以该包实现的形式描述在Nocedal和Wright的《数值优化》一书中,第4章和第10章。
依赖关系
~3MB
~66K SLoC