Índice
Seguinte

Soluções de Polinômios de uma Variável


O Cálculo de raízes exatas de um polinômio de uma única variávelé um problema que é fechado para o que aprendenmos na escola, mas é também um problema que pode ser usado para exemplificar alguns artifícios úteis.

Começaremos com um polinômio de grau 2, que atribuimos à variável poli:

 poli: x^2 - x - 12;

Obtemos:

   2
x - x - 12

Para calcular as raízes, usamos a função solve:

solutions: solve (poli=0, x);
  [x = - 3, x = 4]

A resposta é escrita como uma lista de duas equações. Quando convertemos essas equações em termos, podemos multiplicá-las para obter o polinômio inicial.

Fazemos isso em diversos passos. Primeiro reescrevemos as equações como termos:

map( lambda( [eq], lhs(eq) - rhs(eq)), solutions);

Isso é um pequeno artifício. A função map é usada para aplicar uma função a todos os elementos de uma lista . A função é escrita como uma expressão lambda, no nosso exemplo como:

lambda ([eq], lhs(eq) - rhs(eq))

Uma expressão lambda começa com o símbolo lambda o qual é seguido por parêntesis. Dentro dos parêntesis encontra-se a lista dos parâmetros formais e uma expressão simbólica. A lista de parâmetros formais é escrita entre colchêtes.

No nosso exemplo sabemos que uma equação irá ser atribuída ao parâmetro forma quando a função for chamada. Para equações podemos usar as funções lhs e rhs para acessar o lado esquerdo e o lado direito de uma equação respectivamente. Subtraimos o lado direito do lado esquerdo para obter um termo.

Avaliação do resultado de map em uma lista de dois termos:

   [x + 3, x - 4]

Paraverificar que esses termos são os fatores do polinômio poli, temos que multiplicá-los. Isso requer novamente um artifício: A função apply é usada para aplicar uma operação aritmética a todos os elementos de uma lista. Para transformar uma lista de termos em um produto, aplicamos multiplicação aos elementos daquela lista:

apply("*", %);
   (x - 4) (x + 3)

Isso é um polinômio na forma fatorada. Expansão nos fornece o polinômio inicial:

expand(%);
   2
x - x - 12

O que aprendemos:



Índice
Seguinte