Algoritmo Eliminación Gauss-Jordan VB 2010

Hola, veamos preámbulo de wikipedia:
En matemáticas, la eliminación de Gauss-Jordan, llamada así debido a Carl Friedrich Gauss y Wilhelm Jordan, es un algoritmo del álgebra lineal para determinar las soluciones de un sistema de ecuaciones lineales, encontrar matrices e inversas. Un sistema de ecuaciones se resuelve por el método de Gauss cuando se obtienen sus soluciones mediante la reducción del sistema dado a otro equivalente en el que cada ecuación tiene una incógnita menos que la anterior. El método de Gauss transforma la matriz de coeficientes en una matriz triangular superior. El metodo de Gauss-Jordan continúa el proceso de transformación hasta obtener una matriz diagonal unitaria.
 Ejemplo
Supongamos que es necesario encontrar los números x, y, z, que satisfacen simultáneamente estas ecuaciones:
    \left \{       \begin{array}{rrrcr}           2x & + y &   -z & = &   8 \\          -3x & - y & + 2z & = & -11 \\          -2x & + y & + 2z & = &  -3       \end{array}    \right .
Esto es llamado un sistema lineal de ecuaciones. El objetivo es reducir el sistema a otro equivalente, que tenga las mismas soluciones. Las operaciones (llamadas elementales) son estas:
  • Multiplicar una ecuación por un escalar no nulo.
  • Intercambiar de posición dos ecuaciones
  • Sumar a una ecuación un múltiplo de otra.
Estas operaciones pueden representarse con matrices elementales que se usan también en otros procedimientos como la factorización LU o la diagonalización por congruencia de una matriz simétrica.
En nuestro ejemplo, eliminamos x de la segunda ecuación sumando 3/2 veces la primera ecuación a la segunda y después sumamos la primera ecuación a la tercera. El resultado es:
    \left \{       \begin{array}{rrrcr}           2x & +             y &             -z & = & 8 \\              &    \frac{1}{2}y & + \frac{1}{2}z & = & 1 \\              &              2y &           +  z & = & 5       \end{array}    \right .
Ahora eliminamos y de la primera ecuación sumando -2 veces la segunda ecuación a la primera, y sumamos -4 veces la segunda ecuación a la tercera para eliminar y.
    \left \{       \begin{array}{rrrcr}           2x &                 &            -2z & = & 6 \\              &    \frac{1}{2}y & + \frac{1}{2}z & = & 1 \\              &                 &             -z & = & 1       \end{array}    \right .
Finalmente eliminamos z de la primera ecuación sumando -2 veces la tercera ecuación a la primera, y sumando 1/2 veces la tercera ecuación a la segunda para eliminar z.
    \left \{       \begin{array}{rrrcr}           2x &              &    & = & 4 \\              & \frac{1}{2}y &    & = & \frac{3}{2} \\              &              & -z & = & 1       \end{array}    \right .
Despejando, podemos ver las soluciones:
    \left \{       \begin{array}{rrrcr}           x &   &   & = & 2 \\             & y &   & = & 3 \\             &   & z & = & -1       \end{array}    \right .
Para clarificar los pasos, se trabaja con la matriz aumentada. Podemos ver los 3 pasos en su notación matricial:
Primero:
    \left (       \begin{array}{rrrr}           2 &  1 & -1 &   8 \\          -3 & -1 &  2 & -11 \\          -2 &  1 &  2 &  -3       \end{array}    \right )
Después,
    \left (       \begin{array}{rrrr}          2 &   0 &  0 & 4   \\          0 & 1/2 &  0 & 3/2 \\          0 &   0 & -1 & 1       \end{array}    \right )
Por último.
    \left (       \begin{array}{rrrr}          1 & 0 & 0 &  2 \\          0 & 1 & 0 &  3 \\          0 & 0 & 1 & -1       \end{array}    \right )
Si el sistema fuera incompatible, entonces nos encontraríamos con una fila como esta:
 \begin{pmatrix} 0 & 0 & 0 & 1 \\ \end{pmatrix}
Que representa la ecuación: 0x + 0y + 0z = 1, es decir, 0 = 1 que no tiene solución.

Implementación en Visual Basic 2010


Module Module1
    Dim A(500, 500), C() As Double
    Dim sum, factor, tem As Double
    Dim n, m, j, k As Integer
    Sub Main()
        Console.BackgroundColor = ConsoleColor.White
        Console.Clear()
        Console.ForegroundColor = ConsoleColor.Black
        Console.Title = "ELIMINACIÓN DE GAUSS-JORDAN"
        Console.Write(vbLf) 'Da un enter al titulo
        Console.Write("" & vbTab & "ELIMINACIÓN DE GAUSS-JORDAN")
        Console.Write(vbLf)
        Console.Write(vbLf)
        Call Ingresar()
        Call Presentar()
        Call GAUSSJORDAN()
        Call Imprimir()
    End Sub
    Sub Ingresar()
        Console.Write("" & vbTab & "Ingrese el tamaño de la matriz primitiva  : ", n)
        n = Integer.Parse(Console.ReadLine())
        m = n + 1
        Console.WriteLine("" & vbLf & " * Ingrese los elementos de la matriz aumentada :  " & vbLf & "")
        For i As Integer = 1 To n
            For j = 1 To m
                Console.Write("" & vbTab & "Elemento [{0},{1}] : ", i, j)
                A(i, j) = Double.Parse(Console.ReadLine())
            Next
        Next
    End Sub
    Sub Presentar()
        Console.WriteLine("" & vbLf & " * La matriz aumentada  es : " & vbLf & "")
        For i As Integer = 1 To n
            For j = 1 To m
                Console.Write("" & vbTab & "{0,2:f2}", A(i, j))
            Next
            Console.Write("" & vbLf & "")
        Next
    End Sub

    Sub GAUSSJORDAN()
        For l As Integer = 1 To n - 1
            j = l
            For k = l + 1 To n
                If (Math.Abs(A(j, l)) >= Math.Abs(A(k, l))) Then
                Else : j = k
                End If
            Next
            If Not (j = l) Then
                For i As Integer = 1 To m
                    tem = A(l, i)
                    A(l, i) = A(j, i)
                    A(j, i) = tem
                Next
            End If
            For j = l + 1 To n
                tem = A(j, l) / A(l, l)
                For i As Integer = 1 To m
                    A(j, i) = A(j, i) - tem * A(l, i)
                Next
            Next
        Next
        ReDim C(n * 2)
        C(n) = A(n, m) / A(n, n)
        For i As Integer = 1 To n - 1
            j = n - i
            sum = 0
            For l As Integer = 1 To i
                k = j + l
                sum = sum + A(j, k) * C(k)
            Next
            C(j) = (A(j, m) - sum) / A(j, j)
        Next
    End Sub
    Sub Imprimir()
        Console.WriteLine("" & vbLf & " * La solución del sistema es : " & vbLf & "")
        For i As Integer = 1 To n
            For j = 1 To 1
                Console.Write("" & vbTab & "X" & i & " = " & "{0,2:f2}", C(i))
            Next j
            Console.Write("" & vbLf & "")
        Next i
        Console.ReadLine()
    End Sub
End Module
En base al ingreso de datos de los algoritmos anteriores  este código se acopla perfectamente. Nos vemos y espero sus comentarios. Ya que he recibido errores por parte  de algunos lectores voy a ver si les subo el link de mi ejemplo:
Link:  https://docs.google.com/file/d/0B-UGWA03tc5ZNTloUEFRUmpuT0k/edit?usp=sharing

Counter Downloads

Comentarios

  1. parcero una dudita, al introducir tu codigo como aparece me sale sintaxis error, vos sabes como soluciono eso?

    ResponderEliminar
  2. Que tal, como dice en mi post, la de gauss jordan solo es la funcion, es necesario ingresar los elementos ordenadamente,en su caso para que mejor les ayude voy a ver si pongo el ejemplo de descarga

    ResponderEliminar
  3. Ahora puedes descargar mi ejemplo

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Imprimir directamente ReportViewer a impresora predeterminada

DevComponents DotnetBar 12.5.0.2

Metodo Iterativo Gauss-Seidel en Visual Basic