Recordemos que un número complejo
tiene una parte real
()
y una parte imaginaria
().
Diremos que el conjugado de un número complejo
es sencillamente el mismo número pero con la parte imaginaria cambiada
de signo. Así pues, si
,
el conjugado de
,
que llamaremos
,
es
.
Nosotros representaremos los números complejos con tuplas de dos
elementos:
será representado como (a,b)
Una matriz cuadrada (con tamaño ) de números complejos es hermítica si es igual a su transpuesta-conjugada: Para todo , tenemos . O, dicho de otro modo, si transponemos (cambiamos filas por columnas) y hacemos el conjugado de todos sus elementos, la matriz no cambia.
Escribir una función es_hermitica(m)
que, dada una matriz
cuadrada de números complejos, retorne
True si
es hermítica, y False en caso contrario.
Fijémonos en que tal como hemos dicho más arriba,
será una matriz cuadrada de tuplas de dos elementos.
Ejemplo de matriz hermítica:
que nosotros representaremos así:
m = [[(-1,0),(1,-2),(0, 0)],
[(1, 2),(0, 0),(0,-1)],
[(0, 0),(0, 1),(1, 0)]]
La función tiene una matriz cuadrada de tuplas de dos elementos que representan números complejos.
Una matriz hermítica con números reales como elementos es sencillamente una matriz simétrica.
Una vez definida la función, al probarla en el REPL de Python debería salir lo mismo que puede observar más abajo.
>>> es_hermitica([[(1, 0), (0, -1)], [(0, 1), (1, 0)]]) True >>> es_hermitica([[(2, 0), (0, -1)], [(0, 1), (1, 0)]]) True >>> es_hermitica([[(0, 0), (1, 0)], [(1, 0), (0, 0)]]) True >>> es_hermitica([[(0, 1), (1, 0)], [(1, 0), (0, 0)]]) False >>> es_hermitica([[(0, 0), (0, -1)], [(0, 1), (0, 0)]]) True >>> es_hermitica([[(1, 0), (0, 0)], [(0, 0), (-1, 0)]]) True >>> es_hermitica([[(-1, 0), (1, -2), (0, 0)], [(1, 2), (0, 0), (0, -1)], [(0, 0), (0, 1), (1, 0)]]) True >>> es_hermitica([[(1, 0), (1, 1), (0, 2)], [(1, -1), (5, 0), (-3, 0)], [(0, -2), (-3, 0), (0, 0)]]) True >>> es_hermitica([[(1, 0), (1, 1), (0, 2)], [(1, -1), (5, 1), (-3, 0)], [(0, -2), (-3, 0), (0, 0)]]) False