Responsável
Victor Giraldo
Instituto de Matemática - UFRJ

 

BREVES CONSIDERAÇÕES SOBRE A UTILIDADE DOS
SISTEMAS DE COMPUTAÇÃO ALGÉBRICA

Lenimar Nunes de Andrade
UFPB

INTRODUÇÃO

SISTEMAS DE USO GERAL
Muitos desses SCA possuem documentação disponibilizada na Internet em vários idiomas, e alguns deles têm até manuais em português. Em geral, possuem versões para vários sistemas operacionais, como Windows, Linux e Mac-OS. Alguns exemplos desses sistemas livres são:
MAXIMA
Na década de 1970, era um programa comercial e chamava-se Macsyma. Hoje é um SCA gratuito, com muitos recursos, muito bem documentado, e com página própria na Internet: a maxima.sourceforge.net.
REDUCE
Surgido no final da década de 1960, é um dos mais antigos SCA, mas está em pleno funcionamento hoje em dia. Pode ser copiado a partir do url reduce-algebra.com.
GEOGEBRA
Conhecido programa de Geometria Dinâmica. Em versões mais recentes, como a 4.2.55.0, incorporou a “Janela CAS” na qual podem ser executados comandos básicos como Simplificar (128/200), Fatorar (2013) ou Resolver(x^3 - 8 = 0).
Disponível em
www.geogebra.org
YACAS
Yet Another Computer Algebra System, um SCA gratuito e bastante completo, que pode ser copiado de yacas.sourceforge.net.
AXIOM
Surgiu em 1971 e, antigamente, chamava-se Scratchpad. É um SCA gratuito de uso geral e foi originalmente desenvolvido pela ibm. Disponível para diversos sistemas operacionais a partir da página axiom-developer.org.

A Computação, em suas várias formas, tem produzido significativas transformações sociais, econômicas e culturais no mundo contemporâneo. E, de fato, hoje em dia, é impossível imaginar nosso cotidiano sem uma efetiva utilização do computador.

Tradicionalmente, o vocábulo computar tem sido utilizado com o significado de “efetuar cálculos com números”. A Computação Numérica envolve não só as operações aritméticas básicas de adição, subtração, multiplicação, divisão e radiciação, mas também procedimentos mais sofisticados, a exemplo da determinação das raízes de um polinômio por meio de métodos de aproximação. Essa modalidade de computação envolve apenas números: os dados iniciais e os resultados finais são números.

Em geral, a Computação Numérica gera resultados aproximados, pois todos os cálculos são efetuados com aproximações decimais finitas. Por exemplo, a simples divisão de 1 por 3 em notação decimal é aproximadamente igual a 0,33333333. Ao se multiplicar esse valor por 3, o produto dará 0,99999999 (em lugar de 1). Não importa quantas casas decimais sejam utilizadas, esse valor será sempre aproximado. Além disso, se esse pequeno erro inicial da ordem de 0,00000001 for agregado a cálculos posteriores, também aproximados, tende a se propagar e a aumentar. 

Há cerca de seis décadas, tem se desenvolvido outra modalidade de computação, denominada Computação Simbólica ou Computação Algébrica. Nessa modalidade, é possível manipular símbolos (não obrigatoriamente expressões decimais), representando números inteiros, racionais, irracionais, imaginários, ou, ainda, polinômios, funções, matrizes, sequências, sistemas de equações e até mesmo estruturas mais abstratas, como equações diferenciais, grupos e anéis. Enquanto em Computação Numérica se opera apenas com aproximações de decimais finitas para números reais, em Computação Algébrica é possível operar com símbolos que representam objetos matemáticos mais gerais (além de números).

Por exemplo, ao se calcular usando uma calculadora ou um programa de Computação Numérica, o resultado será 1,4142135 × 1,7320508 = 2,4494897.

Por outro lado, um programa de computação algébrica mostrará resultado como sendo  = = , algo bastante próximo do que se faz em sala de aula. Assim, um programa desse tipo efetua cálculos com radicais sem a necessidade de representá-los em forma decimal aproximada, pois “conhece” as regras e propriedades algébricas dos objetos envolvidos. Além disso, é possível operar com objetos matemáticos que não são números. Por exemplo, um programa de computação algébrica pode desenvolver identidades algébricas como
(a + b)2 = a2 + 2ab + b2  ou  (a + b)(a – b) = a2 – b2, sem atribuir quaisquer valores numéricos para a e b.

 

