Powered By Blogger

martes, 3 de diciembre de 2013

Resolución ecuación de 3x3

Un saludo queridos lectores, en esta ocasión les presentamos una forma de resolver una ecuación de 3 por 3 por medio del método de Cramer.
Como interfaz tendremos lo siguiente:



Como pueden darse cuenta los elementos principales son 14 textbox y dos botones, pero es recomendado añadir los labels para que se distingan bien las ecuaciones y los resultados de los valores de las incognitas.
En el programa se trabajará con una matriz que se constituye de la siguiente manera:
A1 + B1 + C1 = D1
A2 + B2 + C2 = D2
A3 + B3 + C3 = D3
En primera instancia el codigo estará en el boton Calcular, en el se desarrolla el proseso de la regla de cramer. Primero declaramos variables:

Dim valident As Integer
        Dim aux1 As Integer
        Dim aux2 As Integer
        Dim auxX As Integer
        Dim auxX1 As Integer
        Dim auxX2 As Integer
        Dim auxY As Integer
        Dim auxY1 As Integer
        Dim auxY2 As Integer
        Dim auxZ As Integer
        Dim auxZ1 As Integer
        Dim auxZ2 As Integer

El primer proceso que se debe de hacer es encontrar el valor de la matriz identidad que se encuentra con el siguiente código:

'Encuentra el valor de la matriz identidad
        aux1 = (TextBox1.Text * TextBox6.Text * TextBox11.Text) + (TextBox5.Text * TextBox10.Text * TextBox3.Text) + (TextBox2.Text * TextBox7.Text * TextBox9.Text)
        aux2 = (TextBox3.Text * TextBox6.Text * TextBox9.Text) + (TextBox2.Text * TextBox5.Text * TextBox11.Text) + (TextBox7.Text * TextBox10.Text * TextBox1.Text)
        valident = aux1 - aux2

En este código se utilizan las variables aux1 y aux2 de forma que estos tienen el valor representativo de: aux1 = (A1 * B2 * C3) + (A2 * B3 * C1) + (B1 * C2 * A3)
aux2 = (C1 * B2 * A3) + (B1 * A2 * C3) + (C2 * B3 * A1)
Estos daran valor al la variable valorident que es igual a la resta de aux2 a aux1, siendo asi este el valor de la matriz identidad que servirá para dividir las demás matrices.
Como siguiente es comprobar que la matriz no sea ideterminada para eso aplicamos la siguiente condición:

If valident = 0 Then
            MsgBox("Matriz Indefinida")
        Else

Esta al tener un valor identidad igual a cero no puede ser resuelta, por lo tanto la matriz queda indefinida por lo tanto no tiene solución y se termina el proseso. De caso contrario el proceso continua y se hace a travez del siguiente codigo:

'Encuentra el valor de la matríz X
            auxX1 = (TextBox4.Text * TextBox6.Text * TextBox11.Text) + (TextBox8.Text * TextBox10.Text * TextBox3.Text) + (TextBox2.Text * TextBox7.Text * TextBox12.Text)
            auxX2 = (TextBox3.Text * TextBox6.Text * TextBox12.Text) + (TextBox2.Text * TextBox8.Text * TextBox11.Text) + (TextBox7.Text * TextBox10.Text * TextBox4.Text)
            auxX = (auxX1 - auxX2) / valident
            txtX.Text = auxX
            'Encuentra el valor de la matríz Y
            auxY1 = (TextBox1.Text * TextBox8.Text * TextBox11.Text) + (TextBox5.Text * TextBox12.Text * TextBox3.Text) + (TextBox4.Text * TextBox7.Text * TextBox9.Text)
            auxY2 = (TextBox3.Text * TextBox8.Text * TextBox9.Text) + (TextBox4.Text * TextBox5.Text * TextBox11.Text) + (TextBox7.Text * TextBox12.Text * TextBox1.Text)
            auxY = (auxY1 - auxY2) / valident
            txtY.Text = auxY
            'Emcuentra el valor de la matríz Z
            auxZ1 = (TextBox1.Text * TextBox6.Text * TextBox12.Text) + (TextBox5.Text * TextBox10.Text * TextBox4.Text) + (TextBox2.Text * TextBox8.Text * TextBox9.Text)
            auxZ2 = (TextBox4.Text * TextBox6.Text * TextBox9.Text) + (TextBox2.Text * TextBox5.Text * TextBox12.Text) + (TextBox8.Text * TextBox10.Text * TextBox1.Text)
            auxZ = (auxZ1 - auxZ2) / valident
            txtZ.Text = auxZ
        End If
    End Sub
  
Donde los auxX1, auxX2 actúan de igual forma que los aux1 y aux2 pero este siendo la matriz ordenada de forma DBC, auxY1, auxY2 trabajan con la matriz ordenada de manera ADC y por ultimo las variables auxZ1 y auxZ2 trabajan con la matriz ordenada de manera ACD.

Por último se le agrega código al botón  Limpiar quedando de la siguiente manera:

   
        TextBox1.Clear()
        TextBox2.Clear()
        TextBox3.Clear()
        TextBox4.Clear()
        TextBox5.Clear()
        TextBox6.Clear()
        TextBox7.Clear()
        TextBox8.Clear()
        TextBox9.Clear()
        TextBox10.Clear()
        TextBox11.Clear()
        TextBox12.Clear()
        txtX.Clear()
        txtY.Clear()
        txtZ.Clear()

Esto siendo para limpiar las cajas de texto para hacer otra operación.


El proyecto pueden descargarlo dando click en la siguiente imagen.




En el proyecto encontrarán un modulo y codigo en el evento keypress en los textbox, este se utiliza para validar o mas bien limitar los caracteres en ellos admitiendo solo numeros y el signo negativo (-0123456789).

No hay comentarios:

Publicar un comentario