My MATLAB code is as follows:

w_hat(:,j) = pinv(H_int + N_0 * eye(Nt)) * h(:,j,i);

The variable is addressed to H_int.

However, some errors occured when I ran the code, shown as below:

"Undefined function or method ‘svd’ for input arguments of type ‘cvx’."

I guess it must be illegal to use pinv for a variable in CVX.

So how can I express matrix inverse operation in CVX?

# How to do matrix inverse in CVX

**nobita513**#1

**Mark_L_Stone**(Mark L. Stone) #2

It depends on what you need to do with the inverse. For instance, matrix_frac is available, and it reformulates behind the scenes to an SDP, via Schur complement as you can see in this code segment from matrix_frac

```
elseif cvx_isaffine( x ) && cvx_isaffine( Y ),
n = size( x, 1 );
z = [];
cvx_begin
epigraph variable z
[Y x; x' z] == semidefinite( n+1 ); %#ok
cvx_end
```

If the matrix inverse appears in an inherently non-convex way, you will not be able to formulate it in a manner which CVX will accept.

You can get some ideas from chapters 4 and 5 of http://stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf .

If matrix_frac does what you need, you can use that. Otherwise, you’ll have to reformualte your problem in a way which does not explicitly involve the inverse of a matrix which is a CVX variable or expression.