【CVX工具箱报错:将定义理解成等式约束】

CVX工具箱报错:将定义理解成等式约束

CVX模型

function s=GroupSparse_cvx(z,phi,block_num,ebisilon)
[row,col]=size(phi);
N=col/block_num;
M=row/block_num;
phi_block=zeros(M,N,block_num);
z_block=zeros(M,block_num);
for nn=1:block_num
    phi_block(:,:,nn)=phi((nn-1)*M+1:nn*M,(nn-1)*N+1:nn*N);
    z_block(:,nn)=z((nn-1)*M+1:nn*M);
end
cvx_begin sdp
    variable S(N,block_num) complex
    variable data_error(block_num,1)
    for mm=1:block_num
        data_error(mm)=norm(z_block(:,mm)-phi_block(:,:,mm)*S(:,mm));
    end    
    minimize norms(S,2,1)
    subject to
         sum(data_error)<=ebisilon;
cvx_end

s=reshape(S.',[],1);
end

报错信息

The following cvx variable(s) have been cleared or overwritten:
   data_error
This is often an indication that an equality constraint was
written with one equals '=' instead of two '=='. The model
must be rewritten before cvx can proceed.

解决方案

将问题上传至CVX论坛后得到解答,问题来自于这里我是希望data_error作为一个辅助变量储存多个二范数计算结果。但是我却定义了它。但是根据CVX 用户手册里的说明,在CVX模型中待优化的变量是不能被重写或者赋值的。故而CVX工具箱看到我将二范数赋值给data_error就理解成我写的应该是一个约束,建议我使用*==*。

实际上我希望data_error是执行一个计算二范数的操作,并不是一个去求解data_error。所以这里应该使用expression去声明data_error。因为CVX模型中expression是可以被重写或者赋值的,相当于将一个施加于变量的函数或者说操作赋给了该expression

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值