100% encontró este documento útil (1 voto)
4K vistas6 páginas

Matrices en La Informatica

El documento describe el uso de matrices en la programación y sus aplicaciones. Las matrices son estructuras de datos fundamentales en programación que se usan para almacenar y acceder a datos de forma ordenada. En programación 3D, las matrices se usan para representar transformaciones espaciales que permiten la visualización gráfica de objetos. Las pilas de matrices facilitan el almacenamiento y recuperación de estados de transformación.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
4K vistas6 páginas

Matrices en La Informatica

El documento describe el uso de matrices en la programación y sus aplicaciones. Las matrices son estructuras de datos fundamentales en programación que se usan para almacenar y acceder a datos de forma ordenada. En programación 3D, las matrices se usan para representar transformaciones espaciales que permiten la visualización gráfica de objetos. Las pilas de matrices facilitan el almacenamiento y recuperación de estados de transformación.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

1.

Introducción

Mediante el presente trabajo, será analizada la importancia de las matrices en la carrera


profesional de ingeniería de Sistemas, se verán los usos prácticos de las matrices en la
programación y todas las aplicaciones en la informática.

El uso de Arrays (Matrices) en la programación es un punto base para el trabajo ya que


en cualquier lenguaje de programación se usa el termino, siendo básico para solucionar
problemas con tablas o datos ordenados, si existe algún problema que requiera de tablas
podemos usar los arrays en el lenguaje de programación de nuestra preferencia.

Así es que, si hablamos de informática y específicamente de la programación, podemos


decir que las matrices son básicas para la solución de problemas en todos los ámbitos de la
carrera de Informática.

Otro punto a tomar en cuenta cuando hablamos de matrices es el uso que se le da para las
transformaciones y la informática grafica donde el uso de las matrices es tan importante
como el uso de vectores y otras aplicaciones matemáticas.

2. Uso de Matrices en la programación

En programación, una matriz o vector (llamados en inglés arrays) es una zona de


almacenamiento continuo, que contiene una serie de elementos del mismo tipo, los elementos de
la matriz. Desde el punto de vista lógico una matriz se puede ver como un conjunto de
elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones). En principio, se
puede considerar que todas las matrices son de una dimensión, la dimensión principal, pero los
elementos de dicha fila pueden ser a su vez matrices (un proceso que puede ser recursivo), lo
que nos permite hablar de la existencia de matrices multidimensionales, aunque las más fáciles
de imaginar son los de una, dos y tres dimensiones. Estas estructuras de datos son adecuadas
para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible. Por
el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso secuencial sería
más adecuado utilizar una lista, ya que esta estructura puede cambiar de tamaño fácilmente
durante la ejecución de un programa.

En la estructura de datos para la programación, las matrices son de uso frecuente por lo que
podemos decir que son imprescindibles en la programación de muchos problemas.

Por ejemplo, las notas correspondientes a las distintas evaluaciones realizadas a cada uno de los
alumnos de un determinado curso forman una matriz, y la ficha que contiene los datos
personales de cada uno de estos alumnos es un ejemplo de registro (o estructura).

Esta disposición permitirá escribir código más simple, ya que será posible establecer bucles en
los que se recorra los elementos de una matriz mediante el número de índice.

A las matrices de una dimensión se les suele llamar también vectores o listas, y a las matrices de
dos dimensiones, tablas.

Es posible definir matrices de hasta 60 dimensiones en Visual Basic y de cualquier tipo de datos
(tipos fundamentales y estructuras definidas por el usuario).

La representación de las matrices se hace mediante variables con subíndices. Los subíndices son
números enteros consecutivos y, por defecto, el primer índice valdrá 0.

Una matriz de dos dimensiones se representa con una variable con dos subíndices (filas,
columnas). Una de tres con tres, etcétera.

Ejemplo de programación en C#

Puede almacenar distintas variables del mismo tipo en una estructura de datos de matriz. Para
declarar una matriz especifique el tipo de sus elementos.

type[] arrayName;

Los ejemplos siguientes crean matrices unidimensionales, multidimensionales y escalonadas:

