dq.entropy_relative
entropy_relative(rho: QArrayLike, sigma: QArrayLike) -> Array
Returns the quantum relative entropy between two kets or density matrices.
It is defined by \(S_{KL}(\rho || \sigma) = \tr{\rho (\ln \rho - \ln \sigma)}\).
Note
The relative entropy is not symmetric.
Parameters
-
rho _(qarray-like of shape (..., n, 1) or (..., n, n))_
–
Ket or density matrix.
-
sigma _(qarray-like of shape (..., n, 1) or (..., n, n))_
–
Ket or density matrix.
Returns
(array of shape (...)) Real-valued quantum relative entropy.
Examples
State with respect to itself:
>>> rho = dq.fock_dm(2, 0) # |0><0|
>>> dq.entropy_relative(rho, rho)
Array(0., dtype=float32)
Pure state with respect to a maximally mixed state, and vice versa:
>>> pure = dq.fock_dm(2, 0) # |0><0|
>>> maximally_mixed = (dq.fock_dm(2, 0) + dq.fock_dm(2, 1)).unit() # I/2
>>> dq.entropy_relative(pure, maximally_mixed) # ln 2 ~= 0.693
Array(0.693, dtype=float32)
>>> dq.entropy_relative(maximally_mixed, pure) # support mismatch -> +∞
Array(inf, dtype=float32)
Pure state with respect to diagonal state in same basis:
>>> rho = dq.fock_dm(2, 0) # |0><0|
>>> w = 0.3
>>> sigma = w * dq.fock_dm(2, 0) + (1 - w) * dq.fock_dm(2, 1)
>>> dq.entropy_relative(rho, sigma)
Array(1.204, dtype=float32)
>>> -jnp.log(w)
Array(1.204, dtype=float32, weak_type=True)
Orthogonal pure states:
>>> rho = dq.fock_dm(2, 1) # |1><1|
>>> sigma = dq.fock_dm(2, 0) # |0><0|
>>> dq.entropy_relative(rho, sigma)
Array(inf, dtype=float32)