ANAFU - Um Ambiente Amigável

para Analise de Funções

Prof. Dr Mauro Cavalcante Pequeno(UFC)
Prof. Msc. Mário Hattori(UFPB)
Amédes Eleuterio da Costa Junior(UFC)
Departamento de Computação - UFC
Campus do Pici - Bloco 910
CEP 60.455-760 - Fortaleza - CE
E-mail : mauro@lia.ufc.br








1.  INTRODUÇÃO

Apesar do grande desenvolvimento que o software numérico teve nas ultimas décadas, seu uso permanece restrito a uma classe de usuários mais ou menos especializada. Alguns pesquisadores chegaram a levantar a questão sobre se as preocupações com a produção de software numérico prejudicaram o atendimento às necessidades de comunicação com o usuário [CODY 1984]. Surgiu, então, a idéia de facilitar a utilização de softwares numéricos através da utilização de ambientes interativos.

Ford e ILes [1987] apontam como grande esperança da década de 90 se conseguir conceber e implementar sistemas que forneça um ambiente harmonioso em que a utilização de qualquer um dos métodos de solução não implique em mudanças de procedimento drástico. O que se busca é um sistema capaz de dar assistência ao aluno na solução de seus problemas matemáticos e que se apresente como um sistema amigável.

Alguns softwares matemáticos, embora sejam poderosos e possuam muitos recursos capazes de auxiliar sobremaneira o trabalho dos usuários, pecam por necessitarem de uma linguagem que dificulta seu uso. Como é o caso do REDUCE (HEARN [1985]). Sistemas como o OMEGA (Wolfram [1988b]) e o MATHEMATICA (Wolfram [1988a]) se tornaram populares porque tiveram a capacidade de superar estas deficiências. O sistema ANAFU, um ambiente interativo para análise de uma determinada função, foi desenvolvido com a preocupação de oferecer recursos integrados de processamento numéricos, processamento gráfico, processamento simbólico e processamento de textos, permitindo ao aluno uma análise do comportamento de uma dada função matemática, complementada com uma visualização gráfica do processo.

Como o uso de funções é básico para maioria de dos problemas, um ambiente interativo capaz de fornecer, de uma forma amigável, a análise do comportamento de uma determinada função é desejável principalmente pelo fato que para se ter essas análises são necessários a utilização de conceitos e cálculos considerados complexos pela maioria dos usuários.

Logicamente para ser possível fornecer todas essas informações é necessário o uso da derivada primeira de F(x). Um programa capaz de derivar uma função a partir de sua árvore sintática foi desenvolvido e incorporado ao sistema. O valor da derivada é fornecido num ponto desejado sendo os cálculos completamente transparentes ao usuário. Da mesma forma uma outra rotina para o cálculo de zeros de funções foi adicionada ao sistema.

Um dispositivo de zoom foi também incorporado permitindo melhor visualização dos gráficos exibidos.

Como subproduto o ANAFU pode fornecer o código fonte do programa que implementa a função, especificada em FORTRAN ou C conforme a opção ao aluno.

2. DESCRIÇÃO DO SISTEMA

O sistema ANAFU foi desenvolvido num ambiente UNIX, utilizando várias linguagens (C, C++, FORTRAN) e ferramentas (GUIDE, YACC, LEX) conforme a tarefa incorporada.

Basicamente divide-se em :


Uma interface amigável é fundamental para se incentivar o uso de um software. Quando se trata de software numérico essa necessidade é acentuada, já que a manipulação com números é áspera para maioria dos alunos.

Com essa preocupação lançou-se mão de uma ferramenta disponível no ambiente X-Windows, o GUIDE, procurando-se construir uma interface que auxiliasse o aluno a especificar o problema de uma forma cômoda, facilitando a utilização do sistema.

Utilizando-se o GUIDE, construiu-se uma interface gráfica onde as funções mais utilizadas são customizadas na forma de ícones. O aluno monta sua própria função com a composição desses ícones. É dado também a opção para o aluno escrever a função diretamente. A figura 1 mostra a tela padrão da interface. É bom notar que além da especificação da função a ser analisada, o sistema oferece ao aluno a opção de escolha da geração do código fonte em duas linguagens, Fortran ou C.
 

3.  MONTAGEM DA ÁRVORE SINTÁTICA