class PruebaMatriz
{
static void Main()
{
// Declarar una matriz simple
int[] array1 = new int[5];

// Declarar e ingresar los datos de la matriz


int[] array2 = new int[] { 1, 3, 5, 7, 9 };

// Sintaxis alternativa
int[] array3 = { 1, 2, 3, 4, 5, 6 };

// Declarar una matriz de dos dimensiones


int[,] multiDimensionalArray1 = new int[2, 3];
// Declarar e ingresar los datos de la matriz
int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };

// Declare a jagged array


int[][] jaggedArray = new int[6][];

// Set the values of the first array in the jagged array structure
jaggedArray[0] = new int[4] { 1, 2, 3, 4 };
}
}

Como vemos el uso de matrices en los lenguajes de programación es básico para la solución de
problemas, en este trabajo usaremos como ejemplo el lenguaje de programación C# que es
usado en la carrera de Ingenieria de Sistemas. Primero veremos la aplicación de las matrices en
objetos.

En C#, las matrices son de hecho objetos y no simplemente regiones direccionables de memoria
contigua como ocurre en C y C++. Array es el tipo base abstracto de todos los tipos de matrices.
Las propiedades y otros miembros de la clase Array se pueden utilizar cuando sea necesario.

Las matrices pueden tener varias dimensiones. Por ejemplo, la siguiente declaración crea una
matriz bidimensional de cuatro filas y dos columnas.

int[,] array = new int[4, 2];

3. Uso de las matrices en las transformaciones y OpenGL

Como podemos ver La teoría de las matrices 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.

Para entender de mejor forma las transformaciones especiales y las matrices en OpenGL y el
uso de imágenes, hablaremos un poco de este.

En la introducción de los diversos conceptos matemáticos para realizar transformaciones se ha


visto la importancia del manejo de matrices y de diferentes operaciones, destacando sobre todas
ellas la multiplicación.

La librería OpenGL intenta facilitar esta labor y conseguir el efecto deseado, OpenGL dispone
de un conjunto de primitivas que simplifican este proceso. En concreto, para aplicar una
transformación a un elemento, por ejemplo, un cubo, será necesario aplicar una transformación
a cada uno de los vértices que lo definen, multiplicando las coordenadas de dichos vértices por
la matriz de transformación adecuada.

Para conseguir los efectos perseguidos con la utilización de las transformaciones, se utilizan dos
matrices particulares, sobre las que se realizan modificaciones: la matriz del modelador y la
matriz de la proyección.

La librería OpenGL implementa un conjunto de primitivas de alto nivel que facilitan la


realización de estas transformaciones sin necesidad de acceder a los elementos individuales de
cada una de las matrices implicadas y simplificando, en gran medida, todo el proceso.

3.1 Matrices de Modelador:


Otro punto importante del uso de matrices cuando hablamos de la transformación son las
Matrices de Modelador la cual nos ayuda en este proceso, simplificando el proceso de
transformación. La principal ventaja que se consigue con la utilización de este método es la
reducción del número de operaciones necesarias para realizar una transformación.
Esto se puede ver claramente con el siguiente ejemplo:

Supongamos un sistema definido por 26 vértices. En caso de trasladar cada uno de los vértices,
sería necesario realizar un total de 26 multiplicaciones, mientras que utilizando este método, tan
sólo se requeriría la traslación del sistema de coordenadas, manteniéndose constante la posición
de los 26 vértices de la figura. En este sentido, la matriz del modelador será una matriz
cuadrada (4x4) que se encargará de definir el nuevo sistema de coordenadas, que se utilizará
para representar los objetos que han sufrido una transformación. Al multiplicar dicha matriz por
la matriz columna que representa el vértice, se obtiene otra matriz columna, que representa las
nuevas coordenadas del vértice transformado.

3.2 Pilas de Matrices:

Como se planteó en apartados anteriores, los efectos de las transformaciones son acumulativos,
con lo que, a menudo, será necesario reiniciar la matriz del modelador al estado inicial para
facilitar la comprensión de las mismas.

Sin embargo, no es necesario realizar siempre este proceso, ya que es posible mantener cada
uno de los efectos que las transformaciones tienen en el sistema de coordenadas. Esto es
especialmente útil en el caso de que se quieran recolocar objetos con respecto a estados
anteriores y volver al estado actual. Para ello se utiliza una pila de matrices como la que se
muestra en la figura, en la que se van almacenando de manera sucesiva las matrices que definen
el sistema de coordenadas en cada momento. De esta forma, se puede insertar la matriz actual
en la pila y aplicarle modificaciones, pudiendo recuperarla posteriormente, tal y como se
muestra:

