这个问题与“C ++中的数字配方”一书有关,因此它将保留给了解它的人以及多维优化。
我正在编写一个需要搜索多维根的程序,为了解决这个问题,我使用的是多维牛顿根查找方法,即“newt”过程。
对于那些对细节感兴趣的人,我试图根据一些特征点(两个摄像头看到的特征点)将可变形3D模型拟合到一个物体的立体视图。
为此,我使用了具有以下内容的newt过程:
我的问题是我有比输入参数(11)更多的输出参数(14):每当我调用“newt”时,算法总是会收敛,但是它会找到一个解决方案,几乎完美地最小化了11个第一个输出参数,但是在剩下的3个参数上有很多错误。
但是我希望错误在输出参数之间统一划分。
我已经尝试了下面描述的方法:
有没有人知道一种更通用的方法,其中根查找算法会支持在输出参数之间均匀划分的错误,而不是支持第一个参数?
答案 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。