cvx报错Invalid quadratic form(s): not a square
最近在用matlab的CVX工具箱解决凸优化的时候遇见一些问题,鉴于网上关于CVX的问题整理,因此我这里整理一下我遇到的一些问题和解决办法。
Invalid quadratic form(s): not a square
出现这个问题的原因是因为CVX是不支持两个变量直接相乘的,如果在约束中或者目标函数中不能避免的话,这里有两个方法可以解决。
- GP mode模式(不建议)
调用方法 cvx_begin gp 就可以了,就不会出现上述报错了。之所以不建议是因为GP模式是为了解决具有特定形式的问题。 - 利用 prod_inv函数
这个函数是cvx自带的一个函数,用于处理形如 constant/(xy)这样的问题,调用方法是 constantprod_inv([x y])。
注: prod_inv还不完善,函数定义的时候存在一个BUG,当你按照上面的操作,运行的时候会报错:Invalid computation: geo_mean( {mixed real affine/log-affine} ),这个时候他会告诉你 出错 cvx/prod_inv (line 38)
geo_mean( cat( dim, x, y ), dim, [ ones(n,1) ; p ] ) >= 1; %#ok ,进入这个函数,在第37行插入n = length(x),就行了。