Você está na página 1de 4

Universidade Federal do Ceará

Campus Cariri
3o Encontro Universitário da UFC no Cariri
Juazeiro do Norte-CE, 26 a 28 de Outubro de 2011

Uma classe em Java para solução numérica de sistemas


lineares
Wagner Roberto Serapião1 , Rafael Perazzo Barbosa Mota1
1
Universidade Federal do Ceará, Juazeiro do Norte, Ceará, Brasil.
wagnerrobertoserapiao@yahoo.com.br, rafaelperazzo@cariri.ufc.br

Resumo. Este trabalho apresenta uma classe desenvolvida em linguagem de


programação, com o objetivo de auxiliar os alunos na aprendizagem e resolução
de problemas por métodos computacionais. Estes, são capazes de resolver sis-
temas lineares quadrados de forma didática, e foram implementados a partir de
seus algoritmos em linguagem Java.

1. Introdução
O computador tornou-se uma poderosa ferramenta, presente nas mais variadas áreas da
atividade humana, devido fundamentalmente ao fato de o mesmo ser uma máquina pro-
gramável. Essa caracterı́stica faz dele uma máquina que pode ser usada na determinação
da solução dos mais variados problemas. Especificamente na área da Engenharia Civil
não é diferente. Com o auxı́lio dessa poderosa ferramenta um engenheiro pode resolver
diversos problemas de forma rápida e segura, ganhando um bem de valor inestimável
conhecido como tempo.
A solução de sistemas lineares é uma ferramenta matemática muito importante
na engenharia. Com ela podemos realizar diversas tarefas como calcular estruturas de
prédios, pontes, edifı́cios, em redes elétricas, na aproximação de equações diferenciais e
integrais contı́nuas através de sistemas discretas e finitos, linearização local de sistemas
de equações não lineares, ajuste de curvas em dados e em inúmeros problemas. Não
apenas na engenharia podemos aplicar sistemas lineares, mas também na administração,
na economia, na estatı́stica, na robótica, na engenharia elétrica, na programação linear,
entre outras áreas[Ruggiero e Lopes 1997]. Tendo em vista a importância desse método
matemático em diversas atividades humanas, podemos colaborar de forma inovadora no
ensino e na aprendizagem do conteúdo com o desenvolvimento de um software didático
para resolução de sistemas de equações lineares[Gilat e Subramaniam 2000].
Basicamente, um computador consiste de uma máquina que executa ordens. As-
sim, para que ele apresente a solução de um problema, é necessário que execute um
programa, o qual fará com que se obtenha solução. Para que tudo isso ocorra, devemos
programar o computador. A programação consiste em uma seqüência de instruções es-
critas em uma linguagem computacional, que pode ser C++[Hubbard 2003], SCILAB,
JAVA[Serson 2007], FORTRAN, entre outras. A linguagem computacional JAVA é
madura, completamente robusta, segura e versátil. Entre outras caracterı́sticas, ela é
portável, não é preciso recompilar um programa para que ele rode em uma máquina ou
em sistemas operacionais diferentes, é orientada a objetos, implementa para uma ou mais
interface gráfica. Com tantas caracterı́sticas, fica evidente o motivo da escolha dessa lin-
guagem para a execução do projeto[Serson 2007].
Universidade Federal do Ceará
Campus Cariri
3o Encontro Universitário da UFC no Cariri
Juazeiro do Norte-CE, 26 a 28 de Outubro de 2011

O trabalho está organizado da seguinte forma: A seção 2 apresenta a metodolo-


gia utilizada para desenvolvimento da classe; A seção 3 mostra a implementação da
classe SistemasLineares.java contendo métodos que resolvem problemas de sistemas de
equações lineares de forma prática, rápida e segura, sendo uma importante ferramenta
para um futuro desenvolvimento de um software gráfico a ser utilizado pelo corpo dis-
cente.

