Need Help with Convex Reformulation for Matrix Product in CVX Optimization

Hi everyone,

I’m currently tackling a minimization problem where the objective function involves the Frobenius norm of the difference between a reference matrix and a matrix that results from a 2D convolution. The challenge arises because this convolution is represented as a matrix multiplication involving optimization variables, which are not natively supported by MATLAB’s conv2 function when used with CVX variables.

To work around this, I’ve redefined the 2D convolution as a matrix multiplication. However, the core issue now is that the operation includes products of two matrices. In a simple word the function f(x,y) = xy which I’m facing is not a convex function. This product leads to a “Disciplined convex programming error” due to the non-convex nature of the function.

Here’s a snippet of my code:

cvx_begin
cvx_solver gurobi

    variable x(n^2 + m^2,1)

    ...

    output_temp = reshape(double_blocked_cell * A_vec,output_col_num,output_row_num)';

    ...

    minimize norm(output - vaDes, 'fro')

cvx_end

My main problem is the multiplication double_blocked_cell * A_vec, which isn’t convex. I’m looking for ways to reformulate this problem to fit into the disciplined convex programming framework or to find an equivalent function that can represent the product of these two variables.

Has anyone faced a similar challenge or could point me toward some useful papers or techniques to handle this type of issue?

Thank you for your help!

As you said, this is a non-convex problem. Consider using YALMIP or some other tool which can handle nonlinear least squares.