Sub Solve(A(,) As Double, B() As Double) As Double()
' Resolución del sistema utilizando eliminación gaussiana
Dim n As Int
n = B.Length
For i = 0 To n - 1
' Pivoteo parcial: Encuentra el elemento máximo en la columna actual
Dim maxIdx As Int
maxIdx = i
For k = i + 1 To n - 1
If Abs(A(k, i)) > Abs(A(maxIdx, i)) Then
maxIdx = k
End If
Next
' Intercambiar filas si es necesario
If maxIdx <> i Then
For j = 0 To n - 1
Dim temp As Double
temp = A(i, j)
A(i, j) = A(maxIdx, j)
A(maxIdx, j) = temp
Next
Dim tempB As Double
tempB = B(i)
B(i) = B(maxIdx)
B(maxIdx) = tempB
End If
' Hacer la matriz triangular superior
Dim pivot As Double
pivot = A(i, i)
For j = i To n - 1
A(i, j) = A(i, j) / pivot
Next
B(i) = B(i) / pivot
For k = i + 1 To n - 1
Dim factor As Double
factor = A(k, i)
For j = i To n - 1
A(k, j) = A(k, j) - factor * A(i, j)
Next
B(k) = B(k) - factor * B(i)
Next
Next
' Resolución del sistema triangular superior
Dim X(n) As Double
For i = n - 1 To 0 Step -1
X(i) = B(i)
For j = i + 1 To n - 1
X(i) = X(i) - A(i, j) * X(j)
Next
Next
Return X
End Sub