Logarithmus singulärer Matrizen

Sep 19 2020

Ich wollte folgende Menge berechnen:

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

wie in der relativen Entropie . Hier,$\rho_1, \rho_2$ sind positive semidefinite Matrizen mit nicht orthogonaler Unterstützung (damit das Ding nicht auseinander geht - Begriffe wie $0 \log[0]$ sollte auf Null gesetzt werden, was Standardannahme ist) und $Tr$ ist Spur.

Es gibt eine ähnliche SE-Frage , die gegebene Funktion

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

was sich mit dem Matrixlogarithmus befassen sollte, verhält sich jedoch seltsam.

Zum Beispiel nehme ich das an $\rho_1 =\rho_2 =\{\{0.33,0,0\},\{0,0,0\},\{0,0,0.66\}\}$. Die Quantität$X$ sollte dann sein

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

Die Verwendung von MatriLogSafe in der Definition führt jedoch zu einer anderen Ausgabe:

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

Das Problem ist, dass MatrixLogSafe manchmal "die Eigenvektoren schaltet",

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

(damit $\log[0.33]= -1.10866$ und $\log[0.66]=-0.415515$, aber die Ausgabe sollte {{-1.10866, 0, 0.}, {0., 0., 0.}, {0., 0., - 0.415515}} sein.

(Irgendwie denke ich, dass das Problem darin besteht, dass ich numerische Werte verwende, aber ich möchte, dass die Funktion sowohl für numerische als auch für "exakte" (?) Zahlen funktioniert.)

Wie kann man das beheben?


Ich habe die Antwort von Carl Woll in Betracht gezogen, aber immer noch funktioniert etwas nicht. Betrachten Sie insbesondere zwei Matrizen:$\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}}

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

die vielleicht hässlich sind, aber beide sind hermitisch und positiv-halb-definitiv.

Ich werde jedoch komplex $X$ (($X=densityTrace[\rho_1,\rho_2]=-0.0019613 + 0.393667 I$), was nicht sein kann!

Wenn ich jedoch zuerst die numerischen Matrizen berechne, erhalte ich eine echte Ausgabe $densityTrace[N[\rho_1],N[\rho_2]]=-0.0432473$ (?!)

Ich habe die Definition von densityTrace leicht geändert

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

]]

(Chop hinzufügen), um einige sehr kleine imaginäre "Abfälle" loszuwerden, ist es eine gute Idee?

Antworten

5 CarlWoll Sep 20 2020 at 00:29

Vielleicht können Sie damit EigensystemIhre singuläre Matrix transformieren$\rho_2$ in $S.d.S^{-1}$und verwenden Sie dann die zyklische Eigenschaft von Tr. Das ist:

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

Ein Code, der diese Idee umsetzt:

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

Für Ihre Beispielmatrizen:

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

-0,640099

2 SjoerdSmit Sep 18 2020 at 22:43

Es ist wahrscheinlich einfacher, die Singularität früher zu erkennen:

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

Ich könnte mich in Bezug auf den genauen Zustand, den Sie benötigen, irren. Ich erwarte jedenfalls nicht MatrixFunction[Piecewise[...]]viel Gutes für Sie. Ich bin mir nicht mal sicher, was der Zustand # > 0in mir bewirken soll MatrixFunction.