SISTEMAS DE COMPUTAÇÃO ALGÉBRICA

Nas últimas décadas, houve considerável progresso na teoria envolvendo algoritmos simbólicos ou algébricos. Ambientes computacionais que empregam esse tipo de teoria passaram a ser chamados de Sistemas de Computação Algébrica (SCA) ou Sistemas de Manipulação Simbólica, dentre outras denominações. Esses sistemas podem ser utilizados em inúmeras áreas da ciência e da tecnologia, e podem ser divididos em duas categorias básicas: sistemas de uso específico e sistemas de uso geral. O que os SCA têm em comum é a grande capacidade de efetuar rapidamente cálculos analíticos que podem ser bastante trabalhosos. Alguns exemplos de SCA disponíveis gratuitamente estão no quadro da página anterior.

 

EXEMPLOS

A figura 1, na página a seguir, mostra uma tela com um exemplo de utilização do Maxima, em que é dada uma matriz

e são calculadas a sua inversa M -1 e seu determinante
det(M) = c(c2– ab) + a(a2 – bc) – b(ac – b2). Note que os valores envolvidos nos cálculos não são numéricos, mas o programa não se intimida com isso e realiza os cálculos na maior rapidez.

Na figura 2, são mostrados exemplos de utilização do Reduce: o desenvolvimento da potência (x + y + z)5;  o cálculo do fatorial de  40 (40!);  a solução da equação biquadrada  x4 10x2 + 23 = 0  e a fatoração dos polinômios  x4– 16  e  x5+ x + 1.

Esses exemplos já ilustram algumas das possibilidades de aplicação de Sistemas de Computação Algébrica na sala de aula do ensino médio. Esses sistemas podem fazer cálculos pesados (tanto numéricos quanto simbólicos) com facilidade, permitindo que os alunos lidem com uma gama maior de exemplos (cuja manipulação seria difícil apenas com papel e lápis) e enfoquem aspectos mais conceituais da Matemática (uma vez que as contas trabalhosas ficam a cargo do computador). Por exemplo, dificilmente um aluno no ensino médio seria capaz de fatorar ou calcular raízes de um polinômio de grau superior a 4. Entretanto, o fato de o SCA ter feito esse cálculo oferece ao aluno a oportunidade de explorar aspectos mais qualitativos de funções polinomiais, como o comportamento do gráfico. Às vezes se comenta que o fatorial de um número natural cresce muito rápido quando esse número aumenta, mas é praticamente impossível determinar esses fatoriais apenas com papel e lápis. O cálculo de fatoriais feito pelo programa fornece uma percepção mais concreta desse crescimento.

Praticamente todos os SCA podem ser usados como linguagens de programação, embora a utilização desse tipo de recurso exija um pouco mais de estudo. Observe, por exemplo, os seguintes comandos do Maxima:

for n from 1 thru 100 do print(n, float(sqrt(n)));

mostra uma listagem com  n  e sua respectiva raiz quadrada para todo  n  de 1 a 100.

for k from 100 thru 200 do if primep(k) then print(k, “e primo”);

lista os inteiros primos de 100 a 200.

 

UM ASSISTENTE MATEMÁTICO

Um SCA pode ser usado como um assistente matemático, simplificando expressões algébricas, encontrando raízes de equações, fatorando polinômios, efetuando operações com matrizes, construindo gráficos de funções, além de ser útil na resolução de problemas em diversos campos da Matemática.

Esses programas são capazes de obter respostas que podem ser comparadas com aquelas de que o usuário já dispõe. Podem, também, efetuar a parte mais trabalhosa de cálculos, deixando para o usuário apenas a análise e conclusão a respeito dos resultados. Em particular, esse recurso permite que sejam tratados no ensino médio problemas que não poderiam ser abordados sem o apoio do computador, devido à dificuldade de cálculos. Por tudo isso, esses programas são ferramentas de ajuda valiosa, podendo ser aliados em todo o processo de ensino-aprendizagem.

Apresentamos aqui duas atividades que podem ser realizadas em sala de aula do ensino médio. São atividades conceitualmente simples, mas que envolvem cálculos trabalhosos, de modo que se justifica o uso de um recurso computacional.

