Autor Tema: Matriz n x n Expansión de Cofactores  (Leído 5676 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Luffy

  • Kilobyte
  • **
  • Mensajes: 90
  • Reputación: +4/-2
  • Desarrollar es el arte de crecer no de crear.
    • Ver Perfil
Matriz n x n Expansión de Cofactores
« 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.


coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Matriz n x n Expansión de Cofactores
« Respuesta #1 en: Octubre 30, 2014, 01:43:06 pm »
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.
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

Luffy

  • Kilobyte
  • **
  • Mensajes: 90
  • Reputación: +4/-2
  • Desarrollar es el arte de crecer no de crear.
    • Ver Perfil
Re:Matriz n x n Expansión de Cofactores
« Respuesta #2 en: Octubre 30, 2014, 02:50:05 pm »
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.

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Matriz n x n Expansión de Cofactores
« Respuesta #3 en: Octubre 30, 2014, 03:09:25 pm »
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?
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

Luffy

  • Kilobyte
  • **
  • Mensajes: 90
  • Reputación: +4/-2
  • Desarrollar es el arte de crecer no de crear.
    • Ver Perfil
Re:Matriz n x n Expansión de Cofactores
« Respuesta #4 en: Octubre 30, 2014, 05:31:58 pm »
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.

Luffy

  • Kilobyte
  • **
  • Mensajes: 90
  • Reputación: +4/-2
  • Desarrollar es el arte de crecer no de crear.
    • Ver Perfil
Re:Matriz n x n Expansión de Cofactores
« Respuesta #5 en: Noviembre 04, 2014, 05:31:46 pm »
Código: [Seleccionar]
[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

Virgil Tracy

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +38/-1
    • Ver Perfil

Luffy

  • Kilobyte
  • **
  • Mensajes: 90
  • Reputación: +4/-2
  • Desarrollar es el arte de crecer no de crear.
    • Ver Perfil
Re:Matriz n x n Expansión de Cofactores
« Respuesta #7 en: Noviembre 05, 2014, 06:29:05 pm »
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.