Regla de Cramer en Visual Basic Net

Hola amigos, soy nuevo en la elaboracion de estos post en este sitio por cierto, muy interesante y útil.Comence abordando una de las ramas matematicas más reales y sobretodo de uso común. Como ustedes saben ( y para los que no conocen del tema) todos los modelos matematicos estudiados en las ramas de la ingenieria tienen su evaluación ya sea teorica o en tiempo real. Como dice wikipedia: 
El análisis numérico o cálculo numérico es la rama de las matemáticas que se encarga de diseñar algoritmos para, a través de  y reglas matemáticas simples, simular procesos matemáticos más complejos aplicados a procesos del mundo real. 

Sin más preámbulos vamos a un método conocido por todos pero que por el coste computacional no es muy aplicado y en muchos casos de nosotros se ha quedado a la mitad. Explicando el método, bueno tal vez ya lo sepan mejor que yo: 
Para un sistema de 3x3 


Que representadas en forma de matriz es: 
 
 pueden ser encontradas como sigue: 


Reemplazando en ejemplo con valores: 
 

Me costo un par de noches, pero aquí esta el código
' Metodo para calcular sistema de ecuaciones de nxn con la regla de 
    ' Cramer realizo por Ing: Jose Luis Masache 22/10/2009

    '----------------Declaración de variables------------------
    Dim A(50, 50), T(50, 50), Sol(50) As Double
    Dim Aux(50, 50), B(50, 50), C(50, 50) As Double
    Dim DetCramer(50), DetSist(50) As Double
    Dim temp, deter, DetSis As Double
    Dim n, k1, j, cont As Integer
    Sub Main(ByVal args As String())
        Console.BackgroundColor = ConsoleColor.White
        Console.Clear()
        Console.ForegroundColor = ConsoleColor.Black
        Console.Title = "REGLA DE CRAMER"
        Console.Write(vbLf) 'Da un enter al titulo
        Console.Write("" & vbTab & "REGLA DE CRAMER")
        Console.Write(vbLf)
        Console.Write(vbLf)
        Call Ingresar()
        Call Presentar()
        Call CRAMER()
    End Sub
    Sub Ingresar()
        Console.Write("" & vbTab & "Ingrese el orden de la matriz (n): ", n)
        n = Integer.Parse(Console.ReadLine())
        '----------------------------------------------------------
        ' Lee los datos ingresados por teclado
        Console.WriteLine("" & vbLf & " * Ingrese los elementos de la Matriz  A * " & vbLf & "")
        For i As Integer = 1 To n
            For j = 1 To n
                Console.Write("" & vbTab & "Elemento [{0},{1}] : ", i, j)
                A(i, j) = Double.Parse(Console.ReadLine()) ' Lectura de datos
            Next
        Next
        '------------------------------------------------------------------------
        ' Lee los datos ingresados por teclado
        Console.WriteLine("" & vbLf & " * Ingrese los elementos de la Matriz  B * " & vbLf & "")
        For i As Integer = 1 To n
            For j = 1 To 1
                Console.Write("" & vbTab & "Elemento [{0},{1}] : ", i, j)
                B(i, 1) = Double.Parse(Console.ReadLine()) ' Lectura de datos
            Next
        Next
    End Sub
    Sub Presentar()
        'Presentación de la matriz A
        Console.WriteLine("" & vbLf & " * La Matriz A ingresada es : *" & vbLf & "")
        For i As Integer = 1 To n
            For j = 1 To n
                Console.Write("" & vbTab & "{0,2:f4}", A(i, j))
            Next
            Console.Write("" & vbLf & "")
        Next
        '----------------------------------------------------------
        'Presentacion de la matriz B
        Console.WriteLine("" & vbLf & " * La Matriz B ingresada es: *" & vbLf & "")
        For i As Integer = 1 To n
            For j = 1 To 1
                Console.Write("" & vbTab & "{0,2:f2}", B(i, 1))
            Next
            Console.Write("" & vbLf & "")
        Next
        Console.WriteLine("" & vbLf & " * Las matrices intercambiadas son: " & vbLf & "")
    End Sub
    Sub CRAMER()
        For i As Integer = 1 To n
            For r As Integer = 1 To n
                C(i, r) = A(i, r)
            Next r
        Next i
        cont = 1
        While cont <= n
            For k As Integer = 1 To n
                C(k, cont) = B(k, 1)
            Next k
            Call ImDet()
            DetSis = DET(A)
            DetCramer(cont) = DET(C)
            Sol(cont) = DetCramer(cont) / DetSis
            For s As Integer = 1 To n
                For t As Integer = 1 To n
                    C(s, t) = A(s, t)
                Next t
            Next s
            cont = cont + 1
        End While
        If DetSis = 0 Then
            Console.WriteLine("" & vbLf & " /// No existe solución, la determinante del sistema es= 0 \\\  " & vbLf & "")
            Console.ReadLine()
        Else
            Call ImprimDet()
            Call Imprimir()
        End If
    End Sub
    Function DET(ByVal Aux(,) As Double)
        For i As Integer = 1 To n
            For j = 1 To n
                T(i, j) = Aux(i, j)
            Next
        Next
        deter = 1
        For k As Integer = 1 To n
            If T(k, k) = 0 Then
                j = k
                If T(k, j) = 0 Then
                    If j = n Then
                        deter = 0
                    End If
                    j = j + 1
                End If
                If T(k, j) <> 0 Then
                    For i As Integer = k To n
                        temp = T(i, j)
                        T(i, j) = T(i, k)
                        T(i, k) = temp
                    Next i
                    deter = -deter
                End If
            End If
            If (k - n) < 0 Then
                k1 = k + 1
                For i As Integer = k1 To n
                    For j = k1 To n
                        T(i, j) = T(i, j) - (T(i, k) * T(k, j) / T(k, k))
                    Next j
                Next i
            End If
            deter = deter * T(k, k)
        Next k
        DET = deter
    End Function
    Sub ImprimDet()
        '---------------Imprime las determinantes de Cramer---------------------------
        Console.WriteLine("" & vbLf & " * Las determinantes de Cramer son: " & vbLf & "")
        For i As Integer = 1 To n
            For j = 1 To 1
                Console.Write("" & vbTab & "D" & i & " = " & "{0,2:f5}", DetCramer(i))
            Next j
            Console.Write("" & vbLf & "")
        Next i
        ' Console.ReadLine()
    End Sub
    Sub ImDet()
        '---------------Imprime las Matrices de Intercambio---------------------------
        Console.WriteLine("" & vbLf & " ---------------------------------" & vbLf & "")
        For i As Integer = 1 To n
            For j = 1 To n
                Console.Write("" & vbTab & "{0,2:f2}", C(i, j))
            Next j
            Console.Write("" & vbLf & "")
        Next i
        '    Console.ReadLine()
    End Sub
    Sub Imprimir()
        '---------------Imprime la solución final ----------------------------
        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:f5}", Sol(i))
            Next j
            Console.Write("" & vbLf & "")
        Next i
        Console.ReadLine()
    End Sub
End Module

Como viste las primeras variables(arrays) están declaradas con (50), sin embargo pueden ser modificadas para los valores de las matrices a calcular....Gracias de antemano por los comentarios y espero sea de bastante utilidad

Comentarios

Entradas populares de este blog

Imprimir directamente ReportViewer a impresora predeterminada

DevComponents DotnetBar 12.5.0.2

Metodo Iterativo Gauss-Seidel en Visual Basic