Visual Basic.NET - Calcular determinante de una matriz

 
Vista:

Calcular determinante de una matriz

Publicado por Enrique Larios (8 intervenciones) el 28/03/2008 23:00:56
Hola que tal...

Quisiera saber si alguien tiene el código para calcular la determinante de una matriz de máximo 10x10 ya que no lo dejaron de tarea en programación pero ese tema en álgebra no lo hemos visto y no le entiendo nada... Ojala alguien me pueda ayudar...

De antemano, gracias por su ayuda...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Calcular determinante de una matriz

Publicado por Javier (30 intervenciones) el 29/03/2008 00:16:27
Hola, Por consejo y experiencia si te ineresa la Programacion tratá de resolver vos ese problema, te vas a encontrar con un monton de cosas cuando seas profecional que vas a tener que Investigar ´o preguntar a otro profesional no relacionado c/ informatica como un Contador o un mismo empleado.

Determinanteses muy facil de resolver, ahy un metodo sencillo que creo q es el de Gauss . fijate en un libro de Algebra lineal que te explica ó preguntale aun profe de Matematicas. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Calcular determinante de una matriz

Publicado por Tulio (2 intervenciones) el 08/04/2008 19:10:01
este programa te calcula la determinante de cualquier orden, disfrutenlo que estuvo cañon hacerlo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        TextBox1.Text = ""
        TextBox2.Text = ""
 
        If filas.Text = "" Or columnas.Text = "" Then
            MsgBox("Ncesitas llenar los campos de filas y de columnas")
            filas.Text = 0
            columnas.Text = 0
        End If
        If (filas.Text - 1) > 10 Or (columnas.Text - 1) > 10 Then
            MsgBox("Como maximo solo se pueden 10 filas o columnas")
            filas.Text = 0
            columnas.Text = 0
        End If
 
        If (filas.Text - 1) <> (columnas.Text - 1) Then
            MsgBox("solo se puede sacar el determinante de una matriz cuadrada")
            filas.Text = 0
            columnas.Text = 0
        End If
 
        Dim n As Integer = 0
        Dim k As Integer = 0
        Dim r As Random
        r = New Random
        Dim m As Integer = 0
        Dim rango As Integer = 0
        Dim vardos As Double = 0
        Dim vartres As Double = 0
        Dim filac As Double = 0
        Dim matriza(2, 4)
        Dim matrizb(filas.Text, columnas.Text) As Integer
        Dim matrixo(filas.Text - 1, columnas.Text - 1) As Integer
        Dim ran As Random
        Dim i As Integer = 0
        Dim j As Integer = 0
        ran = New Random
 
        For i = 0 To filas.Text - 1
            For j = 0 To columnas.Text - 1
                matrixo(i, j) = ran.Next(1, 8)
                matrizb(i, j) = matrixo(i, j)
                TextBox1.Text = TextBox1.Text & matrixo(i, j) & " "
            Next
            TextBox1.Text = TextBox1.Text & vbCrLf
        Next
 
        Dim determinante As Double
 
        If filas.Text = 1 Then
            MsgBox("Elementos de matriz: 1 metodo utilizado: determinante de un solo elemento")
            determinante = matrixo(0, 0)
        End If
        If filas.Text = 2 Then
            MsgBox("Elementos de matriz: 2 metodo utilizado: determinante de rango dos")
            determinante = (matrixo(0, 0) * matrixo(1, 1)) - (matrixo(1, 0) * matrixo(0, 1))
        End If
        Dim count As Integer = 1
        Dim partea As Integer = 0
        Dim parteb As Integer = 0
        Dim var As Integer
        If filas.Text = 3 Then
            MsgBox("Elementos de matriz: 3 metodo utilizado: Metodo de Garrus")
 
            For a As Integer = 0 To 2
                For b As Integer = 0 To 2
                    matriza(a, b) = matrixo(a, b)
                Next
            Next
 
            For a As Integer = 0 To 2
                For b As Integer = 0 To 1
                    matriza(a, b + 3) = matriza(a, b)
                Next
            Next
            For a As Integer = 0 To 2
                For b As Integer = 0 To 4
                    TextBox2.Text = TextBox2.Text & matriza(a, b) & " "
                Next
                TextBox2.Text = TextBox2.Text & vbCrLf
            Next
            For a As Integer = 0 To 2
                var = 1
                count = count - 1
                For b As Integer = 0 To 2
                    var = var * matriza(b, count)
                    count = count + 1
                Next
                count = count - 1
                partea = partea + var
            Next
            count = 3
            For a As Integer = 0 To 2
                var = 1
                count = count + 1
                For b As Integer = 0 To 2
                    var = var * matriza(b, count)
                    count = count - 1
                Next
                count = count + 1
                parteb = parteb - var
            Next
            determinante = partea + parteb
        End If
 
        If filas.Text > 3 Then
            MsgBox("elementos de matriz mayores a tres, metodo utilizado: matriz triangular")
 
            rango = (filas.Text) - 1
 
            For k = 0 To rango - 1
 
                If matrizb(k, k) = 0 Then
                    For n = k To rango
                        If matrizb(n, k) <> 0 Then
                            filac = n : Exit For
                        End If
                    Next n
 
                    For m = k To rango
                        vartres = matrizb(k, m)
                        matrizb(k, m) = matrizb(filac, m)
                        matrizb(filac, m) = vartres
                    Next m
                End If
 
                For n = k + 1 To rango
                    If matrizb(n, k) <> 0 Then
                        vardos = matrizb(n, k) / matrizb(k, k)
                        For m = k To rango + 1
                            matrizb(n, m) = matrizb(n, m) - matrizb(k, m) * vardos
                        Next m
                    End If
                Next n
            Next k
 
            For i = 0 To rango
                For j = 0 To rango
                    TextBox2.Text = TextBox2.Text & matrizb(i, j) & "  "
                Next
                TextBox2.Text = TextBox2.Text & vbCrLf
            Next
            determinante = 1
            For n = 0 To rango
                determinante = determinante * matrizb(n, n)
            Next n
        End If
        Label8.Text = "el determinante es: " & determinante
    End Sub
 