2. Metodologia
Para a implementação do programa de sistemas lineares utilizou-se um notebook Sager,
com processador Intel R CoreTM i5 CPU M460 @ 2.53GHz 2.53GHz, sistema opera-
cional Windows Seven 64 bits, 8Gb de Memória Ram e com placa de vı́deo da Nvidia
com processador tipo GeForce GTX 460M.
O ambiente de desenvolvimento integrado utilizado foi o NetBeans IDE 6.9.1,
desenvolvido pela empresa Sun Microsystems. A IDE1 NetBeans é um ambiente de de-
senvolvimento multiplataforma, uma ferramenta que auxilia programadores a escrever,
compilar, depurar e instalar aplicações. Totalmente escrita em Java, mas que pode su-
portar qualquer outras linguagens de programação como o C, C++, Ruby, PHP, XML
e linguagem HTML. Seus recursos são: editor de código fonte integrado, visualizador
de classes integrado ao de interfaces, suporte ao Java Enterprise Edition, integração de
módulos, auto-completar avançado, entre outros. Como o NetBeans é escrito em Java,
é independente de plataforma, funciona em qualquer sistema operacional que suporte a
máquina virtual Java (JVM). Para instalar o NetBeans precisou-se do JDK 6- Windows
64bits que é um kit de desenvolvimento Java fornecido livremente pela Sun. Constitui um
conjunto de programas que engloba compilador, interpretador e utilitários, fornecendo
um pacote de ferramentas básicas para o desenvolvimento de aplicações Java.
A implementação do programa de sistemas lineares foi feita da seguinte forma:
Realizou-se uma pesquisa bibliográfica sobre sistemas lineares e como resolvê-las us-
ando os métodos de Eliminação de Gauss, Jacobi e Gauss-Seidel [Burden e Faires 2008,
Burian et al. 2007, Campos 2007, Gilat e Subramaniam 2000, Ruggiero e Lopes 1997].
Após a revisão, iniciou-se o processo de escrita do algoritmo. Com todos algoritmos es-
critos, passou-se a escrever na linguagem Java, através do ambiente de desenvolvimento
integrado, o NetBeans 6.9.1. Dessa forma, gerou-se a classe sistemas lineares, que fica
localizada em um pacote denominado cálculo numérico. Dentro da classe, criou-se um
método para cada forma de solução, ou seja, desenvolveu-se o método da Eliminação de
Gauss, o método de Gauss-Jacobi e o método de Gauss-Seidel.
O método de Eliminação de Gauss é utilizado para transformar o sistema em tri-
angular, para isso deve-se eliminar a variável x1 da segunda a da última equação, em
seguida elimina a variável x2 da terceira a última equação e assim por diante. Após a
eliminação das variáveis, resolve de trás para frente, já que a última equação possui ape-
nas uma variável. É um método direto, ou seja, permite a obtenção da solução exata de
um sistema de equações lineares a partir de um número finito de operações aritméticas.
O método de Jacobi é um dos métodos iterativos usados para resolução de sistemas
lineares. Apenas o vetor solução, que deve ser inicializado com (0, ..., 0, 0), vão se modif-
icando ao longo das iterações até que os valores encontrados menos os valores da iteração
1
Integrated Development Envoirement
Universidade Federal do Ceará
Campus Cariri
3o Encontro Universitário da UFC no Cariri
Juazeiro do Norte-CE, 26 a 28 de Outubro de 2011

anterior, estejam dentro da tolerância do erro (ou precisão) desejada. O método de Gauss-
Jacobi consiste em uma seqüência de passos para reorganizarmos o sistema em outro, do
tipo f (x) = Cx + g onde C(n, n) e g(n, 1), no qual calcularemos os vetores a partir de
um vetor inicial arbitrário de modo que Ax = B tal que A(n, n), X(n, 1)eB(n, 1) até
chegarmos a uma certa quantidade de repetições ou quando os valores convergirem para
algum número dentro de uma certa margem de erro (tolerância).
O método de Gauss Seidel é um método iterativo de obter as soluções de sis-
temas lineares. Apenas o vetor solução, que deve ser inicializado com (0, ..., 0,0), vão se
modificando ao longo das iterações até que os valores encontrados menos os valores da
iteração anterior, estejam dentro da tolerância do erro (ou precisão) desejada. Usando uma
ordenação das equações, já que cada nova iteração depende da ordem na qual as equações
são examinadas, o método de Gauss Seidel consiste na determinação de um seqüência
aproximada de componentes a partir de valores iniciais, isto é x1 = f 1(0, 0, ..., 0). Esse
método é semelhante ao método de Jacobi, porém difere por utilizarmos o novo valor de
x1 no cálculo de x2, isto é: x2 = f 2(x1, 0, ..., 0), e assim por diante para o cálculo de
cada componente, e por serem dependentes, não podem ser calculadas simultaneamente.
Para cada iteração, deve-se isolar uma componente.

