在MATLAB中使用CVX时如何计算变量向量的范数平方?

时间:2013-10-10 04:03:55

标签: matlab

我想解决凸优化问题。我需要最小化(1/2)*(||W||^2)。 W是一个变量向量。这也是一个约束:y(i)*(transpose(W)*x(i)+b)>=1。 我们需要使用SVM来解决这个问题。所以Y=[1;1;1;-1;-1]。 b也是一个变量向量,它是截距项。我们需要找到最优W和最优b,以使(1/2)*(||W||^2)最小。 x(i)是我们想要分类的域中的点。

这是我编码的但却错了。它只是不起作用。

cvx_begin
    variables W(2, 1) b(5, 1)
    minimize( 0.5*(pow_cvx(norm(W, 2), 2, 2)) )
    subject to
        Y*(x*W+b) >= One
cvx_end

1 个答案:

答案 0 :(得分:2)

如果没有提供重现错误消息的代码,很难猜出CVX的问题。但作为第一个提示,您可以将问题中的目标修改为

cvx_begin
    variables W(2, 1) b(5, 1)
    minimize( norm(W, 2) )
    subject to
        Y*(x*W+b) >= One
cvx_end

,这将提供相同的最佳解决方案。您的目标(1/2)*(||W||^2)的形式通常用于派生,以使数学更容易处理,但您不需要此表格用于CVX。否则你可以写

cvx_begin
    variables W(2, 1) b(5, 1)
    minimize( 0.5*sum(W.*W) )
    subject to
        Y*(x*W+b) >= One
cvx_end