En
numerosas ocasiones el tratamiento de las matrices debe hacerse por filas o por
columnas. Estamos acostumbrados a usar la operación suma en Excel para los
datos de una fila o una columna, pero también podrían interesarnos los máximos
o mínimos por filas o columnas, etc. Hay que tener en cuenta que la suma de los
elementos de una matriz por filas nos da un array que tiene tantos elementos
como filas tenga la matriz, esto es su tamaño es como una columna. En el
ejemplo podemos observar que si tenemos una matriz de 4 filas y 5 columnas, sus
máximos por filas es un array unidimensional de tamaño 4 y sus máximos por
columna un array de tamaño 5.
Debemos
fijarnos que para obtener los máximos, mínimos, suma o cualquier otra operación
sobre los elementos de una fila o columna de una matriz, realmente la operación
que estamos llevando a cabo son las que hemos implementado en la sección 2.1.
Por ejemplo, para hallar la suma por columnas de una matriz, basta con extraer
cada columna, convirtiéndola en un array unidimensional y después hallar la
suma de los elementos de ese array.
4.3.1 Defina el tipo para trabajar con un array bidimensional para almacenar a lo sumo una matriz de números reales de 10 filas y 20 columnas. Asimismo defina los tipos necesarios para trabajar con los elementos de una fila o columna determinada.
4.3.2
Función tal que dada una matriz y un número de fila devuelve esa fila como
array.
4.3.3 Función tal que dada una matriz y un número de columna devuelve esa columna como array.
4.3.4 Función tal que dada una matriz devuelve un array con la suma de sus elementos por columnas
4.3.5
Otra solución de este problema es usar una función que sume los elementos de un
array unidimensional como se hizo en la función 2.1.5 (para un array de reales
y sin el if porque allí sólo se sumaban los pares) y reutilizar la función
4.3.3
4.3.6 Función tal que dada una matriz devuelve un array con la suma de sus elementos por filas
4.3.8 Función que dada una matriz devuelve un array con los máximos por columna. Esta función sigue un esquema similar a la función 4.3.5 pero invocando a la función máximo, similar a la 1.2.8 pero para tipo double
4.3.9
Función que dada una matriz devuelve un array con los máximos por fila. Esta
función sigue un esquema similar a la función 4.3.7 pero invocando a la función
máximo, similar a la 1.2.8 pero para tipo double
4.3.10
Función que dadas dos matrices devuelve la matriz resultado de multiplicarlas.
Para que dos matrices se puedan multiplicar es necesario que el número de
columnas de la primera sea igual al número de filas de la segunda. Por ello,
esta función sólo tendrá tres valores enteros como dimensiones, nf1 será el
número de filas de la primera matriz, nc1 el número de columnas de la primera
matriz y el número de filas de la segunda y finalmente nc2 será el número de
columnas de la segunda matriz. Esta primera
solución es la clásica donde cada elemento (i,j) de la matriz producto p se
calcula como una suma de los productos de los elementos de la fila i de m1 por
los elementos de la columna j de m2.
4.3.11 En esta segunda solución reutilizamos las funciones 4.3.2 y
4.3.3 para devolver la fila i de m1 y una columna j de m2, para mediante la
función 3.3.2 hacer su producto cartesiano y asignarlo al elemento (i,j) de p.
4.3.12 Suponga definido un tipo MatrizEntero como:
typedef
int MatrizEntero[NFIL*NCOL][2];
Implemente
una función tal que dada una MatrizReal m y un valor v devuelva una
MatrizEntero vp con las coordenadas de m donde está v. No se olvide devolver el
número de veces que está v, que corresponderá con el número de filas de vp. Por
ejemplo para la matriz m anterior, las posiciones para v=3 son las siguientes:
3 está en la fila 1 columna 0, fila 1 columna 3, fila 2 columna 2 y fila 3
columna 0:
4.3.13 Función tal que dada una MatrizReal m y un número de columna col devuelva
un VectorColumna vc con los valores de la columna col de m por debajo de la
diagonal incluyendo ésta. Por ejemplo para la columna 1 (col=1) de m, vc
valdría:
No hay comentarios:
Publicar un comentario