Pila de matrices

En realidad, OpenGL dispone de una pila para matrices del modelador y de otra para matrices
de proyección, junto con una pila adicional para matrices de textura.

Las operaciones básicas que se pueden realizar sobre la pila de matrices son las siguientes:

 Se puede extraer un elemento (matriz) de la pila mediante una llamada a la primitiva


glPopMatrix(). Esta primitiva, que no contiene parámetros, devolverá un valor
GL_STACK_UNDERFLOW, en el caso de que no sea posible la extracción al no existir
elementos en la pila.

 Se puede insertar un elemento (matriz) en la pila mediante una llamada a la rutina


glPushMatrix(), que tampoco recibe ningún parámetro. Devolverá un valor de error,
concretamente GL_STACK_OVERFLOW, en el caso de que la pila haya alcanzado su número
máximo de elementos permitidos, no pudiéndose realizar la última inserción.

4. EigenFace y el uso de las matrices para el reconocimiento facial

Los sistemas de detección de rostros no podrían concebirse sin el aporte de las transformaciones
espaciales, vectoriales y de las matrices. Las técnica EigenFace se basa en los principios y
propiedades de las matrices cuadradas, de los autovalores, autovectores, matriz de covarianza, y
otros más para realizar los cálculos y predecir un rosto.

Eigenfaces son un conjunto de vectores propios utilizados en el problema de la visión por


ordenador de reconocimiento de la cara humana. El enfoque de la utilización eigenfaces de
reconocimiento fue desarrollado por Sirovich y Kirby y utilizado por Matthew Turk y Alex
Pentland en la clasificación de cara. Se considera el primer ejemplo exitoso de la tecnología de
reconocimiento facial. Estos vectores propios se derivan de la matriz de covarianza de la
distribución de probabilidad del espacio de vector de alta dimensión de las posibles caras de
seres humanos.

Esta técnica, EigenFace, puede incluso ser útil no sólo para rostros sino para cualquier objeto.
Lo fundamental es que todos los elementos que formen parte del conjunto de entrada tengan
cierta forma o patrón común. Por ejemplo, todos los rostros se caracterizan por tener una forma
más o menos normal: dos ojos, una boca, una nariz, etc. Si tú mezclas diferentes objetos no va a
saber diferenciar a uno de otro.

5. Conclusiones
Como pudimos ver, el uso de las matrices en la ingeniería informática es muy útil para
todo tipo de problemas, desde los más básicos como el ordenamiento o resolución de
ecuaciones simples, hasta el uso de las mismas en la trasformación de vectores y su uso
en librerías como OpenGL. Así como estos ejemplos existen otros programas y
problemas informáticos que requieren de todo tipo de matrices.
Para resolver sistemas de ecuaciones se emplean matrices, y gracias a ellas es como una
máquina puede resolver grandes operaciones y ecuaciones complejas en tiempo
relativamente cortos (dejando de lado los grandes sistemas de simulaciones)
En la programación lineal se emplea ampliamente los sistemas de ecuaciones e
inecuaciones. Estos, como ya he dicho se resuelven velozmente mediante matrices.
Esta misma técnica se emplea en los sistemas de tomas de decisiones o STD.
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.
6. Bibliografía
 Informatica Grafica (Universidad de Salamanca) – OpenGL “Manipulación del
espacio: Transformaciones y proyecciones”
 Estructura de Datos (Universidad de Vigo, departamento de Ingeniería
Informatica)
 Representacion de Caras mediante EigenFaces – Luis Llorente Gimenez
 [Link]

Common questions

Con tecnología de IA

Multidimensional arrays facilitate data organization by providing a structured method to represent and manipulate complex data relationships that are inherently multi-dimensional. Unlike linear lists, multidimensional arrays can efficiently store data in a grid-like format, which is beneficial for tasks involving matrices, tables, or spatial data. For instance, a two-dimensional array might represent a matrix, where operations like row and column iteration are naturally supported. Lists, while dynamically resizable, are suited for sequential data; however, they lack the intuitive indexing and direct access advantages that multidimensional arrays provide, often requiring additional structures or logic to emulate similar functionalities .

