# Variable definition for hermitian matrix

Hi,

Let’s say I have following hermitian matrix 3 by 3:

`````` X=[  1.1025 + 0.0000i  -0.5512 + 0.9548i  -0.5512 - 0.9548i
-0.5512 - 0.9548i   1.1025 + 0.0000i  -0.5513 + 0.9548i
-0.5512 + 0.9548i  -0.5513 - 0.9548i   1.1025 + 0.0000i]
``````

I would like to define a variable for each entry of the matrix and tried do it as follows:

``````variable X1_1
variable X1_2 complex
variable X2_2
variable X1_3 complex
variable X2_3 complex
variable X3_3
``````

And construct the X as follows:

``````X= [   X1_1   X1_2   X1_3;...
X1_2'  X2_2   X2_3;...
X1_3'  X2_3'  X3_3]
``````

Am I right what I’m doing? Any help will be appreciated.

What are you trying to do with X after it is constructed?

Are the diagonal elements of X always real? If so, then your X is “correct”, but you have defined it in a rather laborious way, which is not a big deal for a 3 by 3 matrix, but would be for a large matrix. if the diagonal of X needs to be real, you could add a constraint:

``````variable X(n,n) hermitian
imag(diag(X)) == 0``````

By using similar block matrixes I will build a bigger sparse hermitian matrix. In some case the diagonals will be real, for some it will be complex number.
Do you think that I must have `imag(diag(X)) == 0` constraint to make diagonals real or it is optional.

If you have defined the elements to be complex or (as part of a) hermitian (matrix), then in general, you need a constraint to ensure those elements are real. If the elements are defined to be real (i…e. complex or hermitian not specified), then a constraint is not needed.

Thank you for clear explanation of that Mark. Appreciated.