Logarit của ma trận số ít

Sep 19 2020

Tôi muốn tính toán số lượng sau:

$X=Tr[\rho_1 \log[\rho_2]]$,

như trong entropy tương đối . Đây,$\rho_1, \rho_2$ là ma trận bán kỳ dương có hỗ trợ không trực giao (để thứ không phân kỳ - các thuật ngữ như $0 \log[0]$ nên được đưa về 0, đó là giả định tiêu chuẩn) và $Tr$ là dấu vết.

Có một câu hỏi SE tương tự , chức năng đã cho

MatrixLogSafe[x_] := MatrixFunction[Piecewise[{{Log[#1], #1 > 0}}] &, x]

Tuy nhiên, sẽ xử lý với lôgarit ma trận, nó hoạt động rất lạ.

Đối với người yêu cũ, tôi cho rằng $\rho_1 =\rho_2 =\{\{0.33,0,0\},\{0,0,0\},\{0,0,0.66\}\}$. Số lượng$X$ sau đó nên được

$X=0.33 \log[0.33] + 0.66 \log[0.66]= -0.640099$.

Tuy nhiên, việc sử dụng MatriLogSafe trong định nghĩa cho kết quả khác nhau:

In[402]:= Tr[{{0.33, 0, 0}, {0, 0, 0}, {0, 0, 0.66}}.MatrixLogSafe[{{0.33, 0, 0}, {0, 0, 0}, {0, 0, 0.66}}]]

Out[402]= -0.731717

Vấn đề là MatrixLogSafe đôi khi "chuyển đổi các trình điều chỉnh riêng",

In[403]:= MatrixLogSafe[{{0.33, 0, 0}, {0, 0, 0}, {0, 0, 0.66}}]

Out[403]= {{0., 0., 0.}, {0., -0.415515, 0.}, {0., 0., -1.10866}}

(vì thế $\log[0.33]= -1.10866$ và $\log[0.66]=-0.415515$, nhưng đầu ra phải là {{-1.10866, 0, 0.}, {0., 0., 0.}, {0., 0., - 0.415515}}).

(Bằng cách nào đó, tôi nghĩ rằng vấn đề là tôi sử dụng các giá trị số, nhưng tôi muốn rằng hàm hoạt động cho cả số và "chính xác" (?))

Làm thế nào một người có thể sửa chữa nó?


Tôi đã xem xét câu trả lời do Carl Woll đưa ra, tuy nhiên vẫn có điều gì đó không hoạt động. Đặc biệt, hãy xem xét hai ma trận,$\rho_1$:

{{1/4, 1/4 E^(-((I \[Pi])/10)), 1/4 E^(-((I \[Pi])/10)), 1/
  4}, {1/4 E^((I \[Pi])/10), 1/4, 1/4, 
  1/4 E^((I \[Pi])/10)}, {1/4 E^((I \[Pi])/10), 1/4, 1/4, 
  1/4 E^((I \[Pi])/10)}, {1/4, 1/4 E^(-((I \[Pi])/10)), 
  1/4 E^(-((I \[Pi])/10)), 1/4}}

và $\rho_2$:

{{1/4 (1 - 1/Sqrt[E]) + 1/(4 Sqrt[E]), 
  1/4 E^(-(1/2) - (I \[Pi])/10) + 
   1/2 (1 - 1/Sqrt[E]) (1/4 E^(-((I \[Pi])/10)) + 
      1/4 E^((I \[Pi])/10)), 
  1/4 E^(-(1/2) - (I \[Pi])/10) + 
   1/2 (1 - 1/Sqrt[E]) (1/4 E^(-((I \[Pi])/10)) + 
      1/4 E^((I \[Pi])/10)), 
  1/(4 Sqrt[
    E]) + (1 - 1/Sqrt[E]) (1/4 E^(-((I \[Pi])/10)) + 
      1/4 E^((I \[Pi])/10))^2}, {1/4 E^(-(1/2) + (I \[Pi])/10) + 
   1/2 (1 - 1/Sqrt[E]) (1/4 E^(-((I \[Pi])/10)) + 
      1/4 E^((I \[Pi])/10)), 1/4 (1 - 1/Sqrt[E]) + 1/(4 Sqrt[E]), 
  1/(4 Sqrt[
    E]) + (1 - 1/Sqrt[E]) (1/4 E^(-((I \[Pi])/10)) + 
      1/4 E^((I \[Pi])/10))^2, 
  1/4 E^(-(1/2) + (I \[Pi])/10) + 
   1/2 (1 - 1/Sqrt[E]) (1/4 E^(-((I \[Pi])/10)) + 
      1/4 E^((I \[Pi])/10))}, {1/4 E^(-(1/2) + (I \[Pi])/10) + 
   1/2 (1 - 1/Sqrt[E]) (1/4 E^(-((I \[Pi])/10)) + 
      1/4 E^((I \[Pi])/10)), 
  1/(4 Sqrt[
    E]) + (1 - 1/Sqrt[E]) (1/4 E^(-((I \[Pi])/10)) + 
      1/4 E^((I \[Pi])/10))^2, 1/4 (1 - 1/Sqrt[E]) + 1/(4 Sqrt[E]), 
  1/4 E^(-(1/2) + (I \[Pi])/10) + 
   1/2 (1 - 1/Sqrt[E]) (1/4 E^(-((I \[Pi])/10)) + 
      1/4 E^((I \[Pi])/10))}, {1/(
   4 Sqrt[E]) + (1 - 1/Sqrt[E]) (1/4 E^(-((I \[Pi])/10)) + 
      1/4 E^((I \[Pi])/10))^2, 
  1/4 E^(-(1/2) - (I \[Pi])/10) + 
   1/2 (1 - 1/Sqrt[E]) (1/4 E^(-((I \[Pi])/10)) + 
      1/4 E^((I \[Pi])/10)), 
  1/4 E^(-(1/2) - (I \[Pi])/10) + 
   1/2 (1 - 1/Sqrt[E]) (1/4 E^(-((I \[Pi])/10)) + 
      1/4 E^((I \[Pi])/10)), 1/4 (1 - 1/Sqrt[E]) + 1/(4 Sqrt[E])}}

có thể xấu xí, nhưng cả hai đều là Hermitian và tích cực bán xác định.

Tôi thấy phức tạp $X$ ($X=densityTrace[\rho_1,\rho_2]=-0.0019613 + 0.393667 I$), mà không thể được!

Tuy nhiên, nếu tôi tính toán trước hết các ma trận số, tôi nhận được kết quả thực $densityTrace[N[\rho_1],N[\rho_2]]=-0.0432473$ (?!)

Tôi đã thay đổi một chút định nghĩa về mật độ

densityTrace[a_, b_] := Module[{λ, S, d},
{λ, S} = Eigensystem[b];
S = Transpose[S];
d = Diagonal[Inverse[S]. a. S];
Total @ MapThread[If[Chop[#1]==0,0,Chop[#1] Log[Chop[#2]]]&, {d, λ}]

]

(thêm Chop), để loại bỏ một số "chất thải" tưởng tượng rất nhỏ, có phải là một ý kiến ​​hay không?

Trả lời

5 CarlWoll Sep 20 2020 at 00:29

Có thể bạn có thể sử dụng Eigensystemđể biến đổi ma trận số ít của mình$\rho_2$ thành $S.d.S^{-1}$, và sau đó sử dụng thuộc tính theo chu kỳ của Tr. Đó là:

$$ \begin{align} \text{Tr}{\left(\rho_1 . \log(\rho_2) \right)}&= \text{Tr}{\left(\rho_1 . \log(S . d . S^{-1})\right)} \\ &= \text{Tr}{\left(\rho_1 . S . \log(d) . S^{-1} \right)}\\ &= \text{Tr}{\left(S^{-1} . \rho_1 . S . \log(d)\right)}\\ &= \text{Diagonal}{\left( S^{-1} . \rho_1 . S\right) . \log (d)} \end{align} $$

Một số mã triển khai ý tưởng này:

densityTrace[a_, b_] := Module[{λ, S, d},
    {λ, S} = Eigensystem[b];
    S = Transpose[S];
    d = Diagonal[Inverse[S]. a. S];
    Total @ MapThread[If[#1==0,0,#1 Log[#2]]&, {d, λ}]
]

Đối với ma trận mẫu của bạn:

m1 = m2 = DiagonalMatrix[{.33, 0, .66}];
densityTrace[m1, m2]

-0.640099

2 SjoerdSmit Sep 18 2020 at 22:43

Có lẽ dễ dàng hơn để phát hiện điểm kỳ dị sớm hơn:

MatrixLogSafe[x_?SquareMatrixQ] /; Det[x] > 0 := MatrixLog[x];
MatrixLogSafe[x_?SquareMatrixQ] := ConstantArray[0, Dimensions[x]];

Tôi có thể sai về tình trạng chính xác mà bạn cần. Dù sao đi nữa, tôi cũng không mong MatrixFunction[Piecewise[...]]làm được nhiều điều tốt cho bạn. Tôi thậm chí không chắc điều kiện # > 0phải làm gì bên trong MatrixFunction.