Public Shared Function Determinante(ByVal Matriz As Matriz) As Double
If Matriz.Filas = Matriz.Columnas Then
Dim Positivos, Negativos As Double
Select Case Matriz.Filas
Case 1
Return Matriz.ObtenerValor(0, 0)
Case 2
Positivos = Matriz.ObtenerValor(0, 0) * Matriz.ObtenerValor(1, 1)
Negativos = Matriz.ObtenerValor(0, 1) * Matriz.ObtenerValor(1, 0)
Return Positivos - Negativos
Case 3
Positivos = (Matriz.ObtenerValor(0, 0) * Matriz.ObtenerValor(1, 1) * Matriz.ObtenerValor(2, 2)) + _
(Matriz.ObtenerValor(0, 1) * Matriz.ObtenerValor(1, 2) * Matriz.ObtenerValor(2, 0)) + _
(Matriz.ObtenerValor(1, 0) * Matriz.ObtenerValor(2, 1) * Matriz.ObtenerValor(0, 2))
Negativos = (Matriz.ObtenerValor(0, 2) * Matriz.ObtenerValor(1, 1) * Matriz.ObtenerValor(2, 0)) + _
(Matriz.ObtenerValor(0, 1) * Matriz.ObtenerValor(1, 0) * Matriz.ObtenerValor(2, 2)) + _
(Matriz.ObtenerValor(1, 2) * Matriz.ObtenerValor(2, 1) * Matriz.ObtenerValor(0, 0))
Return Positivos - Negativos
Case Else
Dim Retorno As Double = 0
For i As Integer = 0 To Matriz.Filas - 1
Retorno += (Adjunto(Matriz, i, 0) * Matriz.ObtenerValor(i, 0))
Next
Return Retorno
End Select
Else
Throw New ExcepcionMatrizNoCuadrada("MATRIZ (DETERMINANTE): Solo se puede obtener el determinante de matrices cuadradas." & vbNewLine _
& "Dimensiones de la matriz: " & Matriz.Filas & "x" & Matriz.Columnas)
End If
End Function
Bastante bien, pero me quita la tabulación...Ya le encontraré solución.
Código fuente completo en http://www.mediafire.com/file/d4pdlvrym4tq2n1/Motor3D%202.0.rar
No hay comentarios:
Publicar un comentario