Matlab 基于CVX的简单线性约束二次优化算法
(很抱歉格式化,我会尽力)我要解决:Matlab 基于CVX的简单线性约束二次优化算法,matlab,quadratic-programming,cvx,Matlab,Quadratic Programming,Cvx,(很抱歉格式化,我会尽力)我要解决: x = argmin_x (Ax - p)'(Ax - p) s.t. x >= b 其中,A是一个NxH逻辑矩阵(大约半个零,半个一),b是一个Hx1常量向量,其中每个条目都是相同的(例如,b=(0.1,0.1,0.1…)p是一个常量Nx1概率向量,因此所有条目都在[0,1]中.Optimalx也是一个分布,因此它的所有条目都应该在[0,1]中。请注意,实际上H非常大,例如200万,N相对较小,例如150 我目前正在使用CVX解决此问题。明确地说,
x = argmin_x (Ax - p)'(Ax - p)
s.t. x >= b
其中,A
是一个NxH
逻辑矩阵(大约半个零,半个一),b
是一个Hx1
常量向量,其中每个条目都是相同的(例如,b=(0.1,0.1,0.1…)
p
是一个常量Nx1
概率向量,因此所有条目都在[0,1]中
.Optimalx
也是一个分布,因此它的所有条目都应该在[0,1]
中。请注意,实际上H
非常大,例如200万
,N
相对较小,例如150
我目前正在使用CVX解决此问题。明确地说,我的代码是:
b= 0.1.*ones(H,1)/H;
cvx_begin quiet
variable x(H)
minimize( norm((A*x-p),2))
subject to
x >= b;
cvx_end
这会产生正确的结果。但是,当H
较大时,速度相当慢。鉴于我的优化程序的结构(逻辑A、常数约束、没有约束时有解析解的问题等),是否有更好的方法来实现这一点?这里是否推荐CVX
感谢您的帮助。如果您有优化工具箱,您可以使用。CVX页面上有一个示例。