3. Resultados
O Código Fonte 1 apresenta os métodos implementados em java dos métodos da
Eliminação Gaussiana, Jacobi e Gauss-Seidel.
Código Fonte 1. Métodos em Java
1
2 public void gauss ( ) {
3 i n t k , i , j ; i n t n = b . l e n g t h ; f l o a t m;
4 f o r ( k = 0 ; k<=n−2; k ++) {
5 f o r ( i =k + 1 ; i <=n−1; i ++) {
6 m = a[ i ][ k ]/ a[k ][ k ];
7 f o r ( j = 0 ; j<n ; j ++) {
8 a [ i ] [ j ] = a [ i ] [ j ]−(m∗a [ k ] [ j ] ) ;
9 }
10 b [ i ] = b [ i ] − (m∗b [ k ] ) ;
11 }
12 }
13 x [ n−1] = b [ n −1]/ a [ n −1][n −1];
14 f o r ( k=n−2; k>=0; k−−) {
15 x[k] = b[k ];
16 f o r ( i =k + 1 ; i <=n−1; i ++) {
17 x [ k ] = x [ k ] − a [ k ] [ i ]∗ x [ i ] ;
18 x[k] = x[k ]/ a[k ][ k ];
19 }
20 }
21 }
22 p u b l i c b o o l ea n j a c o b i ( ) {
23 int i , j , k ;
24 b o o l ea n r e t o r n o = t r u e ;
25 f l o a t soma = 0 ;
26 f l o a t x0 [ ] = new f l o a t [ x . l e n g t h ] ;
27 z e r o s ( x0 ) ;
28 c o p i a r ( x0 , x ) ;
29 i f ( diagonalmenteDominante ( a ) ) {
30 f o r ( k = 1 ; k<=maximo ; k ++) {
31 soma = 0 ;
32 f o r ( i = 0 ; i<a . l e n g t h ; i ++) {
33 f o r ( j = 0 ; j<a . l e n g t h ; j ++) {
34 i f ( i != j ) {
35 soma = soma + ( a [ i ] [ j ]∗ x0 [ j ] ) ;
36 }
37 }
38 x [ i ] = ( b [ i ]−soma ) / a [ i ] [ i ] ;
39 }
40 i f ( p a r a r ( x , x0 ) ) {
41 break ;
42 }
43 c o p i a r ( x , x0 ) ;
44 }
45 i f ( k>=maximo ) {
46 retorno = false ;
47 }
48 e l s e r e t o r n o = true ;
Universidade Federal do Ceará
Campus Cariri
3o Encontro Universitário da UFC no Cariri
Juazeiro do Norte-CE, 26 a 28 de Outubro de 2011

49
50 }
51 return ( r e t o r n o ) ;
52 }
53 p u b l i c b o o l ea n g a u s s S e i d e l ( ) {
54 int i , j , k ;
55 b o o l ea n r e t o r n o = t r u e ;
56 f l o a t soma = 0 ;
57 f l o a t x0 [ ] = new f l o a t [ x . l e n g t h ] ;
58 z e r o s ( x0 ) ;
59 c o p i a r ( x0 , x ) ;
60 i f ( diagonalmenteDominante ( a ) ) {
61 f o r ( k = 1 ; k<=maximo ; k ++) {
62 soma = 0 ;
63 f o r ( i = 0 ; i<a . l e n g t h ; i ++) {
64 f o r ( j = 0 ; j<a . l e n g t h ; j ++) {
65 i f ( i != j ) {
66 soma = soma + ( a [ i ] [ j ]∗ x [ j ] ) ;
67 }
68 }
69 x [ i ] = ( b [ i ]−soma ) / a [ i ] [ i ] ;
70 }
71 i f ( p a r a r ( x , x0 ) ) {
72
73 break ;
74 }
75 c o p i a r ( x , x0 ) ;
76 }
77 i f ( k>=maximo ) {
78 retorno = false ;
79 }
80 e l s e r e t o r n o = true ;
81
82 }
83 return ( r e t o r n o ) ;
84 }
85 }

4. Conclusão
Conclui-se que trabalho mostrou-se satisfatório com a criação de uma classe que nos
possibilita resolver problemas de sistemas lineares, bastante utilizados em diversas áreas
profissionais como engenharia civil, administração, robótica, entre outras. Além disso,
damos ênfase à importância do uso do computador e da necessidade de aprender noções
básicas de programação computacional, especialmente da linguagem de programação
Java que é universal, robusta e segura. Esta combinação mostrou-se uma ferramenta im-
portante para utilização dos alunos no seu dia-a-dia acadêmico.

5. Agradecimentos
À Universidade Federal do Ceará (UFC) pelo apoio financeiro através de bolsa de projetos
de graduação.

Referências
Burden, L. e Faires, J. (2008). Análise numérica. São Paulo: Cengage Learning.
Burian, R., Lima, A., e Junior, A. (2007). Cálculo Numérico. São Paulo: LTC.
Campos, F. (2007). Algoritmos Numéricos. São Paulo: LTC.
Gilat, A. e Subramaniam, V. (2000). Métodos Numéricos para Engenheiros e Cientistas.
São Paulo: Bookman.
Hubbard, J. (2003). Programação em C++. Bookman.
Ruggiero, M. e Lopes, V. (1997). Cálculo Numérico: Aspectos teoricos e computacionais.
São Paulo: Makron Books.
Serson, R. (2007). Programação Orientada a objetos com Java 6: Curso Universitário.
Rio de Janeiro: Brasport.