Ejemplos: Matrices (subíndices: renglón, columna) Imágenes (subíndices: posición (x,y) de un pixel) Video (subíndices: posición (x,y) y tiempo t) Señales electrofisiológicas (EEG, EKG, fMRI)
Arreglos bidimensionales Supongamos que nuestra aplicación requiere de arreglos organizados en forma de matriz, de manera que se haga referencia a cada elemento mediante dos subíndices.
En C/C++ existen dos técnicas para implementar este tipo de arreglos:
Arreglos de arreglos Orden lexicográfico
Arreglos de arreglos int x[M][N]; x[0] x[1] x[M-1]
Ejemplo: arreglos de arreglos Suponga que se desea implementar un arreglo de M x N donde el elemento (i,j) sea igual a (i + j).
Solución #1: int i, j;int x[M][N];for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { x[i][j] = i + j; }}
Orden lexicográfico int x[M*N]; x
Ejemplo: orden lexicográfico int i, j;int x[M*N];for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { x[i*N+j] = i + j; }}
Arreglos bidimensionales como argumentos void muestra(int x[][10], int m) { int i, j; for (i = 0; i < m; i++) { for (j = 0; j < 10; j++) { cout << x[i][j] << " "; } cout << endl; } }
int main() { int x[10][10]; int i, j; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { x[i][j] = i + j; } } imprime(x, 10); }
void muestra(int x[], int m, int n) { int i, j; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { cout << x[i*n+j] << " "; } cout << endl; } }
int main() { int x[10*10]; int i, j; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { x[i*10+j] = i + j; } } imprime(x, 10, 10); }
Arreglos de arreglos Orden lexicográfico
Comparación entre técnicas
Arreglos multidimensionales También es posible utilizar arreglos de más de dos dimensiones; es decir, arreglos en los cuales los elementos estén indexados mediante mas de dos subíndices.
Ejemplo: arreglos tridimensionales // Técnica: arreglo de arreglos // Declaración int x[M][N][P];
// Acceso al elemento (i,j,k) x[i][j][k] = 0; // Técnica: orden lexicográfico // Declaración int x[M*N*P];
// Acceso al elemento (i,j,k) x[i*N*P + j*P + k] = 0;
Práctica Las operaciones elementales de una matriz son: Multiplicar el renglón i por una constante k. Sumar al renglón i el renglón j multiplicado por k. Intercambiar los renglones i y j.
Escriba tres funciones, una para cada operación elemental. Las funciones deben tomar como argumentos la matriz, sus dimensiones, y los parámetros requeridos para la operación.
Práctica Utilizando las funciones anteriores, implemente en una función el método de Gauss-Jordan para encontrar la solución del sistema Ax = b. La función debe tomar A, b, y el tamaño del sistema n como argumentos:
Iniciar con c = 0 y r = 0. Mientras c < n y r < n, hacer Sea j = arg max i = r,…,n-1 {A(i,c)} Si r es distinto de j, intercambiar renglones r y j. Multiplicar el renglón r por 1/A(r,c) Si A(r,c) es distinto de cero Para cada renglón i = r + 1, …, n, sumar al renglón i el resultado de multiplicar el renglón r por –A(i,c). Incrementar r. Incrementar c. Para r desde n-1 hasta 0, Para cada renglón i = 0,…,r-1, sumar al renglón i el resultado de multiplicar el renglón r por –A(i,r).
Ejercicios Elabore una función que realice el producto C = AB de dos matrices A de m x n y B de n x p. La función debe tomar como parámetros A, B, C, m, n y p.
Elabore una función que, dado el arreglo x[] de tamaño N, calcule el arreglo X[k] para k = 0,…,N-1, dado por:X[k] se conoce como la transformada discreta de Fourier (TDF) de x[n], y es una señal compleja la cual puede representarse como un arreglo de N x 2. Dada X[k], es posible recuperar x[n] mediante la transformada discreta inversa de Fourier (TDIF):Elabore una función que implemente la (TDIF) y verifique que ambas funciones son una inversa de la otra calculando el error cuadrático medio entre una señal de ruido aleatorio x[n], y la versión recuperada a partir de la TDIF de la TDF de x[n].
Ejercicios Considere dos variables aleatorias X y Y, que pueden tomar valores entre 0 y K-1. El histograma conjunto hij de X y Y es una matriz que representa el número de veces que se observa simultáneamente X=i y Y=j en una muestra. Escriba una función que tome como argumentos los arreglos X y Y, ambos de tamaño N y con valores entre 0 y K-1, y calcule el histograma conjunto (de tamaño K x K).
La información mutua de dos variables aleatorias X y Y es una medida de qué tan fácil es predecir X cuando se conoce Y, y se calcula como I(X,Y) = H(X) + H(Y) – H(X,Y),donde H(X) es la entropía de X, y H(X,Y) es la entropía conjunta de X y Y, la cual puede calcularse a partir del histograma conjunto de X y Y como:donde pij = hij / N. Escriba una función que calcule la información mutua de dos arreglos.
Página anterior | Volver al principio del trabajo | Página siguiente |