Esempio n. 1
0
def Probabilistic_system(mat, click, state):
    def mul_mat_bool(A, B):
        m_a = len(A)
        n_a = len(A[0])
        m_b = len(B)
        n_b = len(B[0])
        if n_a == m_b:
            ans = [[False for i in range(len(B[0]))] for i in range(len(A))]
            for i in range(len(A)):
                for j in range(len(B[0])):
                    for k in range(len(A[0])):
                        ans[i][j] = ans[i][j] or (A[i][k] and B[k][j])
        return ans

    start = mat
    if type(mat[0][0]) == bool:
        for i in range(click):
            state_click = mul_mat_bool(start, mat_op.transpuesta(state))
            start = mul_mat_bool(start, mat)
        ans = state_click[:]
        for i in range(len(ans)):
            if ans[i][0] == True:
                ans[i] = 1
            else:
                ans[i] = 0
        Plot(len(ans), ans)
    else:
        for i in range(click):
            state_click = mul_mat_real(start, mat_op.transpuesta(state))
            start = mul_mat_real(start, mat)
        Plot(len(mat_op.transpuesta(state_click)),
             mat_op.transpuesta(state_click))
    return state_click
Esempio n. 2
0
def Quantum_system(mat, click, state):
    start = mat
    for i in range(click):
        state_click = mat_op.mult_mat(start, mat_op.transpuesta(state))
        start = mat_op.mult_mat(start, mat)
    state_click = [[round((state_click[i][0].mod())**2, 2)]
                   for i in range(len(state_click))]
    Plot(len(state_click), mat_op.transpuesta(state_click))
    return state_click
 def test_transpuesta(self):
     self.assertEqual(mat_op.transpuesta(self.mat_num_A),
                      [[1, 1, 1], [2, 2, 2]])
     self.assertEqual(
         str(mat_op.transpuesta(self.mat_comp_a)),
         '[[1 + 2i, 1 + 2i, 1 + 2i], [1 + 2i, 1 + 2i, 1 + 2i]]')
     self.assertEqual(mat_op.transpuesta(self.vect_num_D),
                      [[1], [2], [3], [4]])
     self.assertEqual(str(mat_op.transpuesta(self.vect_comp_d)),
                      '[[1 + 1i], [2 + 2i], [3 + 3i], [4 + 4i]]')
Esempio n. 4
0
def exp_complex_slit(mat):
    A = mat
    V = [complex_cart(0, 0) for i in range(len(mat))]
    V[0] = complex_cart(1, 0)
    V = mat_op.transpuesta(V)
    for i in range(2):
        C = mat_op.mult_mat(A, V)
        A = mat_op.mult_mat(A, mat)
    B = mat_op.transpuesta(C[:])
    for i in range(len(B)):
        B[i] = round(B[i].mod()**2, 2)
    Plot(len(B), B)

    return mat_op.transpuesta(B)
Esempio n. 5
0
def Quantum_states(x, ket, ket_a):
    ket = mat_op.transpuesta(ket)
    if ket_a is None:
        ans = []
        for i in range(len(ket)):
            prob = (round((ket[i].mod()**2), 2)) / (round(
                (mat_op.norma_vect(ket)**2), 2))
            ans += [prob]
        return ans[x]
    else:
        ket_a = mat_op.transpuesta(ket_a)
        ans = mat_op.product_in(ket_a, ket)
        norma_ket = mat_op.norma_vect(ket)
        norma_ket_a = mat_op.norma_vect(ket_a)
        b = norma_ket * norma_ket_a
        return complex_cart(ans.a / b, ans.b / b)
 def test_mult_mat(self):
     self.assertEqual(
         str(mat_op.mult_mat(self.mat_comp_b, self.mat_comp_a)),
         '[[-6 + 18i, -6 + 18i], [-6 + 18i, -6 + 18i], [-6 + 18i, -6 + 18i]]'
     )
     self.assertEqual(
         str(
             mat_op.mult_mat(self.mat_comp_b,
                             mat_op.transpuesta(self.mat_comp_b))),
         '[[0 + 28i, 0 + 28i, 0 + 28i], [0 + 28i, 0 + 28i, 0 + 28i], [0 + 28i, 0 + 28i, 0 + 28i]]'
     )
     self.assertEqual(
         str(
             mat_op.mult_mat(self.mat_comp_a,
                             mat_op.transpuesta(self.mat_comp_a))),
         '[[-6 + 8i, -6 + 8i, -6 + 8i], [-6 + 8i, -6 + 8i, -6 + 8i], [-6 + 8i, -6 + 8i, -6 + 8i]]'
     )
Esempio n. 7
0
def Observables(observable, ket):

    if mat_op.hermitian(observable):

        ans = mat_op.mult_mat(observable, ket)
        media = mat_op.product_in(mat_op.transpuesta(ans),
                                  mat_op.transpuesta(ket))

        identy = mat_op.mult_esc_mat(media, Identy(len(observable)))
        operador = mat_op.sum_mat_com(observable, mat_op.inv_adit_mat(identy))
        operador_1 = mat_op.mult_mat(operador, operador)
        ket_operador = mat_op.transpuesta(mat_op.mult_mat(operador_1, ket))
        var = mat_op.product_in(mat_op.transpuesta(ket), ket_operador)
        return var.a

    else:

        return None
