Você está na página 1de 9

Implementao do Processo de Eliminao Gaussiana em Delphi 5

Ideal para Estudantes de 3 grau de Clculo.


Autor: Victory Fernandes
Para a melhor compreenso deste artigo necessrio algum conhecimento da matria Clculo I, e por
ventura a leitura auxiliar de um livro especializado da matria.
Estudantes de 3 grau azendo cursos !ue envolvam a matria Clculo, tais como Engenharia, "atemtica,
"atemtica #plicada e $%sica, v&em em seu curso a parte de Clculo 'umrico, !ue explicando de orma
simpliicada estuda ormas no anal%ticas de resolu(o de pro)lemas, o !ue envolve na maioria dos casos,
tratamento de matrizes muito grandes, simula(o computacional e intera(o repetida com *rmulas. Isso
az com !ue essa matria este+a muito ligada ao uso de computadores para resolu(o dos pro)lemas, pois
s* com os mesmos poss%vel tratar tamanho n,mero de inorma(-es numa velocidade satisat*ria.
'este artigo iremos a)ordar explicitamente a implementa(o em .elphi /.0 de um dos primeiros assuntos
vistos na matria Clculo 'umrico1 2 Processo de Elimina(o 3aussiana para sistemas de e!ua(-es
lineares.
Este processo de grande import4ncia, pois resolve de maneira simples !ual!uer sistema de e!ua(-es
lineares plaus%vel de resolu(o, e sistemas de e!ua(-es lineares esto presentes nos mais diversos
seguimentos, tais como1
'a Engenharia Eltrica para resolu(o de Circuitos Eltricos
'a Engenharia "ec4nica em sistemas de 5igas
e em !ual!uer outro lugar onde um sistema de e!ua(-es lineares possa ser caracterizado.
- O que so Mtodos Numricos?
6o erramentas ou tcnicas pelas !uais pro)lemas matemticos so reormulados de orma a serem
resolvidos atravs de sucessivas opera(-es aritmticas.
- O que o Mtodo de Gauss?
7 um mtodo numrico para resolu(o de sistemas de e!ua(-es lineares
8ue se )aseia na manipula(o das e!ua(-es do sistema linear original de modo a transorma9lo em
um sistema e!uivalente cu+a matriz dos coeicientes triangular superior ou inerior.

eoria Matem!tica do Mtodo de Gauss
:endo um sistema linear de e!ua(-es !ual!uer dado por1
2x + 3y - z = 5
4x + 4y - 3z = 3
2x - 3y + z = -1
2)temos a matriz aumentada1
|2 3 -1 5|
|4 4 -3 3|
|2 -3 1 -1|
E partimos ento para tranorma9la num sistema e!uivalente cu+a matriz dos coeicientes triangular
inerior1
; Elimina(o <.eve9se anular a=; e a3;>
|2 3 -1 5| l2 = l2 - (a21 / a11) * l1 |2 3 -1 5|
|4 4 -3 3| --> |0 -2 -1 -7|
|2 -3 1 -1| l3 = l3 - (a31 / a11) * l1 |0 -6 2 -6|

= Elimina(o <.eve9se anular a3=>
|2 3 -1 5| l3 = l3 - (a32 / a22) * l2 |2 3 -1 5|
|0 -2 -1 -7| --> |0 -2 -2 -7|
|0 -6 2 -6| |0 0 5 15|
5 * (z) = 15 -2 * (y) -1 * (z) = -7 2 * (x) +3 * (y) -1 * (z) = 5
(z) = 3 (y) = 2 (x) = 1
.essa maneira aca)amos de resolver um sistema linear com 3 e!ua(-es e 3 inc*gnitas1
2x + 3y - z = 5 (x) = 1
4x + 4y - 3z = 3 --> (y) = 2
2x - 3y + z = -1 (z) = 3
Podemos ento chegar ? *rmula geral do mtodo de 3auss e a seu algoritmo1
"#rmula Geral do Mtodo$
li = li - (aik / akk) * lk onde:
i = k+1, , n
k = 1, , n-1
%l&oritmo do Mtodo$
6e+a o sistema linear #x@), # nxn , x nx; , ) n x; . 6upor ! o elemento a<A,A> dierente de 0 no inicio da
etapa B.
!ni"io
!n#ei$o: i,k,%,n,& '
(eal: )' *&+,e)a do -l.o$i#)o
#i/o a = )a#$iz (1n,1n) ' 000000000000000000
#i/o 1,x = 2e#o$ (1n)' |*li)ina34o |
| 00000000000000 |
/a$a k=1 a#5 (n-1) 6a3a | | 7in8a | |
/a$a i = k+1 a#5 n 6a3a | | 0000000000 | |
)=a(i,k)/a(k,k)' | | | 9ol,na | | |
a(i,k)=0' | | |000000000| | |
/a$a %=k+1 a#5 n 6a3a | |0000000000000| |
a(i,%)=a(i,%)-)*a(k,%)l |00000000000000000|
1(i)=1(i)-)*1(k)'
6i)/a$a'
6i)/a$a'
6i)/a$a'
x(n)=1(n)/a(n,n)'
/a$a k=(n-1) a#5 1 6a3a
&=0'
/a$a %=(k+1) a#5 n 6a3a
&=&+a(k,%)*x(%)'
6i)/a$a'
x(k)=(1(k)-&)/a(k,k)'
6i)/a$a'
:!;
Cma vez apresentado o algoritmo inal, temos a chave necessria para implementar o processo de
elimina(o em !ual!uer linguagem de programa(o.
'impli(icando a Implementao$
.e orma geral implementa(o apresentada neste artigo tra)alha da seguinte orma1
)* 9 2 programa rece)e a matriz aumentada da e!ua(o a ser resolvida atravs do stringgrid.
+* 9 Inicializa a matriz onde os clculos sero realizados e +oga os valore do stringgrid dentro da matriz,
atravs das un(-es Initialize_Array e Input respectivamente.
,* 9 2rdena a matriz rece)ida atravs da un(-es Order.
-* 9 Dealiza o processo de elimina(o propriamente dito atravs da un(o Eliminate.
5* 9 Dealiza a su)stitui(o reversa para o)ter as respostas do pro)lema apresentado atravs da un(o
Substitute.
.* 9 "ostra os resultados o)tidos num outro Stringgrid atravs da un(o Output.
#)aixo est o c*digo comentado da implementa(o exclusivamente.
#p*s a declara(o do uses do pro+eto, declaramos as constantes !ue determinaro o n,mero mximo de
linhas e colunas do programa. 5e+a !ue esta implementa(o est limitada a /0x/0, mas voc& pode
aumenta9la, ou at mesmo utilizar tratamento atravs de .Enamic #rraEs.
,&e&
<indo=&, ;e&&a.e&, >y&?#il&, 9la&&e&, @$a/8i"&, 9on#$ol&, :o$)&, Aialo.&,
>#d9#$l&, @$id&, B,##on&, ;en,&, 9o)9#$l&'
9on&#
;-C(D< = 50' // EF)e$o )Gxi)o de lin8a na )a#$iz
;-C9D7 = 50' // E,)e$o )Gxi)o de "ol,na& na )a#$iz
Hy/e
;a#0-$$ay = -$$ayI1;-C(D<,1;-C9D7J o6 (eal'
9ol0-$$ay = -$$ayI1;-C9D7J o6 (eal'
!n#0-$$ay = -$$ayI1;-C9D7J o6 !n#e.e$'
Em seguida ap*s a declara(o dos o)+etos utilizados no form, vemos a declara(o das un(-es e seus
par4metros, descritas acima no t*pico FSimplificando a ImplementaoF.
#y/e
H:o$)1 = "la&&(H:o$))
>#$in.@$id1: H>#$in.@$id'
*di#1: H*di#'

Ko$#,.,e&1: H;en,!#e)'
/$o"ed,$e Bi#B#n29li"k(>ende$: HD1%e"#)'
/$o"ed,$e Bi#B#n19li"k(>ende$: HD1%e"#)'
K$o"ed,$e D,#/,#(C0;a#1: 9ol0-$$ay' E : !n#e.e$)'
K$o"ed,$e >,1&#i#,#e(La$ 9ol0;a#1, C0;a#1 : 9ol0-$$ay'
9oe660;a#1 : ;a#0-$$ay'
La$ o$de$0Le"#1 : !n#0-$$ay'
E : !n#e.e$)'
K$o"ed,$e *li)ina#e(La$ 9ol0;a#1, >"ale0Le"#1 : 9ol0-$$ay'
La$ 9oe660;a#1 : ;a#0-$$ay'
La$ o$de$0Le"#1 : !n#0-$$ay'
E : !n#e.e$)'
K$o"ed,$e Ki2o#(La$ >"ale0Le"#1 : 9ol0-$$ay'
9oe660;a#1 : ;a#0-$$ay'
La$ o$de$0Le"#1 : !n#0-$$ay'
M,E: !n#e.e$)'
K$o"ed,$e o$de$(La$ >"ale0Le"#1 : 9ol0-$$ay'
La$ o$de$0Le"#1 : !n#0-$$ay'
La$ 9oe660;a#1 : ;a#0-$$ay'
E: !n#e.e$)'
K$o"ed,$e !n/,#(La$ E : !n#e.e$'
La$ 9oe660;a#1 : ;a#0-$$ay'
La$ 9ol0;a#1 : 9ol0-$$ay)'
K$o"ed,$e !ni#ialize0-$$ay( La$ 9oe660;a# : ;a#0-$$ay '
La$ 9ol0;a#,C0;a#, >"ale0Le"# : 9ol0-$$ay'
La$ o$de$0Le"# : !n#0-$$ay)'

/$i2a#e
N K$i2a#e de"la$a#ion& O
/,1li"
N K,1li" de"la$a#ion& O
end'
.eclaramos as seguintes variveis glo)ais !ue sero utilizadas no processo1
La$
:o$)1: H:o$)1'
x:in#e.e$'
y:in#e.e$'
n"ol:in#e.e$'
n$o=:in#e.e$'
e)/#y:in#e.e$'
E0*PE> : !n#e.e$' // !n/,# do ,&,G$io : EF)e$o de *+,a3Qe& no >i&#e)a
9D*::0;-H : ;a#0-$$ay' // !n/,# do ,&,G$io : ;a#$iz 9oe6i"ien#e do >i&#e)a
9D70;-H : 9ol0-$$ay' // !n/,# do ,&,G$io : ;a#$iz 9ol,na "o) a& 9on&#an#e&
C0;-H : 9ol0-$$ay' // D,#K,# : ;a#$iz "o) a &ol,34o do /$o1le)a
o$A*(0L*9H : !n#0-$$ay' // ;a#$iz /a$a /i2o#ea)en#o da& lin8a +,ando
//ne"e&&G$io
>9-7*0L*9H : 9ol0-$$ay' // Ai2i&4o /elo )aio$ ele)en#o da lin8a

!,R,M : !n#e.e$' // ?&ada& /a$a 7oo/
-n& : 98a$'
2 c*digo das un(-es ento adicionado ao pro+eto1
i)/le)en#a#ion
NS( *A:;O
K$o"ed,$e #6o$)1!ni#ialize0-$$ay( La$ 9oe660;a# : ;a#0-$$ay '
La$ 9ol0;a#,C0;a#, >"ale0Le"# : 9ol0-$$ay'
La$ o$de$0Le"# : !n#0-$$ay)'
// *&#a /$o"ed,$e ini"ializa #oda& a& )a#$ize& ,#ilizada& no /$o.$a)a
// E- *EH(-A- : Hoda& a& )a#$ize& #e) 2alo$e& inde6inido&
// E- >-!A- : -& )a#$ize& e&#4o /$een"8ida& /o$ 0 (ze$o&)
9on&#
;-C(D< = 50'
;-C9D7 = 50'
La$
! : !n#e.e$'
R : !n#e.e$'
1e.in
:o$ ! := 1 #o ;ax(o= do N indi"e da& lin8a& O
1e.in
9ol0;a#I!J := 0'
C0;a#I!J := 0'
o$de$0Le"#I!J := 0'
>"ale0Le"#I!J := 0'
:o$ R := 1 #o ;ax9ol do Nindi"e da& "ol,na& O
9oe660;a#I!,RJ := 0'
end'
end'
K$o"ed,$e #6o$)1!n/,#(La$ E : !n#e.e$'
La$ 9oe660;a#1 : ;a#0-$$ay'
La$ 9ol0;a#1 : 9ol0-$$ay)'
// *&#a /$o"ed,$e $e"e1e o n,)e$o de e+,a3Qe& do &i&#e)a& e
// a& )a#$ize& do )e&)o
// E- *EH(-A- : E => nF)e$o de e+,a3Qe& : n4o de6inido
// 9oe660;a#1 => )a#$iz do& "oe6i"ien#e& : n4o de6inido
// 9ol0;a#1 => )a#$iz "ol,na : n4o de6inido
// E- >-!A- : E => nF)e$o de e+,a3Qe& en#$ada& no &#$in..$id
// 9oe660;a#1 => )a#$iz do& "oe6i"ien#e& en#$ada& no &#$in..$id
// 9ol0;a#1 => )a#$iz "ol,na en#$ada no &#$in..$id
La$
!,R : !n#e.e$'
1e.in
E:=&#$in..$id1$o="o,n#'
:o$ ! := 1 #o E do // Tndi"e da& lin8a&
1e.in
:o$ R := 1 #o E do // Tndi"e da& "ol,na&
1e.in
"oe660)a#1I!,RJ:=&#$#o6loa#(&#$in..$id1"ell&IR-1,!-1J)'
end'
"ol0)a#1I!J:=&#$#o6loa#(&#$in..$id1"ell&I&#$in..$id1"ol"o,n#-1,!-1J)'
end'
end'
K$o"ed,$e #6o$)1o$de$(La$ >"ale0Le"#1 : 9ol0-$$ay'
La$ o$de$0Le"#1 : !n#0-$$ay'
La$ 9oe660;a#1 : ;a#0-$$ay'
E : !n#e.e$)'
// *&#a K$o"ed,$e o$dena a& lin8a& da )a#$iz
// E- *EH(-A- : >"ale0Le"#1 => n4o de6inido
// o$de$0Le"#1 => n4o de6inido
// 9oe660;a#1
// E => nF)e$o de e+,a3Qe&
// E- >-!A- : >"ale0Le"#1 => "on#5) o 2alo$ )Gxi)o /a$a "ada lin8a
da // )a#$iz do& "oe6i"ien#e&
// o$de$0Le"#1 => n,)e$a "ada lin8a da )a#$iz do& "oe6i"ien#e&
// 9oe660;a# => n4o di&/onT2el
// E => n4o di&/onT2el
La$
!,R : !n#e.e$'
1e.in
:o$ ! := 1 #o E do
1e.in
o$de$0Le"#1I!J := !' // o$de$2e"# $e"e1e o nF)e$o da lin8a de "ada lin8a
>"ale0Le"#1I!J := -1&(9oe660;a#1I!,1J)' // $e"e1e o /$i)ei$o nF)e$o de "ada
lin8a
:o$ R := 2 #o E do N loo/ na& "ol,na& O
1e.in // "o)/a$a o& 2alo$e& de "ada lin8a da )a#$iz do& "oe6i"ien#e& e
.,a$da o 2alo$ e) &"ale02e"#IiJ
i6 -1&(9oe660;a#1I!,RJ) > >"ale0Le"#1I!J #8en
>"ale0Le"#1I!J := -1&(9oe660;a#1I!,RJ)'
end'
end'
end'
K$o"ed,$e #6o$)1Ki2o#(La$ >"ale0Le"#1 : 9ol0-$$ay'
9oe660;a#1 : ;a#0-$$ay'
La$ o$de$0Le"#1 : !n#0-$$ay'
M,E : !n#e.e$)'
// *&#a K$o"ed,$e a"8a o )aio$ nF)e$o e) "ada "ol,na de/oi& dala #e$ "ido
//e&"alonada e "o)/a$a "o) o nF)e$o na /o&i34o dia.onal "o$$e&/onden#e
// E- *EH(-A- : >"ale0Le"#1 => o 2alo$ de no$)a#iza34o /a$a "ada lin8a
// 9oe660;a#1 => - )a#$iz de en#$ada do& "oe6i"ien#e&
// o$de$0Le"#1 => D nF)e$o de "ada lin8a na /o&i34o o$i.inal
// M => (e#o$nado /ela K$o"ed,$e *li)ina#e
// E => nF)e$o de e+,a3Qe&
// E- >-!A- : >"ale0Le"# => )e&)a "oi&a
// 9oe660;a#1 => )e&)a "oi&a
// o$de$0Le"# => "on#ain& #8e $o= n,)1e$ <i#8 8i.8e&# &"aled
// 2al,e
// k => n4o di&/onT2el
// E => n4o di&/onT2el
La$
! : !n#e.e$'
Ki2o#, !d,) : !n#e.e$' N$e"e1e 2alo$e& #e)/o$G$io& /a$a /i2o#ea)en#oO
Bi.,A,))y : (eal' N9o)/a$a 2alo$e& de "ada "ol,naO
1e.in
Ki2o# := M'
Bi. := -1&(9oe660;a#1Io$de$0Le"#1IMJ,MJ/>"ale0Le"#1Io$de$0Le"#1IMJJ)'
:o$ ! := M+1 #o E do
1e.in
A,))y := -1&(9oe660;a#1Io$de$0Le"#1I!J,MJ/>"ale0Le"#1Io$de$0Le"#1I!JJ)'
i6 A,))y > Bi. #8en
1e.in
Bi. := A,))y'
Ki2o# := !'
end'
end'
!d,) := o$de$0Le"#1IKi2o#J'
o$de$0Le"#1IKi2o#J := o$de$0Le"#1IMJ'
o$de$0Le"#1IMJ := !d,)'
end'
K$o"ed,$e #6o$)1*li)ina#e(La$ 9ol0;a#1, >"ale0Le"#1 : 9ol0-$$ay'
La$ 9oe660;a#1 : ;a#0-$$ay'
La$ o$de$0Le"#1 : !n#0-$$ay'
E : !n#e.e$)'
La$
!,R,M : !n#e.e$'
:a"#o$ : (eal'
1e.in
:o$ M := 1 #o E-1 do
1e.in
Ki2o# (>"ale0Le"#1,9oe660;a#1,o$de$0Le"#1,M,E)'
:o$ ! := M+1 #o E do
1e.in
:a"#o$ := 9oe660;a#1Io$de$0Le"#1I!J,MJ/9oe660;a#1Io$de$0Le"#1IMJ,MJ'
:o$ R := M+1 #o E do
1e.in
9oe660;a#1Io$de$0Le"#1I!J,RJ := 9oe660;a#1Io$de$0Le"#1I!J,RJ -
:a"#o$*9oe660;a#1Io$de$0Le"#1IMJ,RJ'
end'
9ol0;a#1Io$de$0Le"#1I!JJ := 9ol0;a#1Io$de$0Le"#1I!JJ -
:a"#o$*9ol0;a#1Io$de$0Le"#1IMJJ'
end'
end'
end'
K$o"ed,$e #6o$)1>,1&#i#,#e(La$ 9ol0;a#1, C0;a#1 : 9ol0-$$ay'
9oe660;a#1 : ;a#0-$$ay'
La$ o$de$0Le"#1 : !n#0-$$ay'
E : !n#e.e$)'
// *&#a /$o"ed,$e 6az a $e#$o&,1&#i#,i34o /a$a o1#e$ o& $e&,l#ado&
// E- *EH(-A- : 9ol0;a# => ;a#$ix da& "on&#an#e& ()odi6i"ada)
// C0;a#1 => n4o de6inido
// 9oe660;a#1 => ;a#$iz #$ian.,la$izada a"i)a
// o$de$0Le"# => 9on#5) a o$de) da& lin8a&
// E => nF)e$o de e+,a3Qe&
// E- >-!A- : 9ol0;a# => n4o di&/onT2el
// C0;-#1 => -> >D7?UV*> A*>*R-A-> WWWWWW
// 9oe660;a#1 => n4o di&/onT2el
// o$de$0Le"#1
// E => n4o di&/onT2el
La$
!, R : !n#e.e$'
>,) : (eal'
1e.in
C0;a#1IEJ := 9ol0;a#1Io$de$0Le"#1IEJJ/9oe660;a#1Io$de$0Le"#1IEJ,EJ'
// (e#o$na o 2alo$ de xInJ
:o$ ! := E-1 do=n#o 1 do
1e.in
>,) := 00'
:o$ R := !+1 #o E do
>,) := >,) + 9oe660;a#1Io$de$0Le"#1I!J,RJ*C0;a#1IRJ'
C0;a#1I!J := (9ol0;a#1Io$de$0Le"#1I!JJ - >,))/9oe660;a#1Io$de$0Le"#1I!J,!J'
end'
end'
K$o"ed,$e #6o$)1D,#/,#(C0;a#1: 9ol0-$$ay' E : !n#e.e$)'
// (e#o$na a& &ol,3Qe& do /$o1le)a de en#$ada
// E- *EH(-A- : C0;a#1 => - &ol,34o do &i&#e)a
// E => nF)e$o de e+,a3Qe&
// E- >-!A- : C0;a#1 => n4o di&/onT2el
// E => n4o di&/onT2el
La$
! : !n#e.e$'
1e.in
:o$ ! := 1 #o E do
1e.in
&#$in..$id29ell&I0,!-1J:= XC(X+ in##o&#$(!) +X)X'
&#$in..$id29ell&I1,!-1J:= 6loa##o&#$(C0)a#1I!J)'
&#$in..$id2$o="o,n#:=&#$in..$id1$o="o,n#+1'
end'
end'
/$o"ed,$e H:o$)1Bi#B#n29li"k(>ende$: HD1%e"#)'
// *&#a /$o"ed,$e #e&#a &e a )a#$iz do& "oe6i"ien#e& 5 +,ad$ada
// * "8a)a #oda& a& /$o"ed,$e& ne"e&&G$ia&
1e.in
i6 (&#$in..$id1"ol"o,n#-1)=&#$in..$id1$o="o,n# #8en //He&#a &e a )a#$iz 5
+,ad$ada
1e.in
!ni#ialize0-$$ay(9oe660;a#, 9ol0;a#, C0;a#, >"ale0Le"#, o$de$0Le"#)'
!n/,#(E0*PE>, 9oe660;a#, 9ol0;a#)'
D$de$(>"ale0Le"#,o$de$0Le"#,9oe660;a#,E0*PE>)'
*li)ina#e(9ol0;a#,>"ale0Le"#,9oe660;a#,o$de$0Le"#,E0*PE>)'
>,1&#i#,#e(9ol0;a#,C0;a#,9oe660;a#,o$de$0Le"#,E0*PE>)'
la1el32i&i1le:=#$,e'
&#$in..$id22i&i1le:=#$,e'
D,#/,#(C0;a#,E0*PE>)'
end
el&e
1e.in
&8o=)e&&a.e(X;a#$iz do& 9oe6i"ien#e& n4o P?-A(-A-X)' // &e n4o 6o$
+,ad$ada
end
end'
end
Com isso demonstramos a cria(o da Implementa(o do Processo de Elimina(o de 3auss.
2 programa completo pode ser encontrado para doGnload nos sites, ===en.e"%1ne# e
===2i"#o$y8/."o)1$, e inclui outras op(-es tais como salvamento das matrizes para a)ertura
posterior, tratamento multi9lingue <Portugu&s 9 Ingl&s> !ue no so de interesse da a)ordagem do artigo.
#gradecimentos para1
9 Cristiano $ontes 9H Por me mostrar !ue o mundo numrico <"eu Proessor>.
9 3uilherme 2siris 9H Por sugest-es e de)uga(o.
9 "arcus "es!uita 9H Por sugest-es e de)uga(o.
5ictorE $ernandes desenvolvedor da :B6 6otGare 9 6olu(-es de #utoma(o Comercial, 6otGares
.edicados e 6o)9Encomenda. Pode ser contactado em victorye!net"com"#r$ ou atrav%s dos sites
&&&"victory"'pg"com"#r 9 &&&"enge"c(#"net I &&&"igara"com"#r.

Você também pode gostar