Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Crowsnest

#1
Hola Amigos:

Aunque no este en C++, es facil de traducir.

Aqui os dejo un codigo mio en VB.NET para resolver determinantes de orden n x n

Declaracion de la clase desde programa en VB.NET
Dim clase As SolDet = New SolDet()


LLAMADAS A LA CLASE SolDet (renombrada "clase" en el ejemplo):
       clase.resuelve(test,n, n), ejecuta calculo Matricial
       clase.Calcula(n, n), Devuelve valor determinante

Donde Det es la matriz a calcular yn,n son las dimensiones de la Matriz.
La matriz esta ordenada por filas, ejpl. {{1,2,3,4},{2,1,4,7},.........}


       clase.ver_datos(), devuelve matriz diagonalizada.



Public Class SolDet

   'by  jmlv-Crowsnest
   Public paso(1, 1) As Double


   Public Sub resuelve(ByVal det, ByVal ylim, ByVal xlim)

       If xlim <> ylim Then
           MsgBox("Only squared matrixes allowed")
           Exit Sub
       End If


       ReDim paso(ylim - 1, xlim - 1) ' row-col Number
       Dim x, y As Integer
       Dim f, referencia, operador As Double
       Dim acarreo As Integer

       'det() Reference Matrix
       'paso() Result Matrix

       Array.Copy(det, paso, det.length) 'Build initial result matrix

       For acarreo = 0 To xlim - 2 ' Move row selection pointer for zero making

           referencia = -det(acarreo, acarreo) 'Diagonal reference value

           For y = acarreo + 1 To ylim - 1 'Move along row of column y

               operador = det(y, acarreo) 'Matrix element at the same column than reference

               f = operador / referencia 'Multiplication factor for row Y

               For x = 0 To xlim - 1 'Move and apply f along row

                   paso(y, x) = det(acarreo, x) * f + det(y, x)

               Next

           Next

           'Rebuild reference Matrix.
           Array.Copy(paso, det, paso.Length)
           Array.Copy(det, paso, det.length)

       Next



   End Sub

   Public Function ver_datos() As Array

       Return paso
   End Function

   Public Function Calcula(ByVal ylim, ByVal xlim) As Double
       Dim y As Integer
       Dim prod As Double

       prod = 1

       For y = 0 To ylim - 1

           prod = prod * paso(y, y)

       Next

       Return prod

   End Function


End Class

NOTAS:
Metodo de Gauss, admite cualquier orden n.

Un saludo