︠cc422355-0982-42a2-b246-89d66cf9d753s︠ # ========================================================== # 1. Definir el cuerpo finito y el espacio de vectores # ========================================================== q = 7 # tamaño del cuerpo (puede cambiarse) F = GF(q) n = 6 # longitud del código k = 3 # dimensión ︡e7f033f9-77d3-47f3-8058-ee6b0c62f5dc︡{"done":true} ︠58acb2c9-e412-4397-8877-70f17463b9b9s︠ F ︡69bed153-8502-4f89-9e38-f6c502c48af7︡{"stdout":"Finite Field of size 7\n"}︡{"done":true} ︠b49404c8-08a2-4c9e-bcfa-44391d882870s︠ # ========================================================== # 2. Crear un código lineal directamente desde una matriz generadora # ========================================================== # Ejemplo: código (6,3) sobre F7 G = Matrix(F, [ [1, 0, 0, 1, 2, 4], [0, 1, 0, 2, 3, 5], [0, 0, 1, 1, 1, 1] ]) C = LinearCode(G) C ︡92203260-406e-499c-8e84-13facf2a4715︡{"stdout":"[6, 3] linear code over GF(7)\n"}︡{"done":true} ︠8a948feb-8615-43cc-afc8-83b5963825dfs︠ G ︡f2d70446-76a1-4b39-b1e7-829ecb008cb4︡{"stdout":"[1 0 0 1 2 4]\n[0 1 0 2 3 5]\n[0 0 1 1 1 1]\n"}︡{"done":true} ︠04bc265a-1728-47b8-8954-3aa0946cd00es︠ # ========================================================== # 3. Ver matrices básicas # ========================================================== print("Matriz generadora G:") print(G) print("\nMatriz de control H:") print(C.parity_check_matrix()) ︡b4b9771e-6f2e-4ce7-84a9-37f94bb490f0︡{"stdout":"Matriz generadora G:\n"}︡{"stdout":"[1 0 0 1 2 4]\n[0 1 0 2 3 5]\n[0 0 1 1 1 1]\n"}︡{"stdout":"\nMatriz de control H:\n"}︡{"stdout":"[1 0 6 0 6 2]\n[0 1 1 0 5 1]\n[0 0 0 1 2 4]\n"}︡{"done":true} ︠f3516a96-2d2d-4af1-beb8-5b16227fa34as︠ # ========================================================== # 4. Propiedades básicas # ========================================================== print("\nDimensión k =", C.dimension()) print("Longitud n =", C.length()) print("Tamaño del cuerpo q =", C.base_field()) print("Distancia mínima d =", C.minimum_distance()) ︡801e41b3-04db-4a63-beae-d8a0900a59f9︡{"stdout":"\nDimensión k = 3\n"}︡{"stdout":"Longitud n = 6\n"}︡{"stdout":"Tamaño del cuerpo q = Finite Field of size 7\n"}︡{"stdout":"Distancia mínima d ="}︡{"stdout":" 3\n"}︡{"done":true} ︠aaf2d5eb-d8de-49fa-8424-e81ba83a95b2s︠ # ========================================================== # 5. Codificar y decodificar # ========================================================== m = vector(F, [3,1,2]) # mensaje c = C.encode(m) print("\nMensaje:", m) print("Código:", c) ︡9aa56ded-936a-44c3-a8ca-d2b6c6142905︡{"stdout":"\nMensaje: (3, 1, 2)\n"}︡{"stdout":"Código: (3, 1, 2, 0, 4, 5)\n"}︡{"done":true} ︠b485dc52-13f8-44ac-bf4c-9714e60fd441s︠ # ========================================================== # 6. Introducir un error y decodificar # ========================================================== r = c + vector(F, [0,0,0,1,0,0]) # error en una coordenada print("\nPalabra recibida:", r) print("Síndrome:", C.syndrome(r)) print("Decodificación:", C.decode_to_code(r)) ︡3fc1fbdf-4243-4afc-a4e9-c5d20460cf12︡{"stdout":"\nPalabra recibida: (3, 1, 2, 1, 4, 5)\n"}︡{"stdout":"Síndrome: (0, 0, 1)\n"}︡{"stdout":"Decodificación: (3, 1, 2, 0, 4, 5)\n"}︡{"done":true} ︠cafbde5e-46a2-4667-bdd2-f1ceae9d9e23s︠ H=C.parity_check_matrix() H r*(H.transpose()) c*(H.transpose()) ︡a46d026d-c0ce-4ec1-a5ff-f7001bfa5131︡{"stdout":"[1 0 6 0 6 2]\n[0 1 1 0 5 1]\n[0 0 0 1 2 4]\n"}︡{"stdout":"(0, 0, 1)\n"}︡{"stdout":"(0, 0, 0)\n"}︡{"done":true} ︠cde6ec58-99dd-4805-9889-2f33906d6cces︠ # ========================================================== # 5. Reed–Solomon y códigos cíclicos # ========================================================== x = polygen(F, 'x') # Reed–Solomon clásico (Sage 10.x) RS = codes.ReedSolomonCode(F, n, k) print("\n=== CÓDIGO REED–SOLOMON ===") print(RS) print("Dimensión:", RS.dimension(), " Distancia mínima:", RS.minimum_distance()) print("\nMatriz generadora del RS:") print(RS.generator_matrix()) ︡604ca6f8-f800-493a-a222-d8f44be25832︡{"stdout":"\n=== CÓDIGO REED–SOLOMON ===\n"}︡{"stdout":"[6, 3, 4] Reed-Solomon Code over GF(7)\n"}︡{"stdout":"Dimensión: 3 Distancia mínima: 4\n"}︡{"stdout":"\nMatriz generadora del RS:\n"}︡{"stdout":"[1 1 1 1 1 1]\n[1 3 2 6 4 5]\n[1 2 4 1 2 4]\n"}︡{"done":true} ︠67e1b5b9-da3e-49d3-a23c-08a3ddbbb130︠ ︡a2d516f0-2c35-453b-bef9-b4ac426b67a7︡{"done":true} ︠d32ad499-39e4-4ab3-b798-c84f215f62ec︠