Solución de Ecuaciones Lineales Simultaneas


Procedimiento para solucionar sistemas de ecuaciones lineales reales de n dimensiones

Por Harvey Triana

La solución de un sistema de n ecuaciones lineales simultáneas con '//n'// incógnitas es un interesante reto a los programadores. El siguiente código lo escribí inicialmente en Fortran (1992), aquí presento la versión Visual Basic. En general, la función encuentra aplicación en Ingeniería y matemática superior. He utilizado la función en programación de Simuladores de Flujo y Solución del Método de los Mínimos Cuadrados. El código y un ejemplo sencillo se muestra a continuación.

DefInt A-Z
'//-------------------------------------------------------------------------
'// Solución de Ecuaciones Lineales
'// Sintaxis
'// Argumentos:
'// A(): Arreglo bidimensional que contiene la matriz
'// C(): Arreglo unidimensional que entregará la solución.
'// Harvey Triana, Petrosoft Co., 1996
'//-------------------------------------------------------------------------
Static Function Gauss(ByRef A() As Double, ByRef C() As Double) As Boolean
   
    Dim Tem As Double, Sum As Double, i, l, j, k, n, m
    
    On Error GoTo Gauss_Err
    n = UBound(C)
    m = n + 1
    For l = 1 To n - 1
        j = l
        For k = l + 1 To n
            If (Abs(A(j, l)) >= Abs(A(k, l))) Then
               Else j = k
            End If
        Next
        If Not (j = l) Then
           For i = 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 = 1 To m
                A(j, i) = A(j, i) - Tem * A(l, i)
            Next
        Next
    Next
    C(n) = A(n, m) / A(n, n)
    For i = 1 To n - 1
        j = n - i
        Sum = 0
        For l = 1 To i
            k = j + l
            Sum = Sum + A(j, k) * C(k)
        Next
        C(j) = (A(j, m) - Sum) / A(j, j)
    Next
    Gauss = True
    
   '//HT©
    Exit Function
    
Gauss_Err: Gauss = False
End Function
'//------------------------------------------------------------------------------
'// Ejemplo sencillo de cómo usar Gauss. Salida a la ventana Debug
'//------------------------------------------------------------------------------
Private Sub EjemploSencillo()
   
   'El siguiente sistema de ecuaciones lineales que debe ser resuelto:
   '|1 1 1 6|
   '|1 0 1 4|
   '|1 1 0 3|

    Dim Sistema(1 To 3, 1 To 4) As Double
    Dim Solución(1 To 3) As Double
    
    Sistema(1, 1) = 1: Sistema(1, 2) = 1: Sistema(1, 3) = 1: Sistema(1, 4) = 6
    Sistema(2, 1) = 1: Sistema(2, 2) = 0: Sistema(2, 3) = 1: Sistema(2, 4) = 4
    Sistema(3, 1) = 1: Sistema(3, 2) = 1: Sistema(3, 3) = 0: Sistema(3, 4) = 3
    
    If Gauss(Sistema(), Solución()) Then
       Debug.Print "Solución:"
       Debug.Print "C1 = "; Solución(1)
       Debug.Print "C2 = "; Solución(2)
       Debug.Print "C3 = "; Solución(3)
       Stop
    Else
       MsgBox "El sistema de ecuaciones no tiene solución..."
    End If
End Sub