A determinação da árvore sintática, formada pela atomização de cada elemento que compõe a função e suas relações, desempenha grande importância no sistema, já que todos os cálculos efetuados pelo mesmo se baseiam nessa árvore. Sua construção foi objeto de estudos exaustivos que culminaram no processo descrito a seguir.

Em primeiro lugar é preciso especificar de maneira concisa a pseudo-linguagem que o aluno deverá utilizar nas especificações das funções, e para isso é necessário a definição da gramática da linguagem.

A gramática é quem descreve as palavras válidas (lexemes) e suas funções dentro de sentenças de uma linguagem. Uma sentença corresponde a uma sequência de lexemes que têm sentido na liguagem. Uma grámatica é composta de várias produções que representam de uma maneira geralmente recursiva a boa ordenação dos lexemes em uma sentença.

Definida a gramática, pode-se então construir as principais partes do tradutor, que agora será chamado de interpretador. Este terá dois analisadores: o Léxico e o Sintático.

O Analisador Léxico é a parte do interpretador responsável pelo reconhecimento dos lexemes, que são as menores partes de uma sentença de uma linguagem. Cada vez que o Analisador Léxico reconhece um lexeme, ele envia um código, dito "token", a outra parte do interpretador, chamada de Analisador Sintático.

O Analisador Sintático é responsável por gerar a árvore sintática segundo as produções da gramática.

4. EXIBIÇÃO GRÁFICA

A visualização gráfica do processo possibilita ao aluno ter uma melhor visão de como o problema se apresenta permitindo ainda checar a resposta da análise fornecida. Com as facilidades de zoom, caminhamento pelo gráfico com as setas de direção e posicionamento através do mouse, associado ao diagnóstico ao lado que mostra o valor pontual da abcissa, da ordenada e do correspondente valor da derivada num ponto selecionado tornando-se desta forma um recurso indispensável ao sucesso do software.

A seguir o processo de construção serão descritos, bem como o mecanismo para o cálculo das derivadas, ferramenta importante no auxílio ao processo gráfico, como na análise da função.

Um exemplo de resposta gráfica será exibido na seção seguinte.
 


O projeto para se desenhar gráficos de funções começa fixando o tamanho do gráfico em um número de linhas e de colunas. Por exemplo 50 linhas e 100 colunas. Fixado o tamanho do gráfico conhece-se o número de pontos distintos que pode caber na área e cada ponto dessa área tem coordenadas inteiras bem definidas. Associando-se, no caso y = f(x), um par (x, y) será mapeado num par (x’, y’) de inteiros que pode ser representado na tela do computador. A construção do mapeamento envolve a determinação do valores máximos e mínimos de x e y.

