def operator_aacross(H, m, n): op_a = operator_a(H, m, n) op_across = op_a.conj() matrix = Matrix(H.size, H.size, dtype=np.complex128) matrix.data = (op_a.data).dot(op_across.data) return matrix
def operator_across(H, m, n): op_a = operator_a(H, m, n) op_across = op_a.conj() matrix = Matrix(H.size, H.size, dtype=np.complex128) matrix.data = op_across.data # matrix.print() # exit(0) return matrix
def operator_a3all_new(H, ph_type=1): H_size = H.size size = H_size data = np.array([np.zeros(size) for i in range(size)]) # ph_type = 1 if ph_type == 1: for k_from, v_from in enumerate(H.states): ph = v_from[0] if ph > 0: to_state = [ph - 1, v_from[1]] + [v_from[2]] + [[ v_from[3][0] + 1, v_from[3][1] ]] # print(v_from[1]) # print(v_from[2]) # print(v_from[3]) # print(to_state) # exit(0) for k_to, v_to in enumerate(H.states): if to_state == v_to: data[k_to][k_from] = sqrt(ph) print(v_from, '->', to_state) # data[k_to][k_from] = sqrt(ph) # ph_type = 2 elif ph_type == 2: for k_from, v_from in enumerate(H.states): ph = v_from[1] if ph > 0: to_state = [v_from[0], ph - 1] + [v_from[2]] + [[ v_from[3][0], v_from[3][1] + 1 ]] # to_state = [v_from[0], ph - 1] + v_from[2:] for k_to, v_to in enumerate(H.states): if to_state == v_to: data[k_to][k_from] = sqrt(ph) # print(v_from, '->', to_state) # exit(0) a = Matrix(H.size, H.size, dtype=np.complex128) a.size = H.size a.data = lil_matrix(data, dtype=np.complex128) return a
def b(ro): nonlocal L, Lcross, LcrossL, l # nonlocal L, L_cross, l L1 = 0 L2 = 0 L_ro = Matrix(m=ro.m, n=ro.n, dtype=np.complex128) # for i in range(len(l)): L1 += (L.dot(ro.data)).dot(Lcross) # L1 += (L[i].dot(ro.data)).dot(L_cross[i]) L2 = np.dot(ro.data, LcrossL) + np.dot(LcrossL, ro.data) # L2 = np.dot(np.dot(ro.data, L_cross[i]), L[i]) + np.dot(np.dot(L_cross[i], L[i]), ro.data) # L_ro.data += csc_matrix(L1 - 0.5 * L2) L_ro.data += l * csc_matrix(L1 - 0.5 * L2, dtype=np.complex128) # L_ro.data += l[i] * lil_matrix(L1 - 0.5 * L2, dtype=np.complex128) # print() # ro.print() # print() # L_ro.data /= l[0] # L_ro.print() # exit(0) return L_ro
def operator_a(H): H_size = H.size size = H_size data = np.array([np.zeros(size) for i in range(size)]) for k_from, v_from in enumerate(H.states): ph = v_from[0] if ph > 0: # print("ph = ", ph) # print("from_state = ", v_from) to_state = [ph - 1] + v_from[1:] # print("to_state0 = ", to_state) for k_to, v_to in enumerate(H.states): if to_state == v_to: # print("to_state = ", to_state) # a[k_from][k_to] = sqrt(ph) data[k_to][k_from] = sqrt(ph) # for i in range(H_size): # for j in range(H_size): # if data[i][j] != 0: # print(H.states[j], " -> ", H.states[i], ": ", np.round(data[i][j], 3), sep="") a = Matrix(H.size, H.size, dtype=np.complex128) a.size = H.size a.data = lil_matrix(data, dtype=np.complex128) # a_dense = a.data.toarray() # for i in range(H.size): # for j in range(H.size): # if abs(a.data[i, j]) != 0: # print(i, j, abs(a.data[i, j])) # print(H.states[i], H.states[j]) # print() # for i in len() # print(a.data[0,0]) # exit(0) return a