Matrices are indispensable in programming due to their versatility and efficiency in representing and manipulating data. In computer science and engineering, they enable the compact representation of extensive datasets and facilitate complex operations such as graphics transformations, data sorting, and systems simulations. Their structured format is ideally suited for parallel processing and vectorized operations, commonly needed in high-performance computing tasks. Additionally, matrices support algorithms in machine learning, signal processing, and other fields, making them a critical tool for problem-solving and optimization in various computational applications .

EigenFaces are a set of eigenvectors derived from the covariance matrix of human face images used in facial recognition systems. They represent the principal components of the face data distribution in a high-dimensional vector space. Developed by Sirovich and Kirby, and later used by Turk and Pentland, the approach uses these eigenvectors to identify and classify faces based on their unique features. The matrices involved, especially the covariance matrix of potential human face images, help to predict and recognize face patterns by reducing dimensionality while preserving significant facial features .

Jagged arrays in C# offer the flexibility of variable-length rows, unlike traditional multidimensional arrays with fixed dimensions. This allows each row in a jagged array to have a different number of elements, providing more memory-efficient storage when handling datasets of irregular sizes. Such arrays are particularly useful when the data naturally forms nested structures with differing lengths. Additionally, jagged arrays enable more straightforward implementation of certain algorithms, as each sub-array can be processed independently, offering improved control over memory usage and data organization .

OpenGL uses model and projection matrices to achieve graphical transformations by applying systematic operations to render 3D objects on 2D screens effectively. The model matrix represents the object's position and orientation in space, while the projection matrix determines how the scene is viewed and projected onto the screen. These matrices are manipulated to perform transformations such as rotation, scaling, and translation. By multiplying vertex coordinates with these matrices, OpenGL facilitates the transformation of objects within the scene from their local space to a correctly projected screen space, enabling the rendering of 3D graphics .

Matrix stacks in OpenGL are used to manage hierarchical transformations through a last-in, first-out (LIFO) structure. These stacks allow developers to push and pop matrices, saving and restoring previous transformation states without recalculating them from scratch. This approach is particularly useful when transforming linked objects or returning to a previous transformation state. OpenGL uses different stacks for modelview, projection, and texture matrices. This organization facilitates complex scene manipulations efficiently, as transformations are cumulative and can be managed effortlessly using stack operations like `glPushMatrix()` and `glPopMatrix()` .

Matrices significantly impact video game development by streamlining physics simulations and geometric transformations, key components in realistic game environments. They enable efficient representation and computation of transformations such as scaling, rotation, and translation, which are essential for animating characters and environments. Matrices facilitate the application of physics models by simplifying force calculations and collision detection, making real-time simulations feasible. Their ability to handle multiple transformations through cumulative operations reduces computational complexity, ensuring smooth and accurate rendering of dynamic scenes, which is crucial for maintaining immersive and responsive gameplay .

Matrices contribute significantly to the efficiency of signal processing applications by enabling streamlined computations and data representations. They facilitate the implementation of algorithms like Fast Fourier Transforms (FFTs), linear filters, and convolution operations, which are fundamental to processing and analyzing signals. Matrices allow for batch processing and parallelism, which are critical for real-time signal processing tasks. Their ability to represent multi-channel signals and efficiently manipulate data in vectorized forms reduces computational load and increases throughput, making them integral to the execution and optimization of signal processing algorithms .

In computer graphics, matrices are crucial for performing transformations from 3D to 2D, which is essential for rendering images on screens. Libraries like OpenGL utilize transformation matrices to apply operations such as translation, rotation, and scaling to 3D objects. Each vertex of an object, such as a cube, is transformed by multiplying its coordinates with a transformation matrix. OpenGL offers high-level primitives that automate these transformations by manipulating matrices like the model matrix and the projection matrix, simplifying the conversion process of 3D models to 2D representations .

In computer engineering, matrices play a pivotal role in solving systems of equations, which is a common requirement across various applications, from linear programming to decision-making systems. Matrices enable efficient representation and manipulation of linear equation systems, making it possible to solve equations simultaneously. This is particularly beneficial in applications requiring rapid calculation, such as simulations and some operations in video games, where computational efficiency is crucial. By using matrix operations, these systems of equations are solved quickly, demonstrating the effectiveness of matrices in handling complex, large-scale calculations .

También podría gustarte