3
$\begingroup$

I am trying to find my kraus representation from my process matrix. Suppose that, I have these process matrix:

proces_matrix = [[ 1. 0. 0. 0. ] [-0. 0.537 -0.004 -0.005] [ 0.023 0.014 0.635 -0.03 ] [ 0.011 -0.009 0.017 0.883]]] 

To find the kraus representation, I tried 2 methods.

  1. I first tried to use to_kraus function in qutip. According to API documentation, to_kraus Converts a Qobj representing a quantum map to a list of quantum objects, each representing an operator in the Kraus decomposition of the given map. When I gave my process matrix to the function, as a result I got my process matrix back.

The code is pretty simple:

 q_proces_matrix = qutip.Qobj(proces_matrix) kraus_rep = qutip.to_kraus(q_proces_matrix) 
  1. Then I thought, I am doing something wrong so I asked this question, and thanks to a the answer, I first find my Choi matrix with the function of to_choi in qutip and then I used choi_to_kraus function in qutip. The definition of the function is enter link description here It takes choi matrices and turns kraus representations However I got my process matrices as output instead of Kraus representations.

The code is again pretty simple:

q_proces_matrix = qutip.Qobj(proces_matrix) choi = qutip.to_choi(q_proces_matrix) kraus_rep = qutip.choi_to_kraus(choi) 
  1. AFter all, I just found the eigenvectors of my Choi matrices and It means the superket operation of my kraus representations. But I am quite confused what I did wrong with qutip function and I did not get my Kraus representations from the functions

Could someone explain me what I missed in qutip?

$\endgroup$
1
  • $\begingroup$ it might be easier to answer the question is you add a working code snippet showing what exactly you did $\endgroup$ Commented Feb 3, 2022 at 11:27

1 Answer 1

2
$\begingroup$

In QuTiP, there are different Qobj types for operators and superoperators, and the function to_choi will only do what you expect it to if the input has type super. If you change qutip.Qobj(proces_matrix) to qutip.Qobj(proces_matrix, type='super'), everything should work.

The reason you get the same thing back otherwise is because QuTiP converts to type=oper by default with Qobj() and thus assumes your input is just an operator in the unvectorized convention, such as a single Kraus operator. Then with your code you ended up converting this to a Choi matrix and back to just a single Kraus operator.

$\endgroup$
2
  • 2
    $\begingroup$ As a follow up, this should also work by just using the to_kraus function directly - no need to convert to Choi matrix. If the argument given to to_kraus has type super, it will give you the Kraus operators correctly. $\endgroup$ Commented Feb 3, 2022 at 22:44
  • $\begingroup$ @chrysaor4 Thanks, you saved me!! $\endgroup$ Commented Feb 3, 2022 at 23:46

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.