|
Artículo |
Solución de Ecuaciones Lineales Simultaneas |
|
Autor / Fuente |
Harvey Triana / Método de Eliminación de Gauss |
|
Tema |
Matemática aplicada e Ingeniería |
|
Actualización |
Septiembre 20 de 1997 |
|
Descripción |
Procedimiento para solucionar sistemas de ecuaciones lineales relales de "n" dimensiónes. |
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.
'Por Ing. 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
Harvey Triana
Envíe sus comentarios a:
[email protected]
Derechos libres de reutilización solo para programación.