#optimization #squares #computer-vision #unit-testing #marquardt #levenberg

无std levenberg-marquardt

基于nalgebra构建的Levenberg-Marquardt算法

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 算法

Download history 527/week @ 2024-05-01 656/week @ 2024-05-08 852/week @ 2024-05-15 726/week @ 2024-05-22 1077/week @ 2024-05-29 1056/week @ 2024-06-05 912/week @ 2024-06-12 933/week @ 2024-06-19 898/week @ 2024-06-26 834/week @ 2024-07-03 1539/week @ 2024-07-10 1251/week @ 2024-07-17 1041/week @ 2024-07-24 733/week @ 2024-07-31 1220/week @ 2024-08-07 474/week @ 2024-08-14

3,714 每月下载量
用于 3 crates

MIT 许可证

185KB
4K SLoC

levenberg-marquardt

Discord Crates.io MIT/Apache docs.rs LoC ci

非线性最小二乘问题求解器

该实现是从经典的MINPACK Levenberg-Marquardt (LM) 算法实现移植过来的。这个版本的算法有时被称为精确 LM。

所有当前的单元测试表明,我们在浮点级别上实现了与MINPACK实现相同的输出,特别是对于秩不足的不稳定问题。这主要用于测试。Fortran算法通过添加对NaNinf的处理进行了扩展,类似于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