Professional Documents
Culture Documents
entre matrices, suma y producto de dos matrices, el producto de una matriz por un
vector, el producto de una matriz por un escalar, la traza de una matriz y la matriz
traspuesta de una matriz dada.
Vectores y matrices
Un vector es un array unidimensional de números. Se define la clase Vector con dos
miembros dato, el número de datos que guarda y el array unidimensional que guarda
dichos datos.
Una matriz es un array bidimensional de números. En general, decimos que una matriz
tiene una dimensión m x n, cuando los números están dispuestos en m filas y n
columnas.
Se denominan matrices cuadradas a aquellas que tienen el mismo número de filas que
de columnas. Estas matrices tienen especial importancia y serán las que tratemos en
estas páginas.
Los constructores
Vamos a definir dos constructores en la clase Vector, al primero se le pasa el número de
elementos que va a guardar e inicializan a cero todos sus elementos.
public Vector(int n) {
this.n=n;
x=new double[n];
for(int i=0; i<n; i++){
x[i]=0.0;
}
}
public Vector(double[] x) {
this.x=x;
n=x.length;
}
Para crear un vector v que guarde los datos del array v1 se escribe
public Matriz(int n) {
this.n=n;
x=new double[n][n];
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
x[i][j]=0.0;
}
}
}
Para crear una matriz a de dimensión tres cuyos elementos son todos ceros, se escribe.
public Matriz(double[][] x) {
this.x=x;
n=x.length;
}
Mostrar una matriz en la pantalla de texto es difícil, ya que Java no dispone de una
función que sitúe el cursor de texto en una posición de la pantalla, como lo hace la
función gotoxy disponible en los lenguajes C/C++. La única alternativa que nos queda
es mostrar los elementos de una fila unos a continuación de los otros separados por un
tabulador, después otra fila y así hasta mostrar todos los elementos de la matriz.
Para mostrar los elementos de la matriz, redefinimos la función toString de la clase base
Object, de la cual deriva implícitamente Matriz. Separamos los elementos de una fila
mediante el carácter tabulador '\t', y limitamos el número de decimales a tres mediante
la función Math.round. Cuando se acaba una fila se inserta un retorno de carro '\n' y se
continua con la siguiente fila, y así sucesivamente.
Vamos añadiendo al string texto, los elementos de la matriz y los caracteres separadores
entre elementos y entre filas de elementos.
Matriz a=(Matriz)d.clone();
double traza=a.traza();
cij=aij+bij
Para sumar dos matrices, se define una función miembro estática denominada suma.
Dentro de la función, se crea una matriz temporal resultado, con la misma dimensión de
las matrices que intervienen en la operación, y se guardan en sus elementos el resultado
de la suma de las matrices a y b. Finalmente, la función suma devuelve la matriz
resultado.
La regla para multiplicar dos matrices es bastante más complicada que para sumar dos
matrices de las mismas dimensiones. En general, se pueden multiplicar dos matrices de
dimensiones m x n y n x q, dando como resultado una matriz de dimensiones m x q. En
este apartado nos circunscribiremos exclusivamente a matrices cuadradas de dimensión
n.
Los elementos cij se obtienen multiplicando los elementos aik de la fila i por los
elementos akj de la columna j, y sumando los resultados.
El producto de un escalar (número real) por una matriz que da como resultado otra
matriz cuyos elementos están todos multiplicados por dicho escalar. Se define también
la operación conmutativa
Al multiplicar un vector fila por una matriz cuadrada de la misma dimensión obtenemos
otro vector fila. El código es semejante al de la función producto definida previamente.
Matriz traspuesta
Una matriz traspuesta de otra matriz es aquella que tiene los mismos elementos pero
dispuestos en forma distinta. Las columnas de la matriz original se transforman en filas
de la matriz traspuesta. La definición de la función estática traspuesta no reviste
dificultad alguna
main()
{
cha r matr i z [7/]*[7Dec
] ; la ramos una matr i z de 7*7 ca rac te res * /
i n t c ,d ; / * Contadores * /
for(c=0;c<=6;c++)
{
for(d=0;d<=6;d++)
{
printf("Caracter para guardar en matriz[%d][%d]: ",c,d);
scanf("%c",&matriz[c][d]);
getchar ( ) ;
}
}
for(c=0;c<=6;c++)
{
for(d=0;d<=6;d++)
{
printf("\nValor matriz[%d][%d]=%c",c,d,matriz[c][d]);
}
}
getch();
}
Tutorial
• Matrices en general
• Declarar matrices
• Inicializar matrices
Matrices en general
En las matrices de C#, los índices empiezan en cero. Las matrices de C# funcionan de forma similar a
como lo hacen en la mayoría de los lenguajes populares; existen, sin embargo, algunas diferencias que
se deben conocer.
Cuando se declara una matriz, los corchetes ([]) deben ir después del tipo, no después del identificador.
Colocar los corchetes después del identificador no es sintácticamente válido en C#.
Otro detalle es que el tamaño de la matriz no forma parte de su tipo, como ocurre en el lenguaje C. Esto
permite declarar una matriz y asignarle cualquier matriz de objetos int, independientemente de la
longitud de la matriz.
Declarar matrices
Matrices unidimensionales:
int[] numbers;
Matrices multidimensionales:
string[,] names;
La declaración de matrices (como se muestra arriba) no crea realmente las matrices. En C#, las
matrices son objetos (se explica más adelante en este tutorial) cuyas instancias deben crearse. Los
siguientes ejemplos muestran cómo crear matrices:
Matrices unidimensionales:
Matrices multidimensionales:
También se pueden utilizar matrices más grandes. Por ejemplo, se puede utilizar una matriz rectangular
de tres dimensiones:
Incluso, se pueden combinar matrices rectangulares y escalonadas. Por ejemplo, el siguiente código
declara una matriz unidimensional que contiene matrices tridimensionales de matrices bidimensionales
de tipo int:
int[][,,][,] numbers;
Ejemplo
El siguiente es un programa completo en C# que declara y crea instancias de las matrices comentadas
anteriormente.
// arrays.cs
using System;
class DeclareArraysSample
{
public static void Main()
{
// Single-dimensional array
int[] numbers = new int[5];
// Multidimensional array
string[,] names = new string[5,4];
Inicializar matrices
Matrices unidimensionales
int[] numbers = new int[5] {1, 2, 3, 4, 5};
string[] names = new string[3] {"Matt", "Joanne", "Robert"};
Matrices multidimensionales
int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = new string[2, 2] { {"Mike","Amy"}, {"Mary","Albert"} };
int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
O bien
Observe que no existe sintaxis de inicialización para los elementos de una matriz escalonada.
El siguiente código declara una matriz multidimensional y asigna el valor 5 al miembro ubicado en [1,
1]:
int[,] numbers = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} };
numbers[1, 1] = 5;
La siguiente es una declaración de una matriz escalonada de una sola dimensión que contiene dos
elementos. El primer elemento es una matriz de dos enteros, mientras que el segundo es una matriz de
tres enteros:
int[][] numbers = new int[][] { new int[] {1, 2}, new int[] {3, 4, 5}
};
La siguiente instrucción asigna 58 al primer elemento de la primera matriz y 667 al segundo elemento
de la segunda matriz:
numbers[0][0] = 58;
numbers[1][1] = 667;
En C#, las matrices son realmente objetos. System.Array es el tipo base abstracto de todos los tipos
de matrices. Las propiedades y otros miembros de la clase System.Array se pueden utilizar cuando sea
necesario. Un ejemplo de esto sería utilizar la propiedad Length para obtener la longitud de una matriz.
El siguiente código asigna la longitud de la matriz numbers, que es 5, a una variable denominada
LengthOfNumbers:
La clase System.Array proporciona muchos otros métodos y propiedades útiles, como métodos para
ordenar, buscar y copiar matrices.
C# dispone de la instrucción foreach. Esta instrucción proporciona un modo simple y limpio de iterar en
los elementos de una matriz. Por ejemplo, el siguiente código crea una matriz denominada numbers y la
recorre mediante la instrucción foreach:
Con matrices multidimensionales, se puede utilizar el mismo método para recorrer los elementos, por
ejemplo:
int[,] numbers = new int[3, 2] {{9, 99}, {3, 33}, {5, 55}};
foreach(int i in numbers)
{
Console.Write("{0} ", i);
}
9 99 3 33 5 55
Sin embargo, con matrices multidimensionales, utilizar un bucle for anidado proporciona más control
sobre los elementos de la matriz.