我是matlab的新手,并尝试用它做一些能量最小化工作。能量函数将3通道图像作为输入。对于每个频道,都有一个能量项如下:
E = x'Ax + || Bx || ^ 2 + w * || x-c || ^ 2,
其中x,c是长度为N的向量,A是大小为N * N的矩阵。 A是稀疏且正半正定的,每行有25个非零元素,对x的所有元素都有约束。 B的大小为M * N. B也是稀疏的,每行有2个非零元素。 N大约是850,000。 M大约是1,000,000。虽然B给出超过N个约束,但x的某些元素与|| Bx || ^ 2项无关。术语|| x-c || ^的权重w非常小,比如1e-3。
我搜索过matlab文档。看起来我应该使用lsqnonlin
来解决这个问题。在matlab中是否有特殊设计的函数或选项用于二次形式最小化?
对于那些熟悉计算机视觉文献的人,我实际上是在尝试在“照片集中的相干内在图像”中实现该算法。作者说他们使用matlab反斜杠算子来最小化能量,但是我看不出反斜杠算子如何用于二次型问题。
答案 0 :(得分:1)
是的,有一个专门用于优化二次成本函数的函数:quadprog。但是,如果您没有任何线性约束,那么您应该能够将成本函数编写为
E = x'Mx/2 + vx + k
通过采用一阶导数,可以找到零梯度点(希望最小):
dE/dx = Mx + v
将它们设置为零,给出解决方案:
x = -M\v