如何在MATLAB中求解二次约束优化问题

时间:2014-11-03 23:16:41

标签: matlab optimization

我想解决有效以下最小化问题

min(w ^ T B w + w * g),s.t。 || w || _2< = Delta。,B是正定的

这相当于“信任区域步骤”[更多'& Sorenson],MATLAB doc说它用于fsolve函数。

然而,fsolve函数评估函数F(x)= 0,而不是我想要解决的最小化问题。

任何想法如何使用matlab实现的“信任区域步骤”来解决我的问题?

我想尝试解决我的最小化问题拉格朗日的一阶导数。但我不确定它是否相同。 即使用fsolve与F(x)= [(B + lambda * I) w + g; w ^ T w - Delta] 其中x = [w; λ1

提前谢谢你 Yuval

2 个答案:

答案 0 :(得分:1)

fsolve解决了非线性方程组。它可以使用信任区域方法来执行此操作。但是,这不是你要问的问题;您正在询问如何高精度地解决特定的信任区域子问题。 (你的TRS是特殊的,因为目标函数是凸的。如果B是无限的,TRS仍然可以快速解决。)

您可以找到目标的无约束最小值-B ^ { - 1} g / 2。如果这在大多数Delta都有规范,你就完成了。否则,您希望找到最小的lambda> = 0,使得 - (B + lambda I)^ { - 1} g / 2具有最多Delta的范数。有一个非常快速的迭代,使用一些Cholesky因子找到一个合适的lambda,但我不记得它是什么。

答案 1 :(得分:0)

你应该使用CG Steilhaug。其他任何东西都是矫枉过正的。

您可以参考任何标准优化教科书了解详细信息,但算法专门旨在解决此问题。

代码也可用here