Logaritma matriks tunggal

Sep 19 2020

Saya ingin menghitung kuantitas berikut:

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

seperti dalam entropi relatif . Sini,$\rho_1, \rho_2$ adalah matriks semidefinite positif dengan dukungan non-ortogonal (sehingga hal tersebut tidak menyimpang - istilah seperti $0 \log[0]$ harus dibawa ke nol, yang merupakan asumsi standar) dan $Tr$ adalah jejak.

Ada pertanyaan SE serupa , fungsi yang diberikan

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

yang harus berurusan dengan logaritma matriks, namun berperilaku aneh.

Untuk mantan saya berasumsi bahwa $\rho_1 =\rho_2 =\{\{0.33,0,0\},\{0,0,0\},\{0,0,0.66\}\}$. Kuantitas$X$ seharusnya

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

Namun, menggunakan MatriLogSafe dalam definisi memberikan hasil yang berbeda:

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

Masalahnya adalah, MatrixLogSafe terkadang "mengalihkan vektor eigen",

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}}

(begitu $\log[0.33]= -1.10866$ dan $\log[0.66]=-0.415515$, tetapi outputnya harus {{-1.10866, 0, 0.}, {0., 0., 0.}, {0., 0., - 0.415515}}).

(Entah bagaimana menurut saya masalahnya adalah saya menggunakan nilai numerik, tetapi saya ingin fungsi tersebut berfungsi untuk angka numerik dan "tepat" (?))

Bagaimana cara memperbaikinya?


Saya telah mempertimbangkan jawaban yang diberikan oleh Carl Woll, namun masih ada yang tidak berfungsi. Secara khusus, pertimbangkan dua matriks,$\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}}

dan $\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])}}

yang mungkin jelek, tetapi keduanya Hermitian dan positif-semi-pasti.

Saya menjadi bagaimanapun kompleks $X$ ($X=densityTrace[\rho_1,\rho_2]=-0.0019613 + 0.393667 I$), yang tidak mungkin!

Namun, jika saya menghitung terlebih dahulu matriks numerik saya mendapatkan keluaran nyata $densityTrace[N[\rho_1],N[\rho_2]]=-0.0432473$ (?!)

Saya telah sedikit mengubah definisi densityTrace

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, λ}]

]

(menambahkan Chop), untuk membuang beberapa "limbah" imajiner yang sangat kecil, apakah itu ide yang bagus?

Jawaban

5 CarlWoll Sep 20 2020 at 00:29

Mungkin Anda bisa menggunakan Eigensystemuntuk mengubah matriks tunggal Anda$\rho_2$ ke $S.d.S^{-1}$, lalu gunakan properti siklis Tr. Itu adalah:

$$ \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} $$

Beberapa kode yang mengimplementasikan ide ini:

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, λ}]
]

Untuk matriks contoh Anda:

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

-0,640099

2 SjoerdSmit Sep 18 2020 at 22:43

Mungkin lebih mudah untuk mendeteksi singularitas lebih awal:

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

Saya bisa saja salah tentang kondisi persis yang Anda butuhkan. Bagaimanapun, saya tidak berharap MatrixFunction[Piecewise[...]]banyak membantu Anda. Saya bahkan tidak yakin apa kondisi # > 0yang seharusnya dilakukan di dalam MatrixFunction.