Tekil matrislerin logaritması

Sep 19 2020

Aşağıdaki miktarı hesaplamak istedim:

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

gibi göreceli entropi . Buraya,$\rho_1, \rho_2$ ortogonal olmayan desteğe sahip pozitif yarı kesin matrislerdir (böylece şey farklılaşmaz - gibi terimler $0 \log[0]$ standart varsayım olan sıfıra alınmalıdır) ve $Tr$ izdir.

Benzer bir SE sorusu var , verilen fonksiyon

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

matris logaritması ile ilgilenmesi gereken, ancak garip davranır.

Eski için varsayıyorum ki $\rho_1 =\rho_2 =\{\{0.33,0,0\},\{0,0,0\},\{0,0,0.66\}\}$. Miktar$X$ o zaman olmalı

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

Bununla birlikte, tanımda MatriLogSafe kullanmak farklı çıktılar verir:

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

Sorun şu ki, MatrixLogSafe bazen "özvektörleri değiştirir",

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

(yani $\log[0.33]= -1.10866$ ve $\log[0.66]=-0.415515$, ancak çıktı {{-1.10866, 0, 0.}, {0., 0., 0.}, {0., 0., - 0.415515}} olmalıdır).

(Bir şekilde problemin sayısal değerler kullanmam olduğunu düşünüyorum, ancak fonksiyonun hem sayısal hem de "tam" (?) Sayılar için çalışmasını istiyorum)

Nasıl düzeltilebilir?


Carl Woll'un verdiği cevabı düşündüm, ancak yine de bir şeyler çalışmıyor. Özellikle, iki matrisi düşünü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}}

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

çirkin olabilirler ama ikisi de Hermitçi ve pozitif-yarı kesin.

Ne kadar karmaşık olsam da $X$ ($X=densityTrace[\rho_1,\rho_2]=-0.0019613 + 0.393667 I$), olamaz!

Ancak, önce sayısal matrisleri hesaplarsam gerçek çıktı elde ederim $densityTrace[N[\rho_1],N[\rho_2]]=-0.0432473$ (?!)

Yoğunluk İzinin tanımını biraz değiştirdim

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 ekleyerek), bazı çok küçük hayali "israftan" kurtulmak için, bu iyi bir fikir mi?

Yanıtlar

5 CarlWoll Sep 20 2020 at 00:29

Belki Eigensystemtekil matrisinizi dönüştürmek için kullanabilirsiniz$\rho_2$ içine $S.d.S^{-1}$ve sonra döngüsel özelliğini kullanın Tr. Yani:

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

Bu fikri uygulayan bazı kodlar:

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

Örnek matrisleriniz için:

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

-0.640099

2 SjoerdSmit Sep 18 2020 at 22:43

Tekilliği daha önce tespit etmek muhtemelen daha kolaydır:

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

Tam olarak ihtiyacınız olan durum konusunda yanılıyor olabilirim. Her halükarda, MatrixFunction[Piecewise[...]]sana pek iyi geleceğini sanmıyorum. # > 0Durumun içinde ne yapması gerektiğinden bile emin değilim MatrixFunction.