Ejemplo n.º 1
0
 def test_mult_esc_mat(self):
     self.assertEqual(
         str(mat_op.mult_esc_mat(complex_cart(5, 2), self.mat_comp_a)),
         '[[1 + 12i, 1 + 12i], [1 + 12i, 1 + 12i], [1 + 12i, 1 + 12i]]')
     self.assertEqual(
         str(mat_op.mult_esc_mat(complex_cart(5, 2), self.mat_comp_b)),
         '[[3 + 7i, 6 + 14i, 9 + 21i], [3 + 7i, 6 + 14i, 9 + 21i], [3 + 7i, 6 + 14i, 9 + 21i]]'
     )
Ejemplo n.º 2
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)
Ejemplo n.º 3
0
def mult_esc_mat(A, B):
    m = len(B)
    n = len(B[0])
    ans = [[complex_cart(0, 0) for i in range(n)] for i in range(m)]
    for i in range(m):
        for j in range(n):
            ans[i][j] = A * B[i][j]
    return ans
Ejemplo n.º 4
0
def sum_vect(A, B):
    if len(A) == len(B):
        ans = [complex_cart(0, 0) for i in range(len(A))]
        for i in range(len(A)):
            ans[i] = A[i] + B[i]
        return ans
    else:
        return 'Los vectores no tienen la misma dimension'
Ejemplo n.º 5
0
def product_in(A, B):
    A = adjunta(A)
    n = len(A)
    m = len(B)
    if n == m:
        ans = complex_cart(0, 0)
        for i in range(n):
            ans += A[i][0] * B[i]
    return ans
Ejemplo n.º 6
0
def inv_adit_mat(A):
    m = len(A)
    n = len(A[0])
    ans = [[complex_cart(0, 0) for i in range(n)] for i in range(m)]
    for i in range(m):
        for j in range(n):
            ans[i][j].a = -A[i][j].a
            ans[i][j].b = -A[i][j].b
    return ans
Ejemplo n.º 7
0
def unitary(A):
    A = mult_mat(A, adjunta(A))
    B = mult_mat(adjunta(A), A)
    ans = True
    if len(A) == len(A[0]):
        identy = [[complex_cart(0, 0) for i in range(len(A[0]))]
                  for j in range(len(A))]
        for i in range(len(A)):
            identy[i][i] = complex_cart(1, 0)
        for i in range(len(A)):
            for j in range(len(A)):
                if A[i][j].a == B[i][j].a and B[i][j].a == identy[i][j].a and A[
                        i][j].b == B[i][j].b and B[i][j].b == identy[i][j].b:
                    ans = True
                else:
                    return False
        else:
            return ans
    else:
        print('La matriz no es cuadrada')
Ejemplo n.º 8
0
def inv_adi(A):
    try:
        ans = [complex_cart(0, 0) for i in range(len(A))]
        for i in range(len(A)):
            ans[i].a = -A[i].a
            ans[i].b = -A[i].b
    except:
        ans = [0 for i in range(len(A))]
        for i in range(len(A)):
            ans[i] = -A[i]
    finally:
        return ans
Ejemplo n.º 9
0
def accion(A, B):
    m, n = len(A), len(A[0])
    m_b = len(B)
    if n == m_b:
        ans = [0 for i in range(m)]
        for i in range(m):
            suma = complex_cart(0, 0)
            for j in range(n):
                suma += A[i][j] * B[j]
            ans[i] = suma
        return ans
    else:
        return 'La acción no se puede calcular '
