Visual Basic Foro
General => General => Mensaje iniciado por: Luffy en Octubre 30, 2014, 01:12:49 pm
-
Muy buen día,
Tengo un grave problema, estoy intentando resolver una matriz n x n que me devuelva el cofactor o la expansión de cofactores. he logrado hacer sin problema una matriz 2,2 3,3 4,4 pero una patriz 5,5 en adelante es el inconveniente, alguien prodria ayudarme?
Tengo que hacer un programa que me resuelva la matriz y que al darle clic a un boton me de la expansión de cofactores sin importar que datos tenga.
Gracias agradezco mucho su ayuda.
-
http://es.wikipedia.org/wiki/Matriz_de_adjuntos y fijate en el titulo "Matrices n x n".
Ahi calculan los items de la fila "i" y columna "j". La matriz de cofactores sale de trasponer la adjunta.
Cada elemento resulta ser el cofactor de tu matriz inicial, cuando se remove la i-esima fila y la j-esima columna.
Luego podes multiplicar cada item de tu matriz por cada uno de la matriz de cofactores, y sale la "expansion" que buscas.
-
Gracias Coco
Pero el verdadero problema es sacar los determinantes, ya que si tengo una matriz de 5X5 por ejemplo tengo que sacar determinantes de 4x4x5 osea 20 determinantes, esto pues hasta cierto punto es tratable pero si me piden una de 6x6 tengo que sacar 6 matrices de 5x5 y a estas sacarles las matrices de 4x4 para obtener los cofactores.
-
Para los determinantes podes aplicar de forma recursiva el metodo de ir eliminando filas y columnas, hasta llegar a 2x2. Igual esto consume muchos calculos.
Otra forma es copiar el codigo que esta aca: http://en.wikibooks.org/wiki/Algorithm_Implementation/Linear_Algebra/Determinant_of_a_Matrix#Java el cual parece que usa la reduccion de Gauss-Jordan.
De todas formas, para que necesitas los cofactores?
-
Es un problema de Calculo Diferencial de la Universidad, el cual el Ingeniero nos pidio hacer un software que resolviera cualquier matriz n x n y que el resultado fuera la expansión de cofactores dejando como comprobación las matrices y sus respectivos determinantes.
Gracias coco.
-
[code =vb]
Public Sub CrearMatrizGrid(ByVal Filas As Integer, ByVal Columnas As Integer, ByVal vDataGrid As DataGridView)
Try
vDataGrid.Columns.Clear()
vDataGrid.Rows.Clear()
For n As Integer = 1 To Columnas
Dim vColumn As New DataGridViewTextBoxColumn
vColumn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
vColumn.Width = 35
vColumn.Name = "Column" & n
vDataGrid.Columns.Add(vColumn)
Next
For m As Integer = 1 To Filas
Dim vFila(Columnas) As String
vDataGrid.Rows.Add(vFila)
Next
Catch ex As Exception
vDataGrid.Columns.Clear()
vDataGrid.Rows.Clear()
End Try
End Sub
Public Function Cofactor2X2(ByVal Datos As DataGridView) As Integer
Dim Respuesta As Integer = 0
Try
Dim Matriz(1, 1) As Integer
For n As Integer = 0 To 1
For m As Integer = 0 To 1
Matriz(n, m) = Datos.Rows(n).Cells(m).Value
Next
Next
Respuesta = (Matriz(0, 0) * Matriz(1, 1)) - (Matriz(1, 0) * Matriz(0, 1))
Catch ex As Exception
Respuesta = 0
End Try
Return Respuesta
End Function
Public Function Cofactor3X3(ByVal Datos As DataGridView) As Integer
Dim Respuesta As Integer = 0
Try
Dim Matriz(2, 2) As Integer
For n As Integer = 0 To 2
For m As Integer = 0 To 2
Matriz(n, m) = Datos.Rows(n).Cells(m).Value
Next
Next
Dim Respuestas(2) As Integer
For a As Integer = 0 To 2
Using vDatos As New DataGridView
CrearMatrizGrid(2, 2, vDatos)
Dim vColumna As Integer = 0
For n As Integer = 0 To 2
If n <> a Then
Dim vFila As Integer = 0
For m As Integer = 1 To 2
vDatos.Rows(vFila).Cells(vColumna).Value = Datos.Rows(m).Cells(n).Value
vFila += 1
Next
vColumna += 1
End If
Next
Respuestas(a) = Cofactor2X2(vDatos)
End Using
Next
Respuesta = (Matriz(0, 0) * Respuestas(0)) + (Matriz(0, 1) * Respuestas(1)) + (Matriz(0, 2) * Respuestas(2))
Catch ex As Exception
Respuesta = 0
End Try
Return Respuesta
End Function
Public Function Cofactor4X4(ByVal Datos As DataGridView) As Integer
Dim Respuesta As Integer = 0
Try
Dim Matriz(3, 3) As Integer
For n As Integer = 0 To 3
For m As Integer = 0 To 3
Matriz(n, m) = Datos.Rows(n).Cells(m).Value
Next
Next
Dim Respuestas(3) As Integer
For a As Integer = 0 To 3
Using vDatos As New DataGridView
CrearMatrizGrid(3, 3, vDatos)
Dim vColumna As Integer = 0
For n As Integer = 0 To 3
If n <> a Then
Dim vFila As Integer = 0
For m As Integer = 1 To 3
vDatos.Rows(vFila).Cells(vColumna).Value = Datos.Rows(m).Cells(n).Value
vFila += 1
Next
vColumna += 1
End If
Next
Dim Respuesta0101 As Integer = vDatos.Rows(0).Cells(0).Value * vDatos.Rows(1).Cells(1).Value * vDatos.Rows(2).Cells(2).Value
Dim Respuesta0102 As Integer = vDatos.Rows(0).Cells(1).Value * vDatos.Rows(1).Cells(2).Value * vDatos.Rows(2).Cells(0).Value
Dim Respuesta0103 As Integer = vDatos.Rows(0).Cells(2).Value * vDatos.Rows(1).Cells(0).Value * vDatos.Rows(2).Cells(1).Value
Dim Respuesta0201 As Integer = vDatos.Rows(2).Cells(0).Value * vDatos.Rows(1).Cells(1).Value * vDatos.Rows(0).Cells(2).Value
Dim Respuesta0202 As Integer = vDatos.Rows(2).Cells(1).Value * vDatos.Rows(1).Cells(2).Value * vDatos.Rows(0).Cells(0).Value
Dim Respuesta0203 As Integer = vDatos.Rows(2).Cells(2).Value * vDatos.Rows(1).Cells(0).Value * vDatos.Rows(0).Cells(1).Value
Respuestas(a) = Respuesta0101 + Respuesta0102 + Respuesta0103 - Respuesta0201 - Respuesta0202 - Respuesta0203
End Using
Next
Respuesta = (Matriz(0, 0) * Respuestas(0)) + (Matriz(0, 1) * Respuestas(1)) + (Matriz(0, 2) * Respuestas(2)) + (Matriz(0, 3) * Respuestas(3))
Catch ex As Exception
Respuesta = 0
End Try
Return Respuesta
End Function
Siguiendo con el tema les comento que he podido hacer una matriz de 2x2, 3x3 y 4x4 pero de mas no he podido, no se por que siento que me hace falta algo pequeño, no se si puedan ayudarme
La cuestión es que necesito hacer ahora una función donde me pueda resolver una de nxn o sea 5x5 o 6x6, una de 5x5 pues son 5 matrices de 4x4 y la de 4x4 ya la tengo resuelta, osea necesito escalonar las matrices para irlas resolviendo una por una hasta que llegue a matrices de 4.
No se si lo enrede mas, si alguien puede ayudarme se los agradezco
-
Me declaro un ignorante en Matematicas :P
Buscando encontre estos ejemplos, espero te sirva alguno :)
Matrix Functions
http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=2241&lngWId=10
Gauss Elimination
http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=2903&lngWId=10
Linear System Solver and Determinant
http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=50584&lngWId=1
Calculator in Visual Basic 6
http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=49311&lngWId=1
A Matrix Class Explained with Mathematical Equations
http://www.codeproject.com/Articles/18796/A-Matrix-Class-Explained-with-Mathematical-Equatio
High precision native Gaussian Elimination
http://www.codeproject.com/Articles/616608/High-precision-native-Gaussian-Elimination
-
Muchas gracias Virgil, pero necesito expansión de cofactores, y entre todos soloamente hay un ejemplo de cofactor que eso ya lo he resuelto, de igual forma, muchisimas gracias por responder.