C´digo en c para multiplicar dos matrices 3x3
V´ ıctor Mu˜oz n 9 de abril de 2006
1.
Razonamiento te´rico. o
Sean M, N ∈ M3 : m00 M = m10 m20 n00 N = n10 n20 m01 m11 m21 n01 n11n21 m02 m12 m22 n02 n12 n22 una matriz R ∈ M3 : r02 r12 r22 = r00 = r01 r0i = r02 = r10 = r11 r1i = r12 = r20 = r21 r2i = r22
Multiplic´ndolas tendremos como resultado a r00 r01 R = r10 r11 r20 r21
Estudiando dicho producto elemento a elemento, obtenemos: 2 m00 · n00 + m01 · n10 + m02 · n20 m00 · n01 + m01 · n11 + m02 · n21 m0j · nji , ∀i ∈ 0, 1, 2 j=0m00 · n02 + m01 · n12 + m02 · n22 2 m10 · n00 + m11 · n10 + m12 · n20 m10 · n01 + m11 · n11 + m12 · n21 m1j · nji , ∀i ∈ 0, 1, 2 j=0 m10 · n02 + m11 · n12 + m12 · n22 2 m20 · n00 + m21 · n10+ m22 · n20 m20 · n01 + m21 · n11 + m22 · n21 m2j · nji , ∀i ∈ 0, 1, 2 j=0 m20 · n02 + m21 · n12 + m22 · n22
Estudiando las expresiones de los sumatorios, obtenidas por simple inspecci´n, oobtenemos tres bucles, correspondientes a cada una de las tres filas de R (r0i , r1i , r2i ). Tomando como ejemplo la primera fila (r0i ),
2
m0j · nji , ∀i ∈ 0, 1, 2
j=0
representar´ dos buclesanidados. El interno calcular´ cada elemento, por lo ıa ıa que dejar´ ıamos “i” constante (tomando la forma general de un elemento de la primera fila de R, r0i , har´ ıamos i = 0 para el primer elemento, i= 1 para el segundo e i = 2 para el tercero). El bucle quedar´ por tanto: ıa, 1
Bucle interno f o r ( j = 0 ; j < 3 ; ++j ) { r [ 0 ] [ 0 ] += m[ 0 ] [ j ] ∗ n [ j ] [ 0 ] ; } Para obtener elbucle externo tendremos en cuenta que lo que variamos en este caso es la “j”, desde 0 hasta 2. Nos queda: Bucle externo f o r ( i = 0 ; i < 3 ; ++i ) { f o r ( j = 0 ; j < 3 ; ++j ) { r [ 0 ] [ i ] += m[0 ] [ j ] ∗ n [ j ] [ i ] ; } } Por tanto, ya tenemos el c´digo que calcula la fila 0 de la matriz R. o Para calcular las dem´s variar´ a ıamos el ´ ındice de fila de R en el rango [0, 2]; ındice de...
Regístrate para leer el documento completo.