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