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
Publicar un comentario