MAXIMA
figura 1

REDUCE
figura2

Escolhemos um tema que enfatiza a capacidade desse tipo de programa em manipular expressões algébricas: polinômios e equações polinomiais. Utilizamos o Maxima nos exemplos, mas poderia ter sido usado outro sca com as devidas adaptações nos comandos.

 

ATIVIDADE I

Como primeira atividade, vamos calcular o máximo divisor comum de dois polinômios usando o conhecido algoritmo da divisão euclidiana.

Inicialmente, fornecemos dois polinômios  p  e  q na variável  x:

p: x^7 + 5*x^6 - 9*x^5 + 27*x^4 - 56*x^3 - 16*x - 112
q: x^6 + x^5 - 4*x^4 - 2*x^3 - 3*x^2 - 15*x - 10

Nos comandos acima, os dois pontos são símbolos de atribuição, isto é, servem para definir os polinômios com as letras  p  e  q,  respectivamente. Usamos o programa para dividir  p  por  q,  digitando

r: divide(p, q);

cuja resposta é  [x + 4,  –9x5+ 45x4– 45x3+ 27x2+ 54x – 72]. Esse resultado é da forma [r1; r2], onde  r1  é o quociente da divisão e  r2  é o resto.

A seguir, dividimos  q  pelo resto r[2]:

s: divide(q, r[2]);

Depois, dividimos  r[2]  pelo resto da divisão anterior  s[2]:

t: divide(r[2], s[2]);

cuja resposta é

Dividimos s[2] pelo resto da divisão anterior t[2]:

w: divide(s[2], t[2]);

que o programa responde 

Como o resto dessa divisão é igual a zero, encerramos o processo de sucessivas divisões e concluímos que  mdc(p; q)  é o resto  t[2]  da divisão de  r[2]  por  s[2],  dividido pelo coeficiente do termo de maior grau, ou seja, que

mdc(p; q) = = x3 + x + 2.

Podemos também aproveitar a capacidade do programa em resolver equações polinomiais para comprovar que as raízes do máximo divisor comum de  p  e  q  é a interseção dos conjuntos das raízes de  p  com as raízes de  q.  Para verificar isso, basta digitar os comandos a seguir:

mdc: gcd(p, q);
solve(mdc = 0, x);
solve(p = 0, x);
solve(q = 0, x);

Na sequência de instruções acima, gcd (da sigla em inglês “greatest common divisor”) é comando do Maxima para o mdc de polinômios, e o comando solve serve para resolver equações. Assim, na segunda linha, estamos encontrando as raízes do polinômio mdc de  p  e  q. A ideia é comparar essas raízes com as de  p  e  q,  determinadas em seguida.

 

ATIVIDADE 2

Como segunda atividade, vamos determinar todas as possíveis raízes racionais de uma equação polinomial de coeficientes inteiros  f(x) = 0  e, depois, testar uma por uma para verificar qual delas é raiz da equação.

Definimos   f(x)  com um comando

f(x) := 21*x^3-482*x^2-1089*x+350;

Calculamos uma lista  q  dos divisores do coeficiente do termo de maior grau

q: listify(divisors(21))

e o programa responde [1; 3; 7; 21].

Calculamos os divisores do termo constante

p: listify(divisors(350))

que o programa responde

[1; 2; 5; 7; 10; 14; 25; 35; 50; 70; 175; 350].

for j from 1 thru length(p) do
for k from 1 thru length(q) do
(r: p[j]/q[k],
if (f(r)=0) then print(r,“é raiz”) else print(r,“não é raiz”),
if (f(-r)=0) then print(-r,“é raiz”) else print (-r,“não é raiz”));

Nesse caso, para cada elemento da lista de divisores  p  e cada elemento de  q,  testa-se  se r = ou  r = - é uma raiz da equação.

Depois que a verificação é executada, são mostradas mensagens como

“–1 não é raiz” ou “2/7 é raiz”.

É possível a resolução direta da equação com um comando

solve(f(x)=0)

para comparar com as respostas mostradas anteriormente.

 

REFERÊNCIA

SymbolicNet, Symbolic Mathematical Computation Information Center, disponível na Internet         em www.symbolicnet.org.
Galván, J. R. R., Maxima con wxMaxima: software libre en el aula de matemáticas, Oficina de         Software Libre de la Universidad de Cádiz.