Esempio n. 8
0
def exp_real_slit(slits, targets):

    n = ((slits - 1) * math.ceil(targets / 2)) + 1 + slits + targets
    state = [[0 for i in range(n)] for j in range(n)]
    for i in range(slits):
        state[i + 1][0] = 1 / slits
        for j in range(i * (math.ceil(targets / 2)) + slits + 1,
                       i * (math.ceil(targets / 2)) + slits + targets + 1):
            state[j][i + 1] += 1 / targets
            state[j][j] = 1
    state_2 = mul_mat_real(state, state)
    V = [0 for i in range(n)]
    V[0] = 1
    V = mat_op.transpuesta(V)
    prob = mul_mat_real(state_2, V)
    B = mat_op.transpuesta(prob)
    Plot(n, B)

    return prob
Esempio n. 9
0
def Assembling(particles):
    '4.5.2'
    ans = mat_op.product_tensor(particles[0][0], particles[1][0])
    for i in range(2, len(particles)):
        ans = mat_op.product_tensor(ans, particles[i][0])
    x = 0
    for i in range(len(particles)):
        ans_1 = 1
        for j in range(i):
            ans_1 *= len(particles[j][0])
        x += particles[i][1] * ans_1
    return Quantum_states(x, mat_op.transpuesta(ans), None)
Esempio n. 10
0
def Measuring(observable, ket):
    observable = [[
        complex(observable[i][j].a, observable[i][j].b)
        for j in range(len(observable[i]))
    ] for i in range(len(observable))]
    A = np.array(observable)
    eigenvalues, eigenvects = np.linalg.eig(A)
    c = []
    b = []
    for i in range(len(eigenvects)):
        d = []
        b += [complex_cart(eigenvalues[i].real, eigenvalues[i].imag)]
        for j in range(len(eigenvects[i])):
            z = eigenvects[i][j]
            d += [complex_cart(z.real, z.imag)]
        c += [d]
    if ket is None:
        return (b, c)
    else:
        prob = []
        for i in range(len(b)):
            prob += [(mat_op.product_in(mat_op.transpuesta(ket),
                                        c[i])).mod()**2]
        return (b, c, prob)
Esempio n. 11
0
def Problem(x):
    if x == '4.3.1':
        observable = [[complex_cart(0, 0),
                       complex_cart(1, 0)],
                      [complex_cart(1, 0),
                       complex_cart(0, 0)]]
        ket = [[complex_cart(1, 0)], [complex_cart(0, 0)]]
        ans = Measuring(observable, ket)
        return ans[1]
    elif x == '4.3.2':
        observable = [[complex_cart(0, 0),
                       complex_cart(1, 0)],
                      [complex_cart(1, 0),
                       complex_cart(0, 0)]]
        ket = [[complex_cart(1, 0)], [complex_cart(0, 0)]]
        ans = Measuring(observable, ket)
        value = ans[0][0] * complex_cart(
            ans[2][0], 0) + ans[0][1] * complex_cart(ans[2][1], 0)
        print(value)

        ans_1 = mat_op.mult_mat(observable, ket)
        media = mat_op.product_in(mat_op.transpuesta(ans_1),
                                  mat_op.transpuesta(ket))
        print(media)
        print(
            'El valor de la distribucion hallado es igual al que se obtiene en el calculo de la media'
        )
        return (media)
    elif x == '4.4.1':
        U_1 = [[complex_cart(0, 0), complex_cart(1, 0)],
               [complex_cart(1, 0), complex_cart(0, 0)]]
        U_2 = [[
            complex_cart(math.sqrt(2 / 4), 0),
            complex_cart(math.sqrt(2 / 4), 0)
        ],
               [
                   complex_cart(math.sqrt(2 / 4), 0),
                   complex_cart(-math.sqrt(2 / 4), 0)
               ]]
        print(mat_op.unitary(U_1, ), mat_op.unitary(U_2))
        print('Las dos matrices son unitarias')
        U_3 = mat_op.mult_mat(U_1, U_2)
        print(mat_op.unitary(U_3))
        print('El producto de las matrices es unitario')
        return [mat_op.unitary(U_3)]

    elif x == '4.4.2':
        U_n = [[
            complex_cart(0, 0),
            complex_cart(1 / math.sqrt(2), 0),
            complex_cart(1 / math.sqrt(2), 0),
            complex_cart(0, 0)
        ],
               [
                   complex_cart(0, 1 / math.sqrt(2)),
                   complex_cart(0, 0),
                   complex_cart(0, 0),
                   complex_cart(1 / math.sqrt(2), 0)
               ],
               [
                   complex_cart(1 / math.sqrt(2), 0),
                   complex_cart(0, 0),
                   complex_cart(0, 0),
                   complex_cart(0, 1 / math.sqrt(2))
               ],
               [
                   complex_cart(0, 0),
                   complex_cart(1 / math.sqrt(2), 0),
                   complex_cart(-1 / math.sqrt(2), 0),
                   complex_cart(0, 0)
               ]]
        state = state = mat_op.transpuesta([
            complex_cart(1, 0),
            complex_cart(0, 0),
            complex_cart(0, 0),
            complex_cart(0, 0)
        ])
        ans = Dynamics(3, U_n, state)
        return ans[3]
    elif x == '4.5.2':
        return 'hola'
    else:
        return 'EL ejercicio no fue propuesto'