Colaboraci�n de Harvey Triana (2)
Rutina para la Soluci�n de Ecuaciones Lineales
Lo que nos dice el autor sobre esta rutina:
Soluci�n de Ecuaciones Lineales
======================
La soluci�n de un sistema de 'n' ecuaciones lineales con 'n'
inc�gnitas es un interesante reto a los programadores.
El siguiente c�digo lo escrib� inicialmente en Fortran, aqu�
te presento la versi�n Visual Basic.
He utilizado esta funci�n en programaci�n de Simuladores de
Flujo y Soluci�n del M�todo de los M�nimos Cuadrados.
En general, la funci�n tiene m�ltiples usos en procedimientos
matem�ticos.
Es un c�digo bastante complicado de seguir, pero si necesitas
una gu�a, es el m�todo de Eliminaci�n de Gauss.
![]()
'Esto acelerar� los c�lculos DefInt A-Z
Private Sub EjemploSencillo()
'Se tiene 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 'Almacenar� el sistema de ecuaciones
Dim Soluci�n(1 To 3) As Double 'Almacenar� la soluci�n del sistema
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
'-------------------------------------------------------------------------
'Matrix Solution. Return True if then function was successful
'-------------------------------------------------------------------------
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 j = k
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
'Programmed by Harvey Triana �
Exit Function
Gauss_Err: Gauss = False
End Function
![]()