2015 DA.NO.VI Univ. Noya Villa Daniel
[SECCIÓN MATRICES] MATRICES] Todo lo referente a la programación de matrices en visual basic 2010
Sección Matrices
ÍN D I C E CONTENIDO
PAGINA Ín d i c e
2
Introducción
3
Lectu ra de un a m atriz
7
Trans Tra ns pu esta de un a m atriz atri z
9
G au au s s J o r d a n
12
Multiplicación entre m atrices atri ces
15
Inv ersa de un a m atriz
18
Determin Det ermin ante de un a m atriz atri z
21
Univ. Noya Villa Daniel
Página 2
Sección Matrices 1. INTRODUCCIÓN Dentro de lo que son las matrices podremos hallar diferentes tipos de ejercicios, aplicaciones y métodos nosotros nos basaremos en la resolución de dichas matrices y en la programación general para todo lo que vayamos necesitando para tal caso, para eso iremos viendo primero conceptos y herramientas generales.
VARIABLES CON SUBÍNDICE ¿QUE SON ESTAS VARIABLES? Las variables con subíndice son aquellas que tiene un numero o índice en la parte inferior de la letra en si ejemplo:
()
(, )
Don de puede variar desde 0 hasta N que pertenece solo a los números enteros reales. ¿Cómo se determinan o dimensionan en el Visual Basic .Net? Este tipo de variables se dimensionan de la siguiente manera:
() Dim a(0 Dim a(0 To To 100) 100) As Single 'Dimensionando la variable con subíndice En esta parte estamos diciendo que nuestra variable a va contener 100 datos distintos
(, ) Dim Dim a(0 To To 100, 0 To To 100) As Single 'Dimensionando la variable con subíndice En esta parte estamos diciendo que nuestra variable a va contener 10000 datos distintos ya que tiene dos subíndices si queremos ver en tipo matriz estaríamos diciendo que tiene 100 filas y 100 columnas, este tipo de variable es la que usaremos en todas nuestras matrices
HERRAMIENTA DATAGRIDVIEW VISUAL BASIC .NET QUE ES Y PARA QUÉ SIRVE ESTA HERRAMIENTA? Esta es una de las herramientas para trabajar con base de datos, el uso que lo daremos nosotros será para mostrar e introducir datos de nuestras matrices. El DataGridView es un objeto que nos permite mostrar los campos de la tabla en nuestra base de datos de una forma sencilla
Univ. Noya Villa Daniel
Página 3
Sección Matrices
Univ. Noya Villa Daniel
Página 4
Sección Matrices COMO SE TRABAJA CON ESTA HERRAMIENTA? Dentro de esta herramienta se puede crear columnas de tres métodos diferentes:
Método 1: Dentro de la herramienta DataGridView en la parte superior derecho hacemos clic y nos saldrá el dialogo Tareas de DataGridView hacemos clic en Agregar columna y luego hacemos clic en agregar hasta tener el numero de columnas deseadas y luego hacemos clic en cerrar al momento de cerrar observaremos que las columnas ya están ingresadas mas una fila pero en la parte del encabezado encontrar el texto siguiente Column 1 si queremos cambiar dicho texto solo tendremos que cambiarlo ya sea en el momento de agregar columnas en la parte del Texto de encabezado o caso contrario deberemos de hacer clic nuevamente en el menú Tareas de DataGridView y hacer clic en la parte que dice Editar columnas y ahí cambiar a nuestro gusto lo que nosotros queramos desde el ancho de las columnas hasta el tipo de letra de cada una de ellas
Univ. Noya Villa Daniel
Página 5
Sección Matrices Para editar las columnas
Método 2: Para este método usaremos dos contadores distintos es decir crearemos las filas y columnas desde un botón o desde nuestra programación. Dim N Dim N As Integer 'Determinando la variable para el numero de las filas y columnas de nuestro DataGridView N = 5 'Usando un ejemplo de 5 filas y columnas For i For i = 1 To To N N 'Usando el primer contador para crear las columnas DataGridView1.Columns.Add("Columna" DataGridView1.Columns.Add( "Columna" + + Str(i), "" "") ) 'Creando las columnas una por una con su nombre respectivo Next En esta parte ("Columna" "Columna" + + Str(i) debemos entender que estamos dando un nombre a la columna eso es de manera obligado es por eso que estamos jugando con la parte numeral para distinguir cada columna además en la parte que están comillas sueltas ahí podemos poner el encabezado de cada columna, en la parte de abajo en las filas ya no es necesario poner nada de lo anterior For i For i = 1 To To N N - 1 'Usando el segundo contador para crear las filas DataGridView1.Rows.Add() 'Creando las filas una por una Next
Univ. Noya Villa Daniel
Página 6
Sección Matrices Método 3: Este es uno de los métodos mas fáciles que podremos hallar ya que en solo dos filas de programación podremos crear las filas y las columnas de nuestro DataGridView Dim N Dim N As Integer 'Determinando la variable para el numero de las filas y columnas de nuestro DataGridView N = 5 'Usando un ejemplo de 5 filas y columnas DataGridView1.ColumnCount DataGridView1.ColumnCount = N 'Creando las columnas DataGridView1.RowCount DataGridView1.RowCount = N 'Creando las filas
PARA QUÉ SIRVE ESTA HERRAMIENTA? Esta herramienta sirve como bien lo dijimos arriba para poder mostrar y leer datos y trabajar en este caso con matrices, debemos mencionar que el verdadero uso de esta herramienta se lo da para trabajar con base de datos.
2. LECTURA DE UNA MATRIZ: Diagrama de flujo:
Inicio
m,n
i=1→m
Finalizar
j=1→n
a(i,j)
a(i,j) Univ. Noya Villa Daniel
Página 7
Sección Matrices Codificación: Interface:
Código: Dim Dim N, M As Integer 'Determinando la variable para el numero de las filas y columnas de nuestro DataGridView Dim a(0 Dim a(0 To To 100, 100, 0 To To 100) 100) 'Determinando la variable para los datos a ller de la matriz N
=
Val(TextBox1.Text)
'Valor
de
N
filas
para
la
lectura
y
creacion de la matriz M = Val(TextBox2.Text) 'Valor de M columnas para la lectura y creacion de la matriz DataGridView1.ColumnCount DataGridView1.Col umnCount = M 'Creando las columnas DataGridView1.RowCount DataGridView1.Row Count = N 'Creando las filas For For i = 1 To N 'Iniciando el primer contador (Fila) para la lectura y para mostrar
los datos
For j For j = 1 To To M M 'Iniciando el segundo contador (Columna) para la lectura y para mostrar los datos
Univ. Noya Villa Daniel
Página 8
Sección Matrices a(i, j) = Val(InputBox("Digite Val(InputBox( "Digite el valor de a(" + a(" + Str(i) + "," + "," + Str(j) +
"):", "):" , "Lectura de datos")) datos" ))
'Realizando la lectura de los datos DataGridView1(j - 1, i - 1).Value = Str(a(i, j)) 'Mostrando los datos leidos en el DataGridView Next Next
3. TRANSPUESTA DE UNA MATRIZ: Diagrama de flujo: Inicio
m,n
i=1→m i=1→n
Finalizar
j=1→n j = 1 →m a(i,j) b(i,j) = a(j,i)
b(i,j)
Univ. Noya Villa Daniel
Página 9
Sección Matrices Codificación: Interface:
Código: Dim Dim N, M As Integer 'Determinando la variable para el numero de las filas y columnas de nuestro DataGridView Dim Dim a(0 To To 100, 0 To To 100), b(0 To To 100, 0 To To 100) As Single 'Determinando la variable para los datos a leer de la matriz Private Sub Sub Button1_Click( Button1_Click(ByVal ByVal sender sender As As System. System.Object Object, , ByVal e As As System. System.EventArgs EventArgs) ) Handles Handles Button1.Click Button1.Click N = Val(TextBox1.Text) Val(TextBox1.Text) 'Valor de N filas para la lectura y creacion de la matriz M
=
Val(TextBox2.Text)
'Valor
de
M
columnas
para
la
lectura y creacion de la matriz DataGridView1.ColumnCount DataGridView1.Col umnCount = M 'Creando las columnas Univ. Noya Villa Daniel
Página 10
Sección Matrices DataGridView1.RowCount DataGridView1.Row Count = N 'Creando las filas For For i = 1 To N 'Iniciando el primer contador (Fila) para la lectura y para mostrar los datos For For j
=
1
To
M
'Iniciando
el
segundo
contador
(Columna) para la lectura y para mostrar los datos a(i, j) = Val(InputBox("Digite Val(InputBox( "Digite el valor de a(" + Str(i) + "," "," + + Str(j) + "):" "):", , "Lectura de datos")) datos" )) 'Realizando la lectura de los datos DataGridView1(j - 1, i - 1).Value = Str(a(i, j)) 'Mostrando los datos leidos en el DataGridView Next Next End Sub Private Sub Sub Button2_Click( Button2_Click(ByVal ByVal sender sender As As System. System.Object Object, , ByVal e As As System. System.EventArgs EventArgs) ) Handles Handles Button2.Click Button2.Click DataGridView2.ColumnCount DataGridView2.Col umnCount = N 'Creando las columnas DataGridView2.RowCount DataGridView2.Row Count = M 'Creando las filas For For i = 1 To M 'Iniciando el primer contador (Fila) para la transpuesta y para mostrar los datos For For j
=
1
To
N
'Iniciando
el
segundo
contador
(Columna) para la transpuesta y para mostrar los datos b(i, j) = a(j, i) 'REalizando la transpuesta de la matriz DataGridView2(j - 1, i - 1).Value = Str(b(i, j)) 'Mostrando los datos de la transpuesta en el DataGridView Next Next End Sub
Univ. Noya Villa Daniel
Página 11
Sección Matrices 4. GAUSS JORDAN: Diagrama de flujo: Inicio
n
i=1→n
a(i,j+1)
i=1→n j=1 →n i=1→n j=1 →n
a(i,j+1)
a(i,j)
i=1 →n
Finalizar
temp = a (i,i) j <> i
No
j=1 →n+1
Si Q = a(j,i) / a(i,i)
j=1→n
a(i,j) a(i,j) = a(i,j) / temp
k=1 →n+1
a(j,k) = a(j,k) – ( a(i,k) * Q )
Codificación: Interface:
Univ. Noya Villa Daniel
Página 12
Sección Matrices Código: Dim N Dim N As Integer 'Determinando la variable para el numero de las filas y columnas de nuestro DataGridView Dim q, Dim q, temp As Single 'Variables para los datos alternos Dim a(0 Dim a(0 To To 100, 100, 0 To To 100) 100) As Single 'Determinando la variable para los datos a leer de la matriz Private Sub Sub Button1_Click( Button1_Click(ByVal ByVal sender sender As As System. System.Object Object, , ByVal ByVal e e As System. As System.EventArgs EventArgs) ) Handles Handles Button1.Click Button1.Click N = Val(TextBox1.Text) Val(TextBox1.Text) 'Valor de N filas para la lectura y creacion de la matriz DataGridView1.ColumnCount DataGridView1.Col umnCount = N + 1 'Creando las columnas DataGridView1.RowCount DataGridView1.Row Count = N 'Creando las filas For i For i = 1 To To N N 'Iniciando el primer contador (Fila) para la lectura y para mostrar los datos For j For j = 1 To To N N 'Iniciando el segundo contador (Columna) para la lectura y para mostrar los datos a(i, j) = Val(InputBox("Digite Val(InputBox( "Digite el valor de los datos dependientes(" + dependientes(" + Str(i) + "," "," + + Str(j) + "):" "):", , "Lectura de datos")) datos" )) 'Realizando la lectura de los datos DataGridView1(j DataGridView1(j - 1, i - 1).Value = Str(a(i, j)) 'Mostrando los datos leidos en el DataGridView Next a(i, N + 1) = Val(InputBox("Digite Val(InputBox( "Digite el valor del dato independiente " + " + Str(i) + ":" ":", , "Lectura de datos")) datos")) 'Realizando la lectura de los datos independientes DataGridView1(N, i - 1).Value = ":" ":" + + Str(a(i, N + 1)) 'Mostrando los datos leidos en el DataGridView Next End Sub Private Sub Sub Button2_Click( Button2_Click(ByVal ByVal sender sender As As System. System.Object Object, , ByVal ByVal e e As System. As System.EventArgs EventArgs) ) Handles Handles Button2.Click Button2.Click Univ. Noya Villa Daniel
Página 13
Sección Matrices DataGridView2.RowCount DataGridView2.Row Count = N For i For i = 1 To To N N 'Iniciando el primer contador para trabajar con las operaciones filas columnas For j For j = 1 To To N N 'Iniciando el segundo contador para trabajar con las operaciones filas columnas If j If j <> i Then 'Verificando que no sea datos de la diagonal principal q = a(j, i) / a(i, i) 'Operacion alterna For k For k = 1 To To N N + 1 'Trabjando con las operaciones filas columnas a(j, k) = a(j, k) - (a(i, k) * q) 'Trabajando con las diagonales Next End If Next Next For i For i = 1 To To N N 'Contador para volver la diagonal principal en 1 temp = a(i, i) 'Buscando el dato de la diagonal principal For j For j = 1 To To N N + 1 'Contador para volver la diagonal principal en 1 a(i, j) = a(i, j) / temp 'Dividiendo cada dato con el valor de la diagonal principal Next Next For i For i = 1 To To N N DataGridView2(0, i - 1).Value = Str(a(i, N + 1)) 'Mostrando el valor del resultado deseado Next End Sub Univ. Noya Villa Daniel
Página 14
Sección Matrices 5. MULTIPLICACIÓN ENTRE MATRICES: Diagrama de flujo: Inicio m,n,p
i=1→m i=1→n j=1→n j=1→p a(i,j) b(i,j)
i=1→m
Finalizar
j=1→p c(i,j) = 0 k=1→n
c(i,j)
c(i,j) = c(i,j) + a(i,k) * b(k,j)
Codificación: Interface:
Univ. Noya Villa Daniel
Página 15
Sección Matrices Código: Dim M, Dim M, N, P As Integer 'Determinando la variable para el numero de las filas y columnas de nuestro DataGridView Dim Dim a(0 To To 100, 0 To To 100), b(0 To To 100, 0 To To 100) As Single 'Determinando la variable para los datos a leer de la matriz Dim c(0 Dim c(0 To To 100, 100, 0 To To 100) 100) As Single 'Dimensionando la varible para la matriz resultado Private Sub Sub Button1_Click(ByVal Button1_Click( ByVal sender As As System.Object System.Object, , ByVal e As System. As System.EventArgs EventArgs) ) Handles Handles Button1.Click Button1.Click M = Val(TextBox1.Text) Val(TextBox1.Text) 'Valor de N filas para la lectura y creacion de la matriz N = Val(TextBox2.Text) Val(TextBox2.Text) 'Valor de N filas para la lectura y creacion de la matriz P = Val(TextBox3.Text) Val(TextBox3.Text) 'Valor de N filas para la lectura y creacion de la matriz DataGridView1.ColumnCount DataGridView1.Col umnCount = N 'Creando las columnas DataGridView1.RowCount DataGridView1.Row Count = M 'Creando las filas DataGridView2.ColumnCount DataGridView2.Col umnCount = P 'Creando las columnas DataGridView2.RowCount DataGridView2.Row Count = N 'Creando las filas For For i = 1 To M 'Iniciando el primer contador (Fila) para la lectura y para mostrar los datos For For j
=
1
To
N
'Iniciando
el
segundo
contador
(Columna) para la lectura y para mostrar los datos a(i, j) = Val(InputBox("Digite Val(InputBox( "Digite el valor de la matriz a(" a(" + Str(i) + "," "," + Str(j) + "):" "):", , "Lectura de datos")) datos")) 'Realizando la lectura de los datos DataGridView1(j - 1, i - 1).Value = Str(a(i, j)) 'Mostrando los datos leidos en el DataGridView Next Next
Univ. Noya Villa Daniel
Página 16
Sección Matrices For For i = 1 To N 'Iniciando el primer contador (Fila) para la lectura y para mostrar los datos For For j
=
1
To
P
'Iniciando
el
segundo
contador
(Columna) para la lectura y para mostrar los datos b(i, j) = Val(InputBox("Digite Val(InputBox( "Digite el valor de la matriz b(" b(" + Str(i) + "," "," + Str(j) + "):" "):", , "Lectura de datos")) datos")) 'Realizando la lectura de los datos DataGridView2(j - 1, i - 1).Value = Str(b(i, j)) 'Mostrando los datos leidos en el DataGridView Next Next End Sub Private Sub Sub Button2_Click( Button2_Click(ByVal ByVal sender sender As As System. System.Object Object, , ByVal e As As System. System.EventArgs EventArgs) ) Handles Handles Button2.Click Button2.Click DataGridView3.ColumnCount DataGridView3.Col umnCount = P 'Creando las columnas DataGridView3.RowCount DataGridView3.Row Count = M 'Creando las filas For For i = 1 To M 'Iniciando el contador para trabajar con las operaciones multiplicacion y suma For For j = 1 To P 'Iniciando el contador para trabajar con las operaciones multiplicacion y suma c(i, j) = 0 'Iniciando un acumulador For For k = 1 To N 'Contador para el trabajo del acumulador c(i, j) = c(i, j) + (a(i, k) * b(k, j)) 'Realizando el calculo de la operacion fila columna Next DataGridView3(j - 1, i - 1).Value = Str(c(i, j)) 'Mostrando el resultado final Next Next End Sub Univ. Noya Villa Daniel
Página 17
Sección Matrices 6. INVERSA DE UNA MATRIZ: Diagrama de flujo: Inicio
n
i=1→n i=1 →n j=1→n
i=1→n j=1→n
i=1 →n
Finalizar
a(i,j) temp = a (i,j) i <> j i=j
Si
a(i,j + n) = 1
j=n+1 →2 * n
No j=1 →2 * n
Si
a(i,j)
No Q = a(j,i) / a(i,i)
a(i,j) = a(i,j) / temp
a(i,j + n) = 0 k=1 →2 * n
a(j,k) = a(j,k) - a(i,k) * Q
Codificación: Interface:
Univ. Noya Villa Daniel
Página 18
Sección Matrices Código: Dim N As Integer 'Determinando la variable para el numero de las filas y columnas de nuestro DataGridView Dim a(0 Dim a(0 To To 100, 100, 0 To To 100) 100) As Single 'Determinando la variable para los datos a leer de la matriz Dim q, Dim q, temp As Single 'Dimensionando la varible auxiliares Private Sub Sub Button1_Click(ByVal Button1_Click( ByVal sender As As System.Object System.Object, , ByVal e As System. As System.EventArgs EventArgs) ) Handles Handles Button1.Click Button1.Click N = Val(TextBox1.Text) Val(TextBox1.Text) 'Valor de N filas para la lectura y creacion de la matriz DataGridView1.ColumnCount DataGridView1.Col umnCount = N 'Creando las columnas DataGridView1.RowCount DataGridView1.Row Count = N 'Creando las filas For For i = 1 To N 'Iniciando el primer contador (Fila) para la lectura y para mostrar los datos For For j
=
1
To
N
'Iniciando
el
segundo
contador
(Columna) para la lectura y para mostrar los datos a(i, j) = Val(InputBox("Digite Val(InputBox( "Digite el valor de la matriz a(" a(" + Str(i) + "," "," + Str(j) + "):" "):", , "Lectura de datos")) datos")) 'Realizando la lectura de los datos DataGridView1(j - 1, i - 1).Value = Str(a(i, j)) 'Mostrando los datos leidos en el DataGridView If j If j = i Then 'Creando la matriz aumentada a(i, j + N) = 1 'Colocando los valores a la diagonal principal de nuestra matriz aumentada Else a(i, j + N) = 0 'Colocando los valores a los demas datos de la matriz aumentada End If Next Next End Sub Univ. Noya Villa Daniel
Página 19
Sección Matrices Private Sub Sub Button2_Click(ByVal Button2_Click( ByVal sender As As System.Object System.Object, , ByVal e As System. As System.EventArgs EventArgs) ) Handles Handles Button2.Click Button2.Click DataGridView2.ColumnCount DataGridView2.Col umnCount = N 'Creando las columnas DataGridView2.RowCount DataGridView2.Row Count = N 'Creando las filas For i For i = 1 To To N N 'Iniciando el primer contador para trabajar con las operaciones filas columnas For For j = 1 To N 'Iniciando el segundo contador para trabajar con las operaciones filas columnas If j If j <> i Then 'Verificando que no sea datos de la diagonal principal q = a(j, i) / a(i, i) 'Operacion alterna For For k
=
1
To To N
*
2
'Trabjando
con
las
operaciones filas columnas a(j,
k)
=
a(j,
k)
-
(a(i,
k)
*
q)
'Trabajando con las diagonales Next End If Next Next For i For i = 1 To To N N 'Contador para volver la diagonal principal en 1 temp
=
a(i,
i)
'Buscando
el
dato
de
la
diagonal
principal For j For j = 1 To To N N * 2 'Contador para volver la diagonal principal en 1 a(i, j) = a(i, j) / temp 'Dividiendo cada dato con el valor de la diagonal principal Next Next For For i = 1 To N 'Contador para mostrar la inversa de la matriz Univ. Noya Villa Daniel
Página 20
Sección Matrices For For j = N + 1 To To N * 2 'Contador para mostrar la inversa de la matriz DataGridView2(j DataGridView2(j - (N + 1), i - 1).Value = Str(a(i, j)) 'Mostrando la inversa de la matriz Next Next End Sub
7. DETERMINANTE DE UNA MATRIZ: Diagrama de flujo: Inicio
N
i=1 →N i=1→N j = 1 → N det = 1
j=1→N a(i,j)
j <> i
i=1→N
det
det = det * a (i,i)
Finalizar
No
Si Q = a(j,i) / a(i,i)
k=1 →N
a(j,k) = a(j,k) – ( a(i,k) * Q )
Codificación: Interface:
Univ. Noya Villa Daniel
Página 21
Sección Matrices Codigo: Dim N As Integer 'Determinando la variable para el numero de las filas y columnas de nuestro DataGridView Dim a(0 Dim a(0 To To 100, 100, 0 To To 100) 100) As Single 'Determinando la variable para los datos a leer de la matriz Dim q, Dim q, det As Single 'Dimensionando la varible auxiliares Private Sub Sub Button1_Click(ByVal Button1_Click( ByVal sender As As System.Object System.Object, , ByVal e As System. As System.EventArgs EventArgs) ) Handles Handles Button1.Click Button1.Click N = Val(TextBox1.Text) Val(TextBox1.Text) 'Valor de N filas para la lectura y creacion de la matriz DataGridView1.ColumnCount DataGridView1.Col umnCount = N 'Creando las columnas DataGridView1.RowCount DataGridView1.Row Count = N 'Creando las filas For For i = 1 To N 'Iniciando el primer contador (Fila) para la lectura y para mostrar los datos For For j
=
1
To
N
'Iniciando
el
segundo
contador
(Columna) para la lectura y para mostrar los datos a(i, j) = Val(InputBox("Digite Val(InputBox( "Digite el valor de la matriz a(" a(" + Str(i) + "," "," + Str(j) + "):" "):", , "Lectura de datos")) datos")) 'Realizando la lectura de los datos DataGridView1(j - 1, i - 1).Value = Str(a(i, j)) 'Mostrando los datos leidos en el DataGridView Next Next End Sub Private Sub Sub Button2_Click(ByVal Button2_Click( ByVal sender As As System.Object System.Object, , ByVal e As System. As System.EventArgs EventArgs) ) Handles Handles Button2.Click Button2.Click For i For i = 1 To To N N 'Iniciando el primer contador para trabajar con las operaciones filas columnas For For j = 1 To N 'Iniciando el segundo contador para trabajar con las operaciones filas columnas
Univ. Noya Villa Daniel
Página 22
Sección Matrices If j If j <> i Then 'Verificando que no sea datos de la diagonal principal q = a(j, i) / a(i, i) 'Operacion alterna For k For k = 1 To N 'Trabjando con las operaciones filas columnas a(j,
k)
=
a(j,
k)
-
(a(i,
k)
*
q)
'Trabajando con las diagonales Next End If Next Next det = 1 'Acumulador para la determinante For i For i = 1 To To N N 'Contador para calcular el determinante det
=
det
*
a(i,
i)
'Calculando
el
determinante
mediante la diagonal principal Next TextBox2.Text = Str(det) 'Mostrando el determinante End Sub
Univ. Noya Villa Daniel
Página 23