End Class
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Calcular determinante de una matriz

Publicado por Tulio (2 intervenciones) el 10/04/2008 05:07:11
ahi te mando la determinante para orden n*n, cuando nos lo dejaron a nosotros note que no estaba en ninguna página asi que lo tuvimos que hacer XD almenos ahí lo dejo pa los de atras:

Public Function determinante(ByVal m1(,) As Double) As Integer
Dim orden As Integer = m1.GetLength(0)
Dim suma, resta, multiplicacion, multiplicacion2 As Integer
Dim filat, columnat, columnat2, fil, col As Integer
Dim M(m1.GetLength(0) - 1, m1.GetLength(1) - 1) As Double
M = m1

If orden = 1 Then

determinante = M(0, 0)

ElseIf orden = 2 Then

determinante = (M(0, 0) * M(1, 1)) - (M(0, 1) * M(1, 0))

ElseIf orden = 3 Then

For fil = 0 To orden - 1
columnat = 0
columnat2 = orden - 1
filat = fil
multiplicacion = M(fil, 0)
multiplicacion2 = M(fil, orden - 1)
For col = 1 To orden - 1
If (filat + 1) > (M.GetLength(0) - 1) Then
filat = 0
Else
filat += 1
End If
columnat += 1
columnat2 -= 1

multiplicacion *= M(filat, columnat)
multiplicacion2 *= M(filat, columnat2)
Next
suma += multiplicacion
resta += multiplicacion2
Next
determinante = (suma - resta)

ElseIf orden > 3 Then

Dim aux As Double
orden -= 1

For fil = 0 To orden - 1

If M(fil, fil) = 0 Then

For columnat = fil To orden
If M(columnat, fil) <> 0 Then
filat = columnat
Exit For
End If
Next

For col = fil To orden
aux = M(fil, col)
M(fil, col) = M(filat, col)
M(filat, col) = aux
Next

End If

For columnat = fil + 1 To orden
If M(columnat, fil) <> 0 Then
aux = M(columnat, fil) / M(fil, fil)
For col = fil To orden
M(columnat, col) -= M(fil, col) * aux
Next col
End If
Next

Next

determinante = 1
For fil = 0 To orden
determinante = determinante * M(fil, fil)
Next

End If

End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Calcular determinante de una matriz

Publicado por Wanshi (1 intervención) el 20/04/2009 18:33:06
Yo entre aqui buscando alguna idea de como resolver el problema de la determinante y los codigos que pusieron me parecieron muy interesantes, pero yo lo hice otra manera supongo que mas personas vendran por aqui asi que yo tambien dejo mi codigo por si es que le sirve a alguien

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Function determinante(ByVal ara2, ByVal f2, ByVal c2)
	Dim ad(f2, c2) As Double
	Dim fd, cd As Integer
	fd = f2
	cd = c2
	For f = 0 To fd
		For c = 0 To cd
			ad(f, c) = ara2(f, c)
		Next
	Next
	Return determinante2(ad, fd, cd)
 