Sejam Xm e XM os valores máximo e mínimos de x e sejam Ym e YM os valores mínimo e máximo de y. Sejam c e l o número de colunas e de linhas disponíveis na superfície do gráfico. Então as unidades utilizadas para x e y são dadas por :

  • ux = (XM - Xm)/(c - 1)

  •  

     

    uy = (YM - Ym)/(l - 1).

    Agora é simples obter o mapeamento :
  • Mx = (XM - Xi) / ux

  •  

     

    My = (YM - Yi) / uy ,

    Onde Xi e Yi são pontos do gráfico em coordenadas euclidianas e Mx e My são os pontos devidamente mapeados para a tela do computador.

    Para o cálculo do máximo e do mínimo é necessário o cálculo da derivada primeira de f(x) e a determinação dos pontos onde ela se anula. Então é necessário construir-se um programa para fornecer o valor da derivada. Isso é feito de forma automática a partir da árvore semântica, obedecendo certas regras como descrito a seguir.
     


    O programa das derivadas foi escrito em C++ e foi dado para ele uma abordagem orientada a objetos com a seguinte hierarquia de classes :

    A classe expressão foi criada unicamente para que seus métodos fossem herdados e sobrecarregados pelas classes filhas. Cada classe filha utiliza os métodos herdados de acordo com suas especificações. Isso se dá graças ao poder da programação orientada a objetos juntamente com a linguagem C++.

    5.  DIAGNÓSTICO DA FUNÇÃO

    O cálculo da derivada da função é de vital importância para a realização da análise matemática preliminar. É a partir da derivada que pode-se detectar assíntotas verticais no intervalo dado. Isto é feito através do cálculo das raízes da seguinte equação: arctag(D(f(x))) = p .

    A determinação da assíntota horizontal também é feita utilizando-se a função arctag(D(f(x))), pois se o arctag(D(f(x))) ® 0 a medida que x ® ¥ , logo F(x) ® Constante, o que caracteriza uma assíntota horizontal.

    Mas por que não se utiliza f(x) em vez de arctag(D(f(x))) para detectar assíntotas verticais? Os valores da imagem de arctag(D(f(x))) estão no intervalo [0,p ], portanto pode-se ter certeza que uma determinada avaliação de arctag(D(f(x))) não extrapolará os limites da máquina quando submetida a qualquer valor de x. Tal garantia já não pode se dar para funções em gerais.

    Para poder desenhar a função f(x) num enquadramento que contivesse todo seu desenvolvimento no intervalo dado tornou-se necessário o cálculo dos máximos e mínimos da função f(x). Para isto também utilizou-se a função arctag(D(f(x))). Em associado como os algoritmos numéricos de bisseção e o método de BRENT (Forsythe et al. [1977]), para o cálculo de raízes de função, foi possível destacar no intervalo os pontos de máximos e mínimos da função, que se caracterizam por zerar a função arctag(D(f(x))). A figura 3 apresenta um dos gráficos desenvolvido pelo sistema para análise do aluno.

    O diagnóstico final é apresentado numa tela contendo os valores das pontos de máximo e mínimo, e as assíntotas horizontais e verticais encontradas (figura 4). O resultado dessa crítica fica armazenado para posterior avaliação do desempenho do sistema. Como os procedimento utilizados se baseiam em aproximações esse diagnóstico pode apresentar algumas imperfeições que podem ser conferidas e corrigidas pelo próprio aluno, mediante as facilidades de utilização e interatividade que o sistema oferece.
     

    6.  CONCLUSÃO

    O Sistema ANAFU constitui-se de um ambiente amigável para solução de problemas científicos, dentro da linha montada por Ford & Iles [1987], levando-se em conta alguns princípios como clareza, objetividade, facilidade de utilização, interatividade e uma boa visualização do problema permitindo ao aluno uma checagem do diagnóstico apresentado.

    Embora a construção seja bastante complexa, já que estruturalmente é composto de módulos que trabalham cooperativamente, mesmo tratando-se de rotinas escritas em linguagens diversas, como FORTRAN (zeros de funções), C (análise léxica e sintática, árvore semântica, código fonte) e C++ (rotina das derivadas e interface) o seu uso é bastante simples como convém o software de natureza didática.

    O software atual utilizou o ambiente de desenvolvimento do X-Windows da SUN WORKSTATION. Já está em curso o desenvolvimento de uma versão do ANAFU para microcomputadores IBM/PC o que poderá proporcionar uma utilização mais ampla do sistema.

    As idéias e técnicas utilizadas na elaboração desse sistema serão úteis para elaboração de outros. De imediato, toda a concepção do sistema está sendo utilizada na idealização de um ambiente mais complexo, envolvendo inteligência artificial voltado para o cálculo de integrais. A definição da função integrando e a análise dessa função são fundamentais para se promover a escolha e ativação dos métodos de cálculo de integrais.

    REFERÊNCIAS

    CODY [1984] W. J. Cody, "Observations on the mathematical software effort", in Cowell [1984], pp. 1-19.

    FORD & ILES [1987] B. Ford & R. M. J. Iles, "The what and why of problem solving environments for scientific computing ", Problem Solving Environments for Scientific Computing, B. Ford & F. Chatelin, eds., North-Holland, Amsterdam, The Netherlands, pp. 3-21.

    HEARN [1965] A. C. Hearn (ed.), REDUCE User’s Manual, Version 3.2, Rand Publication CP78 (Rev. 4/85), Santa Monica, CA.

    WOLFRAM [1988a] S. Wolfram, Mathematica: A System for Doing Mathematics by Computer, Addison-Wesley, London.

    WOLFRAM [1988b] S. Wolfram, The Omega Scientific Computation System, Addison-Wesley, London.

    FORSYTHE ET AL. [1977] G. E. Forsythe, M. A. Malcom & C. B. Moler, Computer Methods for Mathematical Computations, Prentice-Hall, Englewood Cliffs, NJ.