Consideramos um sistema de m equa��es lineares a n inc�gnitas com coeficientes reais, escrita sob forma matricial como Ax = b , e resolver o sistema significa discutir a exist�ncia de solu��es e obter o conjunto solu��o quando for poss�vel . Um dos m�todos eficientes mais utilizados para isso � o M�todo da Elimina��o de Gauss . Show O m�todo de elimina��o de Gauss O m�todo consiste em transformar o sistema linear original para se obter um sistema linear equivalente com mesmo conjunto solu��o , usando o m�todo do escalonamento . Podem ser efetuadas as seguintes opera��es que n�o alteram o conjunto solu��o dos sistemas : ( i ) trocar as posi��es de duas equa��es ; Efetuam-se as opera��es acima at� obter a forma escalonada do sistema, A' x = b' , equivalente ao sistema original A x = b. Abaixo temos a tela principal do programa feito em VB que implementa esta solu��o. A interface gr�fica permite trabalhar com uma matriz de 10x10 mas o algoritmo funciona em qualquer situa��o. O autor do programa n�o � conhecido. Eu apenas fiz alguns ajustes. Fa�a o teste com o seguinte sistema de equa��es : (Se quiser pode calcular manualmente...) O programa consiste de um m�dulo contendo as defini��es para as vari�veis globais usadas no projeto: Private Sub Command1_Click() frmAJuda.Show vbModal End Sub
Private Sub Command2_Click() If (MsgBox("Deseja realmente encerrar o programa ?", vbYesNo, "Encerrar")) = vbYes Then Unload Me End If End Sub
Private Sub Form_Load() 'Atribui numeros de 1 a 10 ao combobox For n = 1 To 10 cboDimensao.AddItem n Next n
'A dimens�o padr�o � um sistema 2 x 2 cboDimensao.Text = 2 Call Esconde_TextBoxes
End Sub
'Resolver um sistema de equacao lineares do tipo [A]{x}={b} para {x} 'e calcula o determinando da matriz [A] Private Sub cmdResolveEquacao_Click() Call Cria_Matrizes Call Cria_Matriz_Triangular Call Retorna_Substituicao End Sub Private Sub cboDimensao_Click() Call Esconde_TextBoxes End Sub
Sub Esconde_TextBoxes()
Dim n As Integer
Dimensao_Sistema_Linear = Val(cboDimensao.Text) 'Dimensao da Matrix [A] 'esconde todos os textboxes : Existem 120 textboxes no formul�rio de text1(0) a text1(119) 'de 0-99 para a matrix [A] 'de 100-109 para o array de constantes {b} 'de 110-119 para o array de solu��es {x} For n = 0 To 119 ' Text1(n).Visible = False Next n
'esconde as etiquetas com '=' => label2(0) a label2(9) For n = 0 To 9 Label2(n).Visible = False Next n
'Exibe os TextBoexes para a dimens�o do sistema escolhido For n = 0 To Dimensao_Sistema_Linear - 1 Label2(n).Visible = True '= Text1(100 + n).Visible = True 'array de constantes {b} Text1(110 + n).Visible = True 'array de solu��es {x} For k = 0 To 10 * (Dimensao_Sistema_Linear - 1) Step 10 Text1(n + k).Visible = True 'matriz [A] Next k Next n
End Sub
Sub Cria_Matrizes() 'Cria as matrizes [A] e {B} do sistema linear [A]*{x}={B} 'atribuindo valores a partir dos TextBoxes 'Foi implementado uma matriz de dimens�o m�xima de 10x10 mas pode ser aumentado
'cria Matriz_A For n = 1 To Dimensao_Sistema_Linear For m = 1 To Dimensao_Sistema_Linear Matriz_A(n, m) = Val(Text1(m - 1 + (n - 1) * 10)) Next m Next n 'Cria o array_B (constantes) For n = 1 To Dimensao_Sistema_Linear Array_B(n) = Val(Text1(99 + n)) Next n End Sub
Sub Cria_Matriz_Triangular()
' Usa o m�todo de elimina��o de Gauss a fim de criar a matrix triangular a partir da matriz [A] ' A matrix triangularizada Triangular_A � (Dimensao_Sistema_Linear X Dimensao_Sistema_Linear+1) ' pois inclui tamb�m o array {b} de constantes '[ a11 a12 a13 | b1 ] '[ a21 a22 a23 | b2 ] '[ a31 a32 a33 | b3 ] etc
'Se o sistema n�o puder ser resolvido => (Determinant = 0) On Error GoTo trataErro
Solucao_Problema = False 'Atribui valores a partir da matriz [A] For n = 1 To 10 For m = 1 To 10 Triangular_A(m, n) = Matriz_A(m, n) Next Next
'Atribui valores a partir do array {b} For n = 1 To Dimensao_Sistema_Linear Triangular_A(n, Dimensao_Sistema_Linear + 1) = Array_B(n) Next n
'Triangulariza a matriz For k = 1 To Dimensao_Sistema_Linear - 1 If Triangular_A(k, k) = 0 Then For n = k To Dimensao_Sistema_Linear If Triangular_A(n, k) <> 0 Then line_1 = n
Exit For 'encontra o elemento line_1 diferente de zero Next n 'muda a linha k com line_1 For m = k To Dimensao_Sistema_Linear temporary_1 = Triangular_A(k, m) Triangular_A(k, m) = Triangular_A(line_1, m) Triangular_A(line_1, m) = temporary_1 Next m End If 'Para outras linhas, atribui elemento zero usando: 'Ai1=Aij-A11*(Aij/A11) 'e alterando toda a linha usando a mesma formula para os outros elementos For n = k + 1 To Dimensao_Sistema_Linear If Triangular_A(n, k) <> 0 Then 'se for zero deixa estar multiplier_1 = Triangular_A(n, k) / Triangular_A(k, k) For m = k To Dimensao_Sistema_Linear + 1 Triangular_A(n, m) = Triangular_A(n, m) - Triangular_A(k, m) * multiplier_1 Next m End If Next n Next k
Exit Sub
trataErro:
Dim mensagem As String Dim resposta As String mensagem = "Ocorreu um erro durante a solu��o do processo." & vbCrLf & "Verifique se o sistema pode ser resolvido." resposta = MsgBox(mensagem, vbCritical)
Solucao_Problema = True
End Sub
Sub Retorna_Substituicao()
On Error GoTo trataErro
'Calcula o array {x} solu��o usando a substitui��o
If Solucao_Problema = True Then Exit Sub
'Primeiro , calcula o �ltimo xi (para i=Dimensao_Sistema_Linear) Solucoes(Dimensao_Sistema_Linear) = Triangular_A(Dimensao_Sistema_Linear, Dimensao_Sistema_Linear + 1) /_ Triangular_A(Dimensao_Sistema_Linear, Dimensao_Sistema_Linear) 'substibuicao para o outro xi: For n = 1 To Dimensao_Sistema_Linear - 1 sum_1 = 0 For m = 1 To n sum_1 = sum_1 + Solucoes(Dimensao_Sistema_Linear + 1 - m) * _
Triangular_A(Dimensao_Sistema_Linear - n, Dimensao_Sistema_Linear + 1 - m) Next m Solucoes(Dimensao_Sistema_Linear - n) = (Triangular_A(Dimensao_Sistema_Linear - n, Dimensao_Sistema_Linear + 1) - sum_1) / _
Triangular_A(Dimensao_Sistema_Linear - n, Dimensao_Sistema_Linear - n) Next n 'Calcula o determinante da matriz [A] 'Este � o produto dos elementos da diagonal da matriz triangular Determinant_1 = 1 'inicia o produto For n = 1 To Dimensao_Sistema_Linear Determinant_1 = Determinant_1 * Triangular_A(n, n) Next n
'define determinante Text2.Text = CStr(Determinant_1) 'define a solu��o nas caixas de texto textboxes For n = 1 To Dimensao_Sistema_Linear Text1(109 + n).Text = CStr(Solucoes(n)) Next n Exit Sub
trataErro: If Err.Number = 6 Then MsgBox "Informe valores v�lidos para os elmentos da matriz." & vbCrLf & "Se os valores est�o corretos ent�o _
pode n�o existir solu��o para o sistema.", vbCritical Else MsgBox "Erro no. = " & Err.Number & vbCrLf & vbCrLf & Err.Description End If
End Sub Private Sub Text1_Change(Index As Integer) 'valida a entra dos valores nas c�lulas
Select Case Index Case 0 To 119 If Not ValidaNumero(Text1(Index).Text) Then Text1(Index).Text = "" Text1(Index).SetFocus End If End Select End Sub
Private Function ValidaNumero(strText As String) As Boolean ValidaNumero = CBool(strText = "" _ Or strText = "-" _ Or strText = "-." _ Or strText = "." _ Or IsNumeric(strText)) End Function
Basta copiar e colar o c�digo acima, lembrando que voc� tem que incluir no formul�rio 120 controles TextBox do tipo array numerados de 0 a 119. (Text1(0)...Text1(119)), um combobox e 3 bot�es de comandos conforme leiaute do formul�rio do projeto abaixo: At� o pr�ximo artigo ... Como resolver um sistema linear com duas incógnitas?1º passo: seja I a primeira equação e II a segunda, vamos isolar uma das incógnitas em I e II. Escolhendo isolar a incógnita x, temos que: 2º passo: igualar as duas novas equações, já que x = x. 3º passo: substituir o valor de y por -2 em uma das equações.
Quais são os métodos diretos para solução de sistemas de equações lineares?2.1 - Método de Eliminação de Gauss. ... . 2.2 - Método de Eliminação de Gauss-Jordan. ... . 2.3 - Método de Gauss-Jordan na Inversão de Matrizes. ... . 2.4 - Fatoração de A. ... . 2.5 - Método de Crout. ... . 2.6 - Fatoração de Matrizes Reais Simétricas e Positivo-Definidas. ... . 2.7 - Conclusão.. Qual método numérico pode ser utilizado para a Resolução de sistemas lineares?O método da Eliminação de Gauss é um método iterativo para a resolução de sistemas lineares.
|