c33ae98Companion to 'Coding closed and open quantum systems in MATLAB' (arXiv:1911.04906)Jeremy Magland 1function [R_sort,L_sort,lambda_sort] = sortingEigenvalues(dim,TOL,L)
3[R,DR] = eig(L); % Right eigenvectors and eigenvalues
4[L,DL] = eig(L'); % Left eigenvectors and eigenvalues
5eig_R = diag(DR); % Right eigenvalues written as a vector
6eig_L = diag(DL); % Left eigenvalues written as a vector
7ind_RL = zeros(dim*dim,2);
8count = 1;
9for n=1:dim*dim % Sorting of eigenvalues
10 an = eig_R(n);
11 for m=1:dim*dim
12 bm = eig_L(m);
13 if(abs(real(an)-real(bm))<TOL && abs(imag(an)-imag(bm))<TOL && count<=dim*dim)
14 ind_RL(count,1) = n;
15 ind_RL(count,2) = m;
16 count = count + 1;
17 end
18 end
19end
20eig_L = eig_L(ind_RL(:,2)'); % Final sorting
21eig_R = eig_R(ind_RL(:,1)');
22L = L(:,ind_RL(:,2)');
23R = R(:,ind_RL(:,1)');
24lambda = eig_R;
25[~,ind] = sort(lambda); % Sorting of eigenvalues
26lambda_sort = lambda(ind); % \lambda_k eigenvalues
27L = L(:,ind);
28R = R(:,ind);
30% Final R_sort and L_sort matrices
31R_sort = cell(1,length(lambda_sort));
32L_sort = cell(1,length(lambda_sort));
33for k=1:length(lambda_sort)
34 R_sort{k} = reshape(R(:,k),dim,dim);
35 L_sort{k} = reshape(L(:,k),dim,dim);
36 Rk = R_sort{k};
37 Lk = L_sort{k};
38 Ck = trace(Lk*Rk);
39 Lk = Lk/sqrt(Ck); % Normalized left eigenmatrices
40 Rk = Rk/sqrt(Ck); % Normalized right eigenmatrices
41 R_sort{k} = Rk;
42 L_sort{k} = Lk;
43end
44end