Producto de matrices en C: ejercicio resuelto
Producto de matrices en C: ejercicio resuelto
Si buscas producto de matrices en C ejercicio resuelto, aquí tienes la multiplicación de dos matrices con el orden de bucles ikj (más eficiente en caché que el orden ijk clásico) y la verificación del resultado elemento a elemento.
La multiplicación de matrices A (m×k) por B (k×n) produce C (m×n) donde C[i][j] = Σ A[i][p] * B[p][j] para p = 0..k-1. La complejidad es O(m·k·n).
Enunciado
Multiplica la matriz A (3×2) por la matriz B (2×4) y muestra el resultado C (3×4).
Solución en C
Resultado esperado
Errores frecuentes
- No inicializar
Ca cero antes de acumular: los valores residuales de la pila producen resultados incorrectos. - Usar el orden de bucles ijk sin pensar en caché: en el orden ijk el acceso a
B[p][j]salta por columnas, lo que causa muchos cache misses. El orden ikj mantieneB[p][j]en la misma fila y es más eficiente. - Confundir las dimensiones:
A[m×k] × B[k×n] = C[m×n]. El número de columnas de A debe ser igual al número de filas de B. - Usar
intpara matrices grandes: el producto de dos matrices 100×100 con valores de 1000 puede producir entradas de hasta 10^8, dentro del rango deint, pero con valores mayores conviene usarlong long.
Aplicación práctica
La multiplicación de matrices es el núcleo de álgebra lineal numérica, redes neuronales (propagación hacia adelante), gráficos 3D (transformaciones) y computación científica. Bibliotecas como BLAS implementan versiones altamente optimizadas con SIMD y multihilo.
Siguiente ejercicio recomendado
- Matrices en C: ejercicios resueltos
- Matriz transpuesta en C: ejercicio resuelto
- Suma de la diagonal principal en C: ejercicio resuelto
- Todos los ejercicios de C
Práctica guiada y libro completo
Si quieres una ruta completa con progresión real de dificultad:
FAQ
¿Por qué el orden de bucles ikj es más eficiente que ijk?
Por la localidad de caché. En el orden ijk, el bucle interno accede a B[p][j] con p variando, lo que salta filas en la memoria (matrices en C son row-major). En el orden ikj, el bucle interno accede a B[p][j] con j variando, recorriendo una fila de forma secuencial y aprovechando las líneas de caché cargadas.
¿Cómo verificar el resultado de la multiplicación?
Calculando manualmente los primeros elementos: C[0][0] = A[0][0]*B[0][0] + A[0][1]*B[1][0] = 1*5 + 2*9 = 23. Comprueba también C[2][3] = 5*8 + 6*12 = 40 + 72 = 112.
¿Qué es la multiplicación de matrices de Strassen?
Es un algoritmo que multiplica matrices n×n en O(n^2.807) en lugar de O(n³), dividiendo cada matriz en cuatro submatrices y usando 7 multiplicaciones recursivas en lugar de 8. En la práctica se usa solo para matrices muy grandes (n > 1000) porque la constante oculta es mayor que en el algoritmo estándar.