|
|
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
|
|