Recordemos que un número complejo a+bi tiene una parte real (a) y una parte imaginaria (b). Diremos que el conjugado de un número complejo a+bi es sencillamente el mismo número pero con la parte imaginaria cambiada de signo. Así pues, si c = a+bi, el conjugado de c, que llamaremos c∗, es a−bi. Nosotros representaremos los números complejos con tuplas de dos elementos: a+bi será representado como (a,b)
Una matriz M cuadrada (con tamaño n × n) de números complejos es hermítica si es igual a su transpuesta-conjugada: Para todo 1 ≤ i,j ≤ n, tenemos Mij=Mji∗. O, dicho de otro modo, si transponemos M (cambiamos filas por columnas) y hacemos el conjugado de todos sus elementos, la matriz M no cambia.
Escribir una función es_hermitica(m) que, dada una matriz m cuadrada de números complejos, retorne True si m es hermítica, y False en caso contrario. Fijémonos en que tal como hemos dicho más arriba, m 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)]]
Entrada
La función tiene una matriz cuadrada de tuplas de dos elementos que representan números complejos.
Observaciones
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