VB - Sistema de equação linear com duas incógnitas
E 'oia' eu aqui 'tra veiz' continuando nossa série de artigos sobre VB e a matemática , vou mostrar agora como resolver uma equação linear com duas incógnitas. Vou começar com os conceitos matemáticos envolvidos e a seguir mostrar o código VB que resolve o problema. Eta VB bom de matemática soh !!!
Os conceitos Matemáticos
1 - Sistema linear
É um conjunto de m equações lineares de n incógnitas (x1, x2, x3,
... , xn) do tipo:
a11x1
+ a12x2 + a13x3 + ...
+ a1nxn = b1
a21x1 + a22x2 +
a23x3 + ... + a2nxn =
b2
a31x1 + a32x2 +
a33x3 + ... + a3nxn =
b3
.................................................................
.................................................................
am1x1 + am2x2 + am3x3
+ ... + amnxn = bn
Exemplo:
3x + 2y - 5z = -8
4x - 3y + 2z = 4
7x + 2y - 3z = 2
0x + 0y + z = 3
Temos acima um sistema de 4 equações e 3 incógnitas (ou variáveis).
Os termos a11, a12,
... , a1n, ... , am1, am2, ...,
amn são denominados coeficientes e b1, b2,
... , bn são os
termos independentes. A ênupla (a 1, a
2 , a 3 , ... , a n) será
solução do sistema linear se e somente se satisfizer
simultaneamente a todas as m equações.
Exemplo: O terno ordenado (2, 3,
1) é solução do sistema:
x + y + 2z = 7
3x + 2y - z = 11
x + 2z = 4
3x - y - z = 2
pois todas as equações são satisfeitas para x=2, y=3 e z=1.
Notas:
1 - Dois
sistemas lineares são EQUIVALENTES quando possuem as mesmas
soluções.
Exemplo: Os sistemas
lineares
S1: | 2x + 3y = 12 |
3x - 2y = 5 |
S2: | 5x - 2y = 11 |
6x + y = 20 |
são equivalentes, pois ambos admitem o par ordenado (3, 2) como solução. Verifique!
2 - Se um sistema de equações possuir pelo menos uma solução, dizemos que ele é POSSÍVEL ou COMPATÍVEL.
3 - Se o sistema de equações é COMPATÍVEL e possui apenas uma solução, dizemos que ele é DETERMINADO.
4 - Se o sistema de equações é COMPATÍVEL e possui mais de uma solução, dizemos que ele é INDETERMINADO.
5 - Se os termos independentes
de todas as equações de um sistema linear forem todos nulos, ou
seja
b1 = b2 = b3 = ... = bn
= 0, dizemos que temos um sistema linear HOMOGÊNEO.
Exemplo:
x + y + 2z = 0
2x - 3y + 5z = 0
5x - 2y + z = 0
Vejamos agora os métodos para a resolução de sistema de equações:
Método da
adição:
» basta eliminar uma das variáveis, através de
termos opostos, recaindo numa equação do 1º grau com uma
variável.
Ex: x+y=12
x-y=4
Notamos que as duas equações
possuem termos opostos (y e -y). Com isso, basta somar as duas
equações:
A seguir, basta substituir o valor encontrado para x em uma das
equações.
8+y=12
ou
8-y=4
y=12-8
-y=4-8
y=4
y=4
O par ordenado (x,y)=(8,4) é a solução do sistema.
Método da substituição:
Consiste em eliminarmos uma das variáveis isolando seu valor numa das equações do sistema, para em seguida substitui-la na outra.
Ex: x+y=12 ... I
x-y=4 .... II
Escolhemos uma das variáveis na primeira equação, para determinarmos o seu valor: x+y=12 » x=12-y
Substituímos na outra
equação:
(12-y) - y = 4
12-2y
= 4
-2y
= -8
y=4
Substituindo o valor encontrado em uma das equações:
x+4=12 » x=12-4 »
x=8
Logo a solução do sistema seria: S = {(8,4)}
Método da comparação:
Consiste em comparmos as duas equações do sistema, após termos isolado a mesma variável (x ou y) nas duas equações:
x+2y=2
» x=2-2y
x+y = 3
» x=3-y
Comparando as duas equações:
2-2y=3-y
-2y+y=3-2
-y
= 1
y
= -1
Substituindo o valor de y encontrado: x = 2-2.(-1) » x=2+2=4
Portando S= {(4,-1)}
Método de Kramer
No nosso exemplo , dada a equação :
Foi utilizado o método de Kramer e nele as soluções serão dadas por:
x = (c * e -
b * f ) / (a * e - b * d) y = (a * f - e * d) / (a * e - b * d) |
A interface com o usuário
Inicie um novo projeto no VB e no formulário padrão insira os controles conforme layout abaixo:
-
temos aqui : - 6 caixas de texto - dois botões de comando - três frames |
Como você acabou de observar a interface é simples: O usuário deverá informar o valor dos coeficientes da equação nas caixas de texto e clicar no botão - Resolver - para obter o resultado da equação.
O código
Vamos começar com o código do botão - Resolver : Aplica a regra de Kramer para resolver o sistema.
Private Sub CmdResolver_Click() On Error GoTo Err_CmdResolver_Click Dim i% For i = 0 To 1 AjustaValor txta(i) AjustaValor txtb(i) AjustaValor txtc(i) Next Dim valx# Dim valy# Dim tmp% Dim mul0# Dim mul1# mul0 = Val(txtb(1)) mul1 = Val(txtb(0)) mul0 = IIf(mul0 < 0 Eqv mul1 < 0, -mul0, mul0) valx =(Val(txtc(0)) * mul0 + Val(txtc(1)) * mul1) / (Val(txta(0)) * mul0 + Val(txta(1))*mul1) valy =(Val(txtc(0)) - Val(txta(0)) * valx) / Val(txtb(0)) lblx = "x = " & valx lbly = "y = " & valy lblfraz = "A solução para o sistema é => (" & valx & " ; " & valy & ")" Exit Sub Err_CmdResolver_Click: lblx = "" lbly = "" lblfraz = "Erro n° " & Err & " - " & Err.Description Select Case Err Case 6 lblfraz = lblfraz & " : ocorreu um estouro da pilha do sistema." Case 11 lblfraz = lblfraz & " : não há solução para o sistema." End Select End Sub |
Abaixo o código associado a evento KeyPress de cada caixa de texto , onde só permitimos a entrada valores numéricos:
Private Sub txta_KeyPress(Index As Integer, KeyAscii As Integer) If KeyAscii = 8 Then txta(Index).Text = Left(txta(Index).Text, Len(txta(Index).Text) - 1) SendKeys "{END}" End If 'so permite valores numericos If KeyAscii < 45 Or KeyAscii > 57 Then KeyAscii = 0 End Sub Private Sub txtb_KeyPress(Index As Integer, KeyAscii As Integer) If KeyAscii = 8 Then txtb(Index).Text = Left(txtb(Index).Text, Len(txtb(Index)) - 1) SendKeys "{END}" End If 'so permite valores numericos If KeyAscii < 45 Or KeyAscii > 57 Then KeyAscii = 0 End Sub Private Sub txtc_KeyPress(Index As Integer, KeyAscii As Integer) If KeyAscii = 8 Then txtc(Index).Text = Left(txtc(Index).Text, Len(txtc(Index)) - 1) SendKeys "{END}" End If 'so permite valores numericos If KeyAscii < 45 Or KeyAscii > 57 Then KeyAscii = 0 End Sub |
O código associado ao botão - Novo Cálculo - que limpa todos os controles do formulário:
Private Sub limpa_controles() Dim i As Integer 'limpa as caixas de texto For i = 0 To Me.Controls.Count - 1 If TypeOf Me.Controls(i) Is TextBox Then Me.Controls(i).Text = "" End If Next lblfraz = "" lblx = "" lbly = "" End Sub |
Para encerra o código que simula a pressionamento da tecla TAB quando o usuário tecla ENTER. Para que o código funcione você deve definir a propriedade KeyPreview do formulário como True:
Private Sub Form_KeyPress(KeyAscii As Integer) 'Esse código permite a mudança de quadro de texto através do Enter If KeyAscii = 13 Then 'Se o tipo do controle ativo for TextBox If TypeOf Screen.ActiveControl Is TextBox Then 'Simula o pressionamento da tecla TAB SendKeys "{tab}" 'A linha a seguir evita ouvir um bip KeyAscii = 0 End If End If End Sub |
Agora vou mostrar um exemplo , exibindo a tela obtida na resolução de um sistema:
Nota: O operador Eqv foi usado na linha de código : mul0 = IIf(mul0
< 0 Eqv mul1 < 0, -mul0, mul0) Ele é usado para efetuar uma equivalência lógica entre duas expressões. Sua sintaxe é : resultado = expressão1 Eqv expressão2
|
Acabei , mas você pode dar uma melhorada no projeto . Que tal ???
Com esta série de artigos ou você fica bom de matemática e de VB ou nunca mais volta no meu site .
Até o próximo artigo sobre VB e a matemática...!!! (o projeto completo esta no super CD VB - Ele foi baseado em um projeto que achei na Web.)
José Carlos Macoratti