Etiquetas

domingo, 31 de mayo de 2015

14. Aplicaciones con matrices

Continuando con matrices, la importancia de esta forma matemática de representar objeto, cosas, variables es muy amplio que si nos pusiéramos a profundizar sobre el tema tocaría escribir un sinnúmero de artículos  más, pero lo que haremos es dar una breve información. La teoría matriz es ampliamente utilizada en la informática. Las bibliotecas gráficas como por ejemplo OpenGL se valen de transformaciones espaciales y de las matrices para representar gráficos 3D a 2D que luego se traducen a imagen en los monitores. 

También son muy útiles para agilizar algunas operaciones algebraicas que de otro modo serían tediosas de resolver de otro modo. Por ejemplo, calcular el valor n-ésimo (para un n muy grande) de la serie de fibonacci es impráctico por algoritmos recursivos, e iterativos. Lo mejor es optar por algoritmos basados en el principio divide y vencerás y en las matrices. 

Los sistemas de detección de rostros no podrían concebirse sin el aporte de las transformaciones espaciales, vectoriales y de las matrices.  En la programación lineal se emplea ampliamente los sistemas de ecuaciones e inecuaciones. Estos, como ya he dicho se resuelven velozmente mediante matrices.

En los videos juegos y sistemas de simulación se emplean muchas veces para representar de forma abstracta ciertas estructuras de datos que puedan representar algunas entidades del dominio en estudio. Por ejemplo, se puede representar o concebir el mapa de un terreno de un juego como una matriz. Como es el caso del juego buscaminas que se ha dado como ejemplo en clases de algoritmo para la temática de matrices.

Pero como no vamos a profundizar en el tema, veremos como se utilizan técnicas en Matlab para resolver distintos tipos de matrices; como sabemos Matlab está fundamentalmente orientado al trabajo y el cálculo matricial. Veremos que las operaciones están definidas para el trabajo con este tipo de elementos.

Por ejemplo, el siguiente comando define una matriz A de dimensión (3x3):
>> A=[1 2 3; 4 5 6; 7 8 9]
La respuesta del programa es:
         1 2 3
         4 5 6
         7 8 9
Podemos hacer las operaciones, suma (+), resta (-), multiplicación (*), producto punto (.*), exponencial (^), división (/) (\),  inversa (‘).
inv(A) da como resultado la matriz inversa de A.
det(A) da como resultado el determinante de A.
trace(A) da como resultado la traza de A.
rank(A) da el rango de A
eye(n) forma la matriz identidad de  tamaño (nxn)
zeros(m,n) forma una matriz de ceros de tamaño (mxn)
zeros(n) forma una matriz de ceros de tamaño (nxn)
ones(n) forma una matriz de unos de tamaño (nxn)
ones(m,n) forma una matriz de unos de tamaño (mxn)
rand: este comando genera números pseudoaleatorios distribuidos uniformemente entre 0 y 1. Cada llamada proporciona un nuevo número.
rand(n): genera una matriz de números pseudoaleatorios entre 0 y 1, con distribución uniforme, de tamaño nxn.
rand(m,n):  igual que en el caso anterior pero de tamaño mxn.
El operador (:) es de gran importancia en Matlab. Puede decirse que es un operador que respeta el rango. Veamos su utilidad con algunos ejemplos:
>> x=1:10
x =
     1     2     3     4     5     6     7     8     9    10
>> x=[0:2:10]
x =     0     2     4     6     8    10
A continuación veamos cómo podemos mostrar los elementos de T en el orden en que es almacenado. En primer lugar, asignemos un valor a T:
T=rand(4,2,3);
En el vector columna correspondiente, los elementos vienen dados en el orden en que son almacenados por:
for p=1:3
    for n=1:2
        for m=1:4
            disp(T(m,n,p));
        end
    end
end

Para obtener ayuda acerca de estas funciones, en la ventana de MatLab escribe help sub2indo help ind2sub. Para obtener ayuda mas detallada, escribe doc sub2ind o doc ind2sub.
Ejemplo
Escriba una matriz que de los puntos intercalados dentro de la matriz como se realiza en una tabla de ajedrez.
Void imprime_ajedrez(matrix,m,n)
                Variables:
 I: entero
                INICIO
                               PARA i DESDE 1 HASTA m CON_VARIACION +1
                                               SI i % 2 <> 0
                                                               Imprime_fila_intercalada(matrix, i, 1, n)
                                               DE_LO_CONTRARIO
                                                               Imprime_fila_intercalada(matrix,i,2,n)
                                               Fin(SI)
                               Fin(PARA)
                FIN
Fin(imprime_ajedrez)
Void imprime_fila_intercalada(matriz, fila, inicio, fin)
                Variables:
j: entero
                INICIO
                               PARA j DESDE inicio HASTA fin CON_VARIACION +2
                                               ESCRIBA(matriz[fila][j]
                               Fin(PARA)
                FIN
Fin(imprime_fila_intercalada)

Proceso en Matlab
function imprime_ajedrez(matriz,m,n)
                for i = 1:1:m
                               if mod(i,2) ~= 0
                                               imprima_fila_intercalada(matriz, i, 1, n);
        else
                                               imprima_fila_intercalada(matriz, i, 2, n);
        end
    end
end

Chequéate el siguiente  vídeo para que tenga una idea mas clara del trabajo con variables de tipo matricial en matlab.


POR CAMILO BORJA © 2015 ALL RIGHTS RESERVED. 

Fuentes consultadas.
Manipulación de matrices en Matlab.2015. kioskea.com. http://es.kioskea.net/faq/2991-manipulacion-basica-de-matrices-en-matlab.
Mnp@ofimatica.net. 2015. Manipulación básica de matrices en MatLabhttp://es.kioskea.net/faq/matlab-141#2991


0 comentarios:

Publicar un comentario