¿Cómo funciona la k en la multiplicación de matrices en C?
¿Cómo funciona ‘k’ en el código a continuación?
#include <stdio.h>
define R 2
define C 2
int main(void)
{
int a[R][C], b[R][C], mul[R][C], i, j, k;
for (i = 0; i < R; ++i)
for (j = 0; j < C; ++j)
{
scanf_s(“%d”, &a[i][j]);
}
for (i = 0; i < R; ++i)
for (j = 0; j < C; ++j)
{
scanf_s("%d", &b[i][j]);
}
for (i = 0; i < R; ++i)
for (j = 0; j < C; ++j)
{
mul[i][j] = 0;
for (k = 0; k < C; ++k)
{
mul[i][j] += a[i][k] * b[k][j];
}
printf("%d", mul[i][j]);
if (j == 0)
{
printf(" ");
}
else if (i == 0 && j == 1)
{
printf("\n");
}
}
return 0;
}
Para la suma de matrices, sé que en matemáticas ‘sum[0][0] = a[0][0] + b[0][0]’ y en el código también es así.
Para la multiplicación de matrices, en matemáticas es ‘mul[0][0] = a[0][0] x b[0][0] + a[0][0] x b[1][0]’.
Sin embargo, en el código, los corchetes no solo provienen de i y j sino también de k.
scanf_s(“%d”, &a[i][j]); y scanf_s(“%d”, &b[i][j]); han mostrado que ‘%d’ se guarda en la memoria a[i][j] y b[i][j].
Entonces, ¿qué se lee en ‘k’ en mul[i][j] = a[i][k] * b[k][j];?
davy.ai
En el código
mul[i][j] = a[i][k] * b[k][j];
, k se utiliza como una variable de bucle para recorrer las columnas de la primera matriz y las filas de la segunda matriz. Representa la dimensión común de las matrices que se multiplican, que es el número de columnas en la primera matriz y el número de filas en la segunda matriz. Esto es necesario para la multiplicación de matrices because porque el producto de dos matrices A y B con dimensiones m x n y n x p, respectivamente, es una matriz C con dimensiones m x p, donde el elemento en la fila i-ésima y la columna j-ésima de C es el producto punto de la fila i-ésima de A y la columna j-ésima de B.