示例#1
0
def apply_dephasing(number_of_spins, alpha, B,fm_str = 'AFM',kT = 0.0):
    '''
    takes number of spins, alpha, and the magnetic field and returns the
    hamiltonian along with its ground state and the dephased ground state
    choose fm_str = 'FM' for ferromagnetic interaction, and 'AFM' for anti-ferromagnetic 
    '''
    if fm_str == 'FM':
        calc = ising_calculator_FM(number_of_spins, alpha, B)
    elif fm_str == 'AFM':
        calc = ising_calculator_AFM(number_of_spins, alpha, B)
    H = calc.get_H()
    if kT == 0.0:
        energy,groundstate = H.groundstate()
        dm_groundstate = ket2dm(groundstate)
    else:
        Hdata = H.data.todense()
        arr_mp = mp.matrix(-Hdata /kT)
        exp_mp = mp.expm(arr_mp)
        trace = np.array(exp_mp.tolist()).trace()
        normalized_mp = exp_mp / trace
        normalized_np = np.array(normalized_mp.tolist(), dtype = np.complex)
        dm_groundstate = Qobj(normalized_np, dims = 2 * [number_of_spins*[2]])
    dephased = do_dephasing_dm(dm_groundstate, number_of_spins)
    return H, dm_groundstate, dephased
'''test the dephasing'''
#example with diagonal reduced density matrix
# up_y = Qobj([[1],[1.j]]).unit()
# down_y = Qobj([[1],[-1.j]]).unit()
# state  = tensor(up_y, down_y) + tensor(down_y, up_y)
# state = state.unit()
# correlated = ket2dm(state)
# print correlated
# print do_dephasing_dm(correlated, 2)


#example with a non-diagonal density matrix
si = qeye(2)
up_x = Qobj([[1],[1]])
up_z = basis(2,0)
down_z = basis(2,1)

m = ket2dm((tensor(up_z, up_x) + tensor(up_x, up_z)).unit())
print do_dephasing_dm(m, 2)
red = m.ptrace(0)
energies,(state0,state1)= red.eigenstates()

R1 = tensor(state0, si) * tensor(up_z.dag(), si)
R2 = tensor(state1, si) * tensor(down_z.dag(), si)

rot = (R1 + R2).dag() * m * (R1 + R2)
dephased_rot = do_dephasing_dm(rot, 2)
print dephased_rot
dephased_back = (R1 + R2) * dephased_rot * (R1 + R2).dag()
print dephased_back
示例#3
0
from qutip import basis, Qobj, tensor, ket2dm, qeye
import numpy as np
'''test the dephasing'''
#example with diagonal reduced density matrix
# up_y = Qobj([[1],[1.j]]).unit()
# down_y = Qobj([[1],[-1.j]]).unit()
# state  = tensor(up_y, down_y) + tensor(down_y, up_y)
# state = state.unit()
# correlated = ket2dm(state)
# print correlated
# print do_dephasing_dm(correlated, 2)

#example with a non-diagonal density matrix
si = qeye(2)
up_x = Qobj([[1], [1]])
up_z = basis(2, 0)
down_z = basis(2, 1)

m = ket2dm((tensor(up_z, up_x) + tensor(up_x, up_z)).unit())
print do_dephasing_dm(m, 2)
red = m.ptrace(0)
energies, (state0, state1) = red.eigenstates()

R1 = tensor(state0, si) * tensor(up_z.dag(), si)
R2 = tensor(state1, si) * tensor(down_z.dag(), si)

rot = (R1 + R2).dag() * m * (R1 + R2)
dephased_rot = do_dephasing_dm(rot, 2)
print dephased_rot
dephased_back = (R1 + R2) * dephased_rot * (R1 + R2).dag()
print dephased_back