Ver Mensaje Individual
  #6 (permalink)  
Antiguo 10/02/2010, 23:45
Avatar de fradve
fradve
 
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 16 años
Puntos: 7
Respuesta: Ayuda con Matrices C++

Ok, no hay ningún problema haber te indico:

Código C++:
Ver original
  1. int i=0,k=0,l=0;
  2.   int acum=0; //incializamos el acumulador en 0
  3.  
  4.   for(i=0;i<4;i++)
  5.   {
  6.     for(k=0;k<4;k++)
  7.     {
  8.       for(l=0;l<4;l++)
  9.       {
  10.     acum=acum+matrizA[i][l]*matrizB[l][k];
  11.       }
  12.       matrizR[i][k]=acum;
  13.       acum=0;
  14.     }
  15.   }

i,k y l son solo variables contadores de los for respectivamente todas ellas inicializadas con cero.

como imagino has de saber en la multiplicación de matrices se va multiplicando cada elmento de la fila de una matriz por cada elemento de la columna actual o correspondiente de la otra, y la suma de esos productos es el resultado en la posición actual, así:

|1 2 3 4| |3 4 5 1|
|2 3 1 4| |3 4 1 6|
|3 4 5 7| |5 2 3 1|
|4 3 4 5| |3 6 7 8|

el for(i=0;i<4;i++)
indica que inciamos en la fila cero la primera matriz que es 1 2 3 4 5

entonces vamos al otro for(k=0;k<4;k++)
indicamos de que columna de la otra matriz se trata en este caso de la columna cero:
3
3
5
3
luego vamos al otro for(l=0;l<4;l++)
que nos permitirá recorrer cada elemento de la fila y columna respectivamente, así

con l = 0, i=0, k = 0

tenemos:

acum= acum + matrizA[i][l]*matrizB[l][k]

ya que hay que ir acumulado los valores

con números sería:

acum=acum + 1*3
acum = 3

incremento l=1

acum = acum + 2*3
acum=9

incremento l=2

acum = acum + 3*5
acum=24

incremento l=3

acum = acum + 4*3
acum=36

entonces ese 36 corresponde al primer elemento de la matriz productos
que sería la posición i,k que seria 0,0

y ahora regresamos a for(k=0;k<4;k++)
pero ya k incrementado entonces k = 1

y volvemos a for(l=0;l<4;l++)

tenemos i=0,k=1,l=0

Como se incrementó k nos vamos por la siguiente columna de la matrizB, pero la fila de la matrizA se mantiene, entonces

l=0
acum=acum + 1*4
acum = 4

incremento l=1

acum = acum + 2*4
acum=12

incremento l=2

acum = acum + 3*2
acum=18

incremento l=3

acum = acum + 4*6
acum=42

entonces 42 corresponde al segundo elemento de la matriz de resultado o producto, es decir la posición y i,k que es 0,1

Y así hasta que la primera fila de la matriz A se multiplique por todas la columnas de la matrizB, una vez hecho esto con la primera fila se procede de la misma manera con la siguiente fila de la matriz A la multiplicamos por cada columna de la matrizB, obteniendo de esta manera la matriz producto.

Espero haber sido claro, cualquier duda posteanla.
__________________
En programación hay mil y un formas de hacer lo mismo...