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]中
.Optimal
x
也是一个分布,因此它的所有条目都应该在
[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页面上有一个示例。