Ejemplo n.º 10
0
def mult_mat(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 = [[complex_cart(0, 0) 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] += A[i][k] * B[k][j]
        return ans
    else:
        return 'Error, el producto entre matrices no se puede'
Ejemplo n.º 11
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)
Ejemplo n.º 12
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 setUp(self):
     self.mat_bool = [[False, False, False, False, False, False],
                      [False, False, False, False, False, False],
                      [False, True, False, False, False, True],
                      [False, False, False, True, False, False],
                      [False, False, True, False, False, False],
                      [True, False, False, False, True, False]]
     self.vect_bool = [False, False, True, False, False, False]
     self.mat_real = [[0, 1 / 6, 5 / 6], [1 / 3, 1 / 2, 1 / 6],
                      [2 / 3, 1 / 3, 0]]
     self.vect_real = ([1 / 6, 1 / 6, 2 / 3])
     A = [[complex_cart(0, 0) for i in range(8)] for j in range(8)]
     A[1][0] = complex_cart(1 / math.sqrt(2), 0)
     A[2][0] = complex_cart(1 / math.sqrt(2), 0)
     A[3][1] = complex_cart(-1 / math.sqrt(6), 1 / math.sqrt(6))
     A[3][3] = complex_cart(1, 0)
     A[4][1] = complex_cart(-1 / math.sqrt(6), -1 / math.sqrt(6))
     A[4][4] = complex_cart(1, 0)
     A[5][1] = complex_cart(1 / math.sqrt(6), -1 / math.sqrt(6))
     A[5][2] = complex_cart(-1 / math.sqrt(6), 1 / math.sqrt(6))
     A[5][5] = complex_cart(1, 0)
     A[6][2] = complex_cart(-1 / math.sqrt(6), -1 / math.sqrt(6))
     A[6][6] = complex_cart(1, 0)
     A[7][2] = complex_cart(1 / math.sqrt(6), -1 / math.sqrt(6))
     A[7][7] = complex_cart(1, 0)
     self.mat_compleja = A
     B = [[complex_cart(0, 0) for i in range(3)] for j in range(3)]
     B[0][0] = complex_cart(1 / math.sqrt(2), 0)
     B[1][0] = complex_cart(0, -1 / math.sqrt(2))
     B[0][1] = complex_cart(1 / math.sqrt(2), 0)
     B[1][1] = complex_cart(0, 1 / math.sqrt(2))
     B[2][2] = complex_cart(0, -1)
     self.complex_mat = B
     self.complex_vect = [
         complex_cart(1 / math.sqrt(3), 0),
         complex_cart(0, 2 / math.sqrt(15)),
         complex_cart(math.sqrt(2 / 5), 0)
     ]
Ejemplo n.º 14
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'
Ejemplo n.º 15
0
def Identy(n):
    ans = [[complex_cart(0, 0) for i in range(n)] for j in range(n)]
    for i in range(n):
        ans[i][i] = complex_cart(1, 0)
    return ans
Ejemplo n.º 16
0
 def test_accion(self):
     a = [[complex_cart(-1, 0),
           complex_cart(1, 1),
           complex_cart(0, 0)],
          [complex_cart(2, -1),
           complex_cart(0, 0),
           complex_cart(1, 0)],
          [complex_cart(0, 0),
           complex_cart(1, -1),
           complex_cart(0, 1)]]
     b = [complex_cart(1, 0), complex_cart(1, 1), complex_cart(0, 1)]
     self.assertEqual(str(mat_op.accion(a, b)), '[-1 + 2i, 2 + 0i, 1 + 0i]')
Ejemplo n.º 17
0
 def setUp(self):
     """Genera números complejos, unos en forma polar, y otros en forma
     cartesiana"""
     self.complex_a = complex_cart(1, 2)
     self.complex_b = complex_cart(2, 4)
     self.complex_c = complex_cart(-6, 2)
     self.complex_d = complex_cart(-5, -8)
     self.complex_e = complex_cart(0, 0)
     self.complex_f = complex_cart(1, 1)
     self.complex_h = complex_cart(1 / 2, 3 / 4)
     self.complex_A = complex_polar(8, (3 * math.pi) / 4)
     self.complex_B = complex_polar(3, (23 * math.pi) / 22)
     self.complex_C = complex_polar(24, (3 * math.pi) / 5)
     self.complex_D = complex_polar(4.47, 1.11)
     self.mat_num_B = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
     self.mat_num_A = [[1, 2], [1, 2], [1, 2]]
     self.vect_num_C = [1, 2, 3]
     self.vect_num_D = [1, 2, 3, 4]
     self.mat_comp_a = [[complex_cart(1, 2),
                         complex_cart(1, 2)],
                        [complex_cart(1, 2),
                         complex_cart(1, 2)],
                        [complex_cart(1, 2),
                         complex_cart(1, 2)]]
     self.mat_comp_b = [
         [complex_cart(1, 1),
          complex_cart(2, 2),
          complex_cart(3, 3)],
         [complex_cart(1, 1),
          complex_cart(2, 2),
          complex_cart(3, 3)],
         [complex_cart(1, 1),
          complex_cart(2, 2),
          complex_cart(3, 3)]
     ]
     self.vect_comp_c = [
         complex_cart(1, 1),
         complex_cart(2, 2),
         complex_cart(3, 3)
     ]
     self.vect_comp_d = [
         complex_cart(1, 1),
         complex_cart(2, 2),
         complex_cart(3, 3),
         complex_cart(4, 4)
     ]
Ejemplo n.º 18
0
 def test_product_in(self):
     a = [complex_cart(1, 0), complex_cart(0, 1), complex_cart(1, -3)]
     b = [complex_cart(2, 1), complex_cart(0, 1), complex_cart(2, 0)]
     self.assertEqual(str(mat_op.product_in(a, b)), '(5, 7)')
Ejemplo n.º 19
0
 def test_norma_vect(self):
     a = [complex_cart(3.4, 4.6), complex_cart(2.2, -7.1)]
     b = [complex_cart(8.2, 5.3), complex_cart(8.1, -8.0)]
     self.assertEqual(mat_op.norma_vect(a), 9.38)
     self.assertEqual(mat_op.norma_vect(b), 15.0)
Ejemplo n.º 20
0
 def test_unitary(self):
     a = [[complex_cart(0, 0) for i in range(3)] for i in range(3)]
     for i in range(3):
         a[i][i] = complex_cart(0, 1)
     self.assertEqual(mat_op.unitary(a), True)
     self.assertEqual(mat_op.unitary(self.mat_comp_b), False)
Ejemplo n.º 21
0
 def test_hermitian(self):
     a = [[complex_cart(5, 0), complex_cart(3, 7)],
          [complex_cart(3, -7), complex_cart(2, 0)]]
     self.assertEqual(mat_op.hermitian(a), True)
     self.assertEqual(mat_op.hermitian(self.mat_comp_b), False)
Ejemplo n.º 22
0
 def test_mul_esc_vect(self):
     self.assertEqual(mat_op.mul_esc_vect(5, self.vect_num_C), [5, 10, 15])
     self.assertEqual(
         str(mat_op.mul_esc_vect(complex_cart(5, 5), self.vect_comp_d)),
         '[0 + 10i, 0 + 20i, 0 + 30i, 0 + 40i]')