4.3 Ejercicios complejos con matrices de números reales

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.7 Igualmente otra solución usando la función 4.3.2
 








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:












4.3.14 Función tal que dada una MatrizReal m, devuelva otra MatrizReal mt con su transpuesta. Esto es, intercambia los valores de m de forma que la fila 0 pasa a ser la columna 0, la fila 1 la columna 1 y así sucesivamente. Por ejemplo:

 
 

No hay comentarios:

Publicar un comentario