数字配方/多维根搜索(使用newt):如何最小化最大错误

时间:2011-10-27 21:47:20

标签: c++ mathematical-optimization numerical-methods newtons-method

这个问题与“C ++中的数字配方”一书有关,因此它将保留给了解它的人以及多维优化。

我正在编写一个需要搜索多维根的程序,为了解决这个问题,我使用的是多维牛顿根查找方法,即“newt”过程。

对于那些对细节感兴趣的人,我试图根据一些特征点(两个摄像头看到的特征点)将可变形3D模型拟合到一个物体的立体视图。

为此,我使用了具有以下内容的newt过程:

  • 11输入参数:我的可变形模型可以用11个参数建模(由5个几何参数和6个3D对象位置的自由度组成):
  • 14输出参数我需要找到根:基于相机识别的特征点,并给出“输入参数”的设置,我可以计算一组距离在相机看到的特征点和它们的理论位置之间。我有7个这样的点,所以这给了我14个参数(7个距离乘以2,因为我计算两个摄像机的距离)

我的问题是我有比输入参数(11)更多的输出参数(14):每当我调用“newt”时,算法总是会收敛,但是它会找到一个解决方案,几乎完美地最小化了11个第一个输出参数,但是在剩下的3个参数上有很多错误。

但是我希望错误在输出参数之间统一划分。

我已经尝试了下面描述的方法:

  1. 尝试将14个输出参数组合成11个参数(for 例如,你取一些距离的平均值,而不是使用 两个距离)。但是我对这种方法并不是100%满意
  2. 根据以下原则混合多种解决方案:
    • 致电mnewt并记住找到的根
    • 更改14输出参数的顺序
    • 再次致电mnewt并记住找到的根
    • 计算解决方案是两个找到根的平均值
  3. 有没有人知道一种更通用的方法,其中根查找算法会支持在输出参数之间均匀划分的错误,而不是支持第一个参数?

1 个答案:

答案 0 :(得分:2)

您尝试通过求解F(x)来尽量减少f(x)=0,其中x是m维向量,f将此映射为n维向量。如果m < n(在您的情况下为11&lt; 14),您的优化问题欠定

对于此类系统,解决这些问题的一般方法是最小化x上的向量范数。您可以通过针对x^T A x + c f(x)^T f(x)拉格朗日乘数 x最小化系统c来实现此目的。如果没有进一步的信息,您可以将A作为nxn 单位矩阵。这将找到x解决f(x)=0,同时具有最小的范数。

有关使用牛顿方法执行此操作的详细信息,请参阅例如这paper