End Function
Function determinante2(ByVal ara, ByVal fa, ByVal ca)
	Dim x As Double
	If fa = ca Then
		If fa = 0 Then
			Return ara(0, 0)
		Else
			fs1 = fa - 1
			While fs1 >= 0
				If ara(fa, fa) = 0 Then
					x = 0
				Else
					x = -ara(fs1, fa) / ara(fa, fa)
				End If
				For c = 0 To fa
					ara(fs1, c) = ara(fs1, c) + ara(fa, c) * x
				Next
				fs1 -= 1
			End While
			Return ara(fa, fa) * determinante2(ara, fa - 1, ca - 1)
		End If
	Else
		Return "La matriz no es cuadrada, por lo tanto no se puede hallar la determinante."
	End If
End Function

bueno yo use dos funciones por que la primera es para duplicar la matriz, para que asi la matriz no sufra cambios.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Calcular determinante de una matriz

Publicado por Benito (1 intervención) el 12/04/2014 01:59:00
Me parece muy bueno el programa pero al quererlo utilizar como se utiliza. es decir hago una matriz n por n en Excel, después para sacar la determinante que tengo que escribir para llamar al programa.

saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Calcular determinante de una matriz

Publicado por ruth (1 intervención) el 09/07/2015 05:03:24
y como es el formulario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Calcular determinante de una matriz

Publicado por Miguel Quinteiro (1 intervención) el 16/04/2019 04:56:00
Por acá les dejo mi solución al problema de calcular el determinante de una matriz, sólo hace falta un formulario con un Command Button, se puede modificar para cargar una matriz cuadrada de cualquier dimensión, en el ejemplo se utiliza una matriz de 3x3,


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
' Prueba Matriz
Private Sub Command1_Click()
    ' Declaración de variables
    Dim miMatrix() As Long
 
    ' Redimensionamiento de la Matriz
    ReDim miMatrix(1 To 3, 1 To 3)
 
    ' Carga de Datos en la Matriz
    ' Fila 01
    miMatrix(1, 1) = 5
    miMatrix(1, 2) = 2
    miMatrix(1, 3) = 4
    ' Fila 02
    miMatrix(2, 1) = -1
    miMatrix(2, 2) = 5
    miMatrix(2, 3) = 3
    ' Fila 03
    miMatrix(3, 1) = 6
    miMatrix(3, 2) = 3
    miMatrix(3, 3) = -2
 
    Print ""
    Print "Determinante de la Matrix"
    Dim Respuesta As Long
 
    Respuesta = Determinante(miMatrix())
    Call MuestraMatriz(miMatrix())
    Print ""
    Print " El Determinante es : "; Respuesta
End Sub
 
 
Public Function Determinante(ByRef A() As Long) As Long
    ' Declaración de variables
    Dim la1 As Long, la2 As Long, ua1 As Long, ua2 As Long, r As Long, c As Long
 
    ' Determina las dimensiones de las matrices
    la1 = LBound(A, 1)
    ua1 = UBound(A, 1)  ' Número de Filas de A()
    la2 = LBound(A, 2)
    ua2 = UBound(A, 2)  ' Número de Columnas de A()
 
    ' Determina si es una matriz cuadrada
    If ua1 = ua2 Then
        ' Declara vectores para los indices
        Dim vecFil() As Long
        Dim vecFilInv() As Long
 
        ' Calcular el vector de Filas y Filas Inversa
        ReDim vecFil((2 * ua1) + 1) As Long
        ReDim vecFilInv((2 * ua1) + 1) As Long
 
        ' Carga el vector para las filas
        For r = 1 To ua1
            vecFil(r) = r
            vecFil(r + ua1) = r
        Next r
 
        ' Carga el vector para las filas inversas
        For r = 1 To (2 * ua1)
            vecFilInv(r) = vecFil((2 * ua1) + 1 - r)
        Next r
 
        ' Declaración de Variables
        Dim Producto, Acumulado, Sumas, Restas  As Long
 
        ' Calcular las SUMAS
        Producto = 1
        Acumulado = 0
        Sumas = 0
        For r = 1 To ua1
            For c = 1 To ua1
                Producto = Producto * A(vecFil(c), vecFil(c + r - 1))
            Next c
            Acumulado = Acumulado + Producto
            Producto = 1
        Next r
        Sumas = Acumulado
 
        ' Calcular las Restas
        Producto = 1
        Acumulado = 0
        Restas = 0
        For r = 1 To ua1
            For c = 1 To ua1
                Producto = Producto * A(vecFilInv(c), vecFil(c + r - 1))
            Next c
            Acumulado = Acumulado + Producto
            Producto = 1
        Next r
        Restas = Acumulado
 
        ' Calcuar el Determinante
        Determinante = Sumas - Restas
    Else
        ' Mensaje de Error
        MsgBox ("Debe ser una matriz cuadrada para calcular el Determinante")
    End If
