分类 算法与数学基础 下的文章
基于Boost的计算两个凸多边形的交集区域
umeyama算法(SVD分解求解两组点集的:R、T、s的关系)
1、Eigen实现 bool with_scaling = false; // 3D刚体变换时,不需要缩放
Eigen::Matrix4d = Eigen::umeyama(src_points, dst_points, with_scaling)
Matlab与Eigen中的旋转矩阵转四元数的差异
1、背景
同样一个旋转矩阵R,分别用Matlab与Eigen中的函数实现旋转矩阵到四元数,发现其结果有差异(本质是相同的):
R:0 -0.277762 0.96065-1 0 00 -0.96065 -0.2777622、
Matlab的结果:
rotm2quat(R)或 quat = quaternion(R', "rotmat", "frame")
或 quat = quaternion(R, "rotmat", "point") 结果为
开源非线性优化算法库
1、Ceres Solver
开发语言: C++
官方地址: http://ceres-solver.org/
Ceres Solver 是一个开源c++库,用于建模和解决大型、复杂的优化问题。它可用于求解带边界约束的非线性最小二乘问题和一般的无约束优化问题。它是一个成熟的,功能丰富的,高性能的库。
2、NLopt
开发语言: C
官方地址: https://nlopt.readthedocs.io/en/latest/#nlopt_1
github: https://github.com/stevengj/nlopt/tree/master
NLopt是一个用于非线性优化的免费/开源库,为许多不同的在线免费优化例程以及各种其他算法的原始实现提供了一个公共接口。
3、Ipopt
开发语言: C++
github: https://github.com/coin-or/Ipopt
Ipopt (Interior Point OPTimizer,发音为eye-pea-Opt)是一个用于大规模非线性优化的软件包。
4、ALGLIB
开发语言: C++
官方地址: https://www.alglib.net/
5、g2o
开发语言: C++
github: https://github.com/RainerKuemmerle/g2o
g20是一个开源的c++框架,用于优化基于图的非线性误差函数。g20被设计成可以很容易地扩展到广泛的问题,并且通常可以在几行代码中指定一个新问题。
6、GSL
开发语言: C/C++
官方地址: https://www.gnu.org/software/gsl/
GNU科学库(GSL)是一个面向C和c++程序员的数字库。它是GNU通用公共许可证下的自由软件。该库提供了广泛的数学例程,如随机数生成器,特殊函数和最小二乘拟合。
7、levmar
开发语言: C/C++
官方地址: http://users.ics.forth.gr/~lourakis/levmar/
evmar : 用C/C++实现的Levenberg-Marquardt 非线性最小二乘算法。 Levenberg-Marquardt (LM)算法是一种求函数的局部最小值的迭代技术,该函数表示为非线性函数的平方和。它已经成为非线性最小二乘问题的标准技术,可以被认为是最陡下降法和高斯-牛顿法的结合。当当前解与正确解相去甚远时,算法表现得像最陡下降法:缓慢,但保证收敛。当当前解接近正确解时,它成为高斯-牛顿方法。
8、OptimLib
开发语言: C/C++
官方地址: https://www.kthohr.com/optimlib.html
github: https://github.com/kthohr/optim
OptimLib是一个轻量级的c++库,用于非线性函数的数值优化方法。