|
|
Prosseguindo vamos examiar um polinômio de grau 3:
poli: x^3 + x^2 - 8*x - 12;
O cálculo das raízes está adiante:
sol: solve (poli=0, x);
[x = 3, x = - 2]
A resposta é novamente escrita como uma lista de duas equações. Sabemos que para uma equação de terceiro grau podemos experar três soluções, então assumimos que uma das soluções é uma raíz duplicada. Qual delas?
Para responder àquela questão, digitamos multiplicities e obtemos essa lista:
m: multiplicities;
[1, 2]
Isso significa que a primeira equação na lista de soluções tem multiplicidade um, enquanto a segunda solução tem multiplicidade dois.
Para prosseguir, reescrevemos as equações como termos:
termos: map( lambda( [eq], lhs(eq) - rhs(eq)), sol);
[x - 3, x + 2]
Agora temos que usar as multiplicidades para formar os fatores corretos:
map(lambda ( [term, exponent], term^exponent), termos, m);
2
[x - 3, (x + 2) ]
Dessa vez usamos map com uma função simbólica com dois argumentos. Para tal função, temos também que fornecer duas listas de argumentos.
Agora podemos aplicar multiplicações:
apply("*", %);
2
(x - 3) (x + 2)
Isso é um polinômio na forma fatorada. Uma expansão nos fornece o polinômio inicial:
expand(%);
3 2
x + x - 8 x - 12
É certamente possível colocar todos esses cálculos em uma expressão simples:
expand(apply("*", map( lambda( [eq, exponent], (lhs(eq) - rhs(eq))^exponent),
sol,
multiplicities
) ) );
A expressão mais interna (aqui é o map) é avaliada em primeiro lugar. Isso não ;e surpresa: O resultado do map é necessário para executar o apply e o resultado do apply é necessário para executar o expand.
|
|