End Function
 
' Procedimiento Mostrar Matriz
Public Sub MuestraMatriz(ByRef A() As Long)
    ' Declaración de variables
    Dim l1 As Integer, l2 As Integer, u1 As Integer, u2 As Integer, r As Integer, c As Integer
    Dim s As String * 10
 
    ' Determina las dimensiones de las matrices
    l1 = LBound(A(), 1)
    l2 = LBound(A(), 2)
    u1 = UBound(A(), 1)
    u2 = UBound(A(), 2)
 
     ' Recorre toda la matriz y la muestra en el formulario
    For r = l1 To u1
        For c = l2 To u2
            RSet s = Str$(A(r, c))
            frmPrincipal.Print (s);
        Next c
        frmPrincipal.Print
    Next r
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de luisao
Val: 58
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Calcular determinante de una matriz

Publicado por luisao (20 intervenciones) el 08/05/2019 22:08:50
que tal, no se si ya presentaste la tarea, a lo mejor si, pero este codigo te podria servir, en excel hay una forma de sacarla, haz un tabla y luego seleccinoala y dale sacar determinante, este codigo que te coloque es para una matriz de 3x3, de aqui puedes arrancar y hacerla de 10 x10.
Es un proceso de sacar el calculo parecido a algo en cruz para cada lado y obtienes varios resultados que luego se operan este ellos hasta al final sacar la determinante de un tabla o varias, aunque el codigo era de un ejercicio en java pero puedes aplicar lo mismo en visual y solo cambiar la sintaxis del codigo.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package javaapplication57;
 
public class JavaApplication57 {
 
    public static void main(String[] args) {
//Declaracion de variables
int a11,a12,a13;
int a21,a22,a23;
int a31,a32,a33;
int s1,s2,s3;
int p1,p2,p3,p4,p5,p6;
int A,B,Det,DetM,DetP,DetN;
//Manzanas
int M11,M12,M13;
int M21,M22,M23;
int M31,M32,M33;
//Peras
int P11,P12,P13;
int P21,P22,P23;
int P31,P32,P33;
//Entrada de datos.
a11=3;	a12=2;	a13=5;
a21=5;	a22=3;	a23=4;
a31=8;	a32=4;	a33=3;
s1=95;  s2=138; s3=193;
 
M11=s1;	M12=2;	M13=5;
M21=s2;	M22=3;	M23=4;
M31=s3;	M32=4;	M33=3;
 
P11=3;	P12=s1;	P13=5;
P21=5;	P22=s2;	P23=4;
P31=8;	P32=s3;	P33=3;
//Proceso
p1=a11*a22*a33;
p2=a21*a32*a13;
p3=a31*a12*a23;
p4=a13*a22*a31;
p5=a23*a32*a11;
p6=a33*a12*a21;
A=p1+p2+p3;
B=p4+p5+p6;
Det=A-B;
 
p1=M11*M22*M33;
p2=M21*M32*M13;
p3=M31*M12*M23;
p4=M13*M22*M31;
p5=M23*M32*M11;
p6=M33*M12*M21;
A=p1+p2+p3;
B=p4+p5+p6;
DetM=A-B;
 
p1=P11*P22*P33;
p2=P21*P32*P13;
p3=P31*P12*P23;
p4=P13*P22*P31;
p5=P23*P32*P11;
p6=P33*P12*P21;
A=p1+p2+p3;
B=p4+p5+p6;
DetP=A-B;
//Salida
System.out.println("Det="+Det);
System.out.println("DetM="+DetM);
System.out.println("DetP="+DetP);
    }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 186
Ha disminuido su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Calcular determinante de una matriz

Publicado por Cesar (68 intervenciones) el 08/05/2019 22:52:44
¿11 años despues?, obvio que ya presento la tarea.

No revivan mensajes viejos.

El post original, tiene 11 años.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de luisao
Val: 58
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Calcular determinante de una matriz

Publicado por luisao (20 intervenciones) el 09/05/2019 16:21:48
Mi error,
no me fije en la fecha. que pena!

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar