1 @c Language: Brazilian Portuguese, Encoding: iso-8859-1
2 @c /simplifications.texi/1.6/Thu Jun 7 02:12:31 2007//
4 * Introdução a simplification::
5 * Funções e Variáveis Definidas para simplification::
8 @node Introdução a simplification, Funções e Variáveis Definidas para simplification, simplification, simplification
9 @section Introdução a simplification
11 O diretório @code{maxima/share/simplification} contém muitos scripts
12 que implementam regras de simplificação e funções,
13 e também algumas funções não relacionadas a simplificação.
15 @node Funções e Variáveis Definidas para simplification, , Introdução a simplification, simplification
16 @section Funções e Variáveis Definidas para simplification
18 @c Adapted from absimp.usg ----------------------
20 @c @defvr {Add-on package} (WITH HYPHEN) CONFUSES DESCRIBE (CAN'T FIND END OF ITEM)
21 @c SAME WITH OTHER "ADD-ON PACKAGES" HERE (FACEXP, INEQ)
22 @subsection Package absimp
24 O pacote @code{absimp} contém regras de comparação de seq@"{u}ências decaractere que
25 extendem as regras internas de simplificação para as funções @code{abs} e
27 @code{absimp} respeita as relações
28 estabelecidas com a função interna @code{assume} e por meio de declarações tais
29 como @code{modedeclare (m, even, n, odd)} para inteiros paes ou ímpares.
31 @code{absimp} define as funções @code{unitramp} e @code{unitstep}
32 em termos de @code{abs} e @code{signum}.
34 @code{load ("absimp")} torna esse pacote disponível para uso.
35 @code{demo (absimp)} faz uma demonstração desse pacote.
46 (%i1) load ("absimp")$
50 (%i3) diff (abs (x), x);
58 @c disol.usg: "disolate" already in doc/info/Expressions.texi
60 @c elim.usg: "eliminate" already in doc/info/Polynomials.texi
62 @c Adapted from facexp.usg ----------------------
63 @c ALL OF THE TEXT IN FACEXP.USG IS VERY VAGUE.
64 @c I HAVE NO IDEA WHAT THESE FUNCTIONS DO.
65 @c ALL OF THESE ITEMS NEED TO BE HEAVILY REVISED
66 @c (ASSUMING THIS PACKAGE IS SOMETHING WE WANT TO INVEST TIME IN)
67 @subsection Package facexp
69 @c THIS IS VERY VAGUE. JUST WHAT DOES THIS DO?
70 O pacote @code{facexp} contém muitas funções relacionadas a simplificações que
71 fornecem ao usuário a habilidade de estruturar expressões por meio de expansão
72 controlada. Essa capacidade é especialmente útil quando a expressão
73 contém variáveis que possuem significado físico, porque é muitas vezes verdadeiro
74 que a forma mais econômica de uma tal expressão pode ser obtida por meio de
75 uma expansão completa da expressão com relação a essas variáveis, e então
76 fatorar seus coeficientes. Apesar de ser verdadeiro que esse procedimento é
77 fácil de realizar usando as funções padrão do Maxima, ajustes
78 adicionais podem se desejáveis, e esses toques finais podem ser
79 mais difíceis de aplicar.
81 A função @code{facsum} e suas formas relacionadas
82 fornecem um meio conveniente de controlar a estrutura de expressões
83 por esse caminho. Outra função, @code{collectterms}, pode ser usada para adicionar duas ou
84 mais expressões que já tenham sido simplificadas para essa forma, sem
85 resimplificar a expressão completa novamente. Essa função pode ser
86 útil quando expressões forem muito grandes.
88 @c CAN'T FIND ANY SUCH FILE "DIAGEVAL".
89 @c THERE ARE COMMENTED-OUT DEFNS OF FACTENEXPAND, FACEXPTEN, AND FACTORFACEXPTEN
90 @c IN FACEXP (AND NOWHERE ELSE).
91 @c COMMENTING OUT THIS TEXT FOR NOW.
92 @c Note: @code{factenexpand}, @code{facexpten}, and @code{factorfacexpten} are available only
93 @c after loading @code{diageval}. They are special functions used for tensor
96 @code{load ("facexp")} torna dispon;ivel para uso esse pacote.
97 @code{demo (facexp)} faz uma demonstração desse pacote.
99 @c THIS IS VERY VAGUE. JUST WHAT DOES THIS DO?
100 @c SOME EXAMPLES WOULD HELP HERE
101 @deffn {Função} facsum (@var{expr}, @var{arg_1}, ..., @var{arg_n})
102 Retorna uma forma de @var{expr} que depende dos
103 argumentos @var{arg_1}, ..., @var{arg_n}.
104 Os argumentos podem ser quaisquer formas adequadas para @code{ratvars}, ou eles podem ser
105 listas de tais formas. Se os argumentos não forem listas, então a forma
106 retornada é completamente expandida com relação aos argumentos, e os
107 coeficientes dos argumentos foram fatorados. Esses coeficientes são
108 livres dos argumentos, exceto talvez no sentido não racional.
110 Se quaisquer dos argumentos forem listas, então todas as tais listas são combinadas
111 em uma lista simples, e em lugar de chamar @code{factor} sobre os
112 coeficientes dos argumentos, @code{facsum} chama a si mesma sobre esses
113 coeficientes, usando essa nova lista simples que foi construída como o novo
114 argumento listo para essa chamada recursiva. Esse processo pode ser repetido para um
115 quantidade arbitrária de repetições por através do aninhamento dos elementos desejados nas listas.
117 É possível que alguém possa querer usar @code{facsum} com relação a subexpressões
118 mais complicadas, tal como @code{log (x + y)}. Tais argumentos são
119 também permitidos. Sem especificação de variável, por exemplo
120 @code{facsum (@var{expr})}, o resultado retornado é o mesmo que o que é retornado por meio de
121 @code{ratsimp (@var{expr})}.
123 Ocasionalmente o usuário pode querer obter quaisquer das formas abaixo
124 para expressões que são especificadas somente por meio de seus operadores líderes.
125 Por exemplo, alguém pode querer usar @code{facsum} com relação a todos os @code{log}'s. Nessa
126 situação, alguém pode incluir no meio dos argumentos ou o código
127 dos @code{log}'s específicos que devem ser tratados po esse caminho ou alternativamente a
128 expressão @code{operator (log)} ou a expressão @code{'operator (log)}. Se alguém quiser usar
129 @code{facsum} na expressão @var{expr} com relação aos operadores @var{op_1}, ..., @var{op_n},
130 pode-se avaliar @code{facsum (@var{expr}, operator (@var{op_1}, ..., @var{op_n}))}.
131 A forma @code{operator} pode também aparecer dentro de uma lista de argumentos.
133 Adicionalmente, a escolha de comutadores @code{facsum_combine} e
134 @code{nextlayerfactor} pode afetar o resultado de @code{facsum}.
137 @defvr {Variável global} nextlayerfactor
138 Valor padrão: @code{false}
140 Quando @code{nextlayerfactor} for @code{true}, chamadas recursivas a @code{facsum}
141 são aplicadas aos fatores da forma fatorada dos
142 coeficientes dos argumentos.
144 Quando @code{nextlayerfactor} for @code{false}, @code{facsum} é aplicada a
145 cada coeficiente como um todo mesmo se chamadas recursivas a @code{facsum} acontecerem.
148 @code{nextlayerfactor} na lista argumento de @code{facsum} tem o efeito de
149 @code{nextlayerfactor: true}, mas para o próximo nível da expressão @i{somente}.
150 Uma vez que @code{nextlayerfactor} é sempre associado ou a @code{true} ou a @code{false}, @code{nextlayerfactor}
151 deve ser apresentada com apóstrofo simples mesmo que @code{nextlayerfactor} apareça na lista de argumento de @code{facsum}.
154 @defvr {Variável global} facsum_combine
155 Valor padrão: @code{true}
157 @code{facsum_combine} controla a forma do resultado final retornada por meio de
158 @code{facsum} quando seu argumento é um quociente de polinômios. Se
159 @code{facsum_combine} for @code{false} então a forma será retornada como um somatório
160 completamente expandido como descrito acima, mas se @code{true}, então a expressão
161 retornada é uma razão de polinômios, com cada polinômio na forma
164 A escolha de @code{true} desse comutador é útil quando se
165 deseja para @code{facsum} ambos o numerador e o denominador de uma expressão
166 racional, mas não se deseja que o denominador seja multiplicado
167 de forma completa pelos termos do numerador.
170 @deffn {Função} factorfacsum (@var{expr}, @var{arg_1}, ... @var{arg_n})
171 Retorna uma forma de @var{expr} que é
172 obtida por meio de chamada a @code{facsum} sobre os fatores de @var{expr} com @var{arg_1}, ... @var{arg_n} como
173 argumentos. Se qualqeur dos fatores de @var{expr} estiver elevado a um expoente, ambos
174 o fator e o expoente irão ser processados por esse meio.
177 @deffn {Função} collectterms (@var{expr}, @var{arg_1}, ..., @var{arg_n})
178 Se muitas expressões tiverem sido
179 simplificadas com @code{facsum}, @code{factorfacsum}, @code{factenexpand}, @code{facexpten} ou
180 com @code{factorfacexpten}, e elas estão para serem adicionadas umas às outras, pode ser
181 desejável combiná-las usando a função @code{collecterms}.
182 @code{collecterms} pode pegar como argumentos todos os argumentos que podem ser
183 fornecidos para essas outras funções associadas com excessão de
184 @code{nextlayerfactor}, que não tem efeito sobre @code{collectterms}. A vantagem
185 de @code{collectterms} está em que @code{collectterms} retorna uma forma similar a @code{facsum}, mas
186 uma vez que @code{collectterms} está adicionando forma que já tenham sido processadas por @code{facsum},
187 @code{collectterms} não precisa repetir aquele esforço. Essa capacidade é
188 especialmente útil quando a expressão a ser somada for muito grande.
191 @c Adapted from functs.usg ----------------------
193 @c conjugate already described in doc/info/Matrices.texi
194 @subsection Pacote functs
196 @deffn {Função} rempart (@var{expr}, @var{n})
197 Remove a parte @var{n} da expressão @var{expr}.
199 Se @var{n} é uma lsita da forma @code{[@var{l}, @var{m}]}
200 então as partes de @var{l} até @var{m} são removidas.
202 Para usar essa função escreva primeiramente @code{load("functs")}.
205 @deffn {Função} wronskian ([@var{f_1}, ..., @var{f_n}], @var{x})
206 Retorna a matriz Wronskiana das funções @var{f_1}, ..., @var{f_n} na variável @var{x}.
208 @var{f_1}, ..., @var{f_n} pode ser o nome de funções definidas pelo usuário,
209 ou expressões na variável @var{x}.
211 O determinante da matriz Wronskiana é o determinante Wronskiano do conjunto de funções.
212 As funções são linearmente independentes entre si se seu determinante for igual a zero.
214 Para usar essa função escreva primeiramente @code{load("functs")}.
217 @c adjoint already described in doc/info/Matrices.texi
219 @deffn {Função} tracematrix (@var{M})
220 Retorna o traço (somatório dos elementos da diagonal principal) da matriz @var{M}.
222 Para usar essa função escreva primeiramente @code{load("functs")}.
225 @deffn {Função} rational (@code{z})
226 Multiplica o numerador e o denominador de @var{z} pelo complexo conjugado do denominador,
227 racionalizando dessa forma o denominador complexo.
228 Retorna a forma de expressão racional canônica (CRE) se fornecida uma CRE, caso contrário retorna a forma geral.
230 Para usar essa função escreva primeiramente @code{load("functs")}.
233 @c uprobe calls ?uprobe and assumes file is a list => obsolete, not common lisp
235 @c kronecker superseded by kron_delta in src/nset.lisp
237 @deffn {Função} nonzeroandfreeof (@var{x}, @var{expr})
238 Retorna @code{true} se @var{expr} for diferente de zero e @code{freeof (@var{x}, @var{expr})} retorna @code{true}.
239 Retorna @code{false} de outra forma.
241 Para usar essa função escreva primeiramente @code{load("functs")}.
244 @deffn {Função} linear (@var{expr}, @var{x})
245 Quando @var{expr} for uma expressão linear na variável @var{x},
246 @code{linear} retorna @code{@var{a}*@var{x} + @var{b}} onde @var{a} é diferente de zero,
247 e @var{a} e @var{b} são livres de @var{x}.
248 De outra forma, @code{linear} retorna @var{expr}.
250 Para usar essa função escreva primeiramente @code{load("functs")}.
253 @deffn {Função} gcdivide (@var{p}, @var{q})
254 Quando @code{takegcd} for @code{true},
255 @code{gcdivide} divide os polinômios @var{p} e @var{q} por seu maior divisor comum (MDC)
256 e retorna a razão dos resultados.
258 Quando @code{takegcd} for @code{false},
259 @code{gcdivide} retorna a razão @code{@var{p}/@var{q}}.
261 Para usar essa função escreva primeiramente @code{load("functs")}.
264 @c lcm already described in doc/info/Number.texi
266 @deffn {Função} arithmetic (@var{a}, @var{d}, @var{n})
267 Retorna o @var{n}-ésiomo termo da série aritmética
268 @code{@var{a}, @var{a} + @var{d}, @var{a} + 2*@var{d}, ..., @var{a} + (@var{n} - 1)*@var{d}}.
270 Para usar essa função escreva primeiramente @code{load("functs")}.
273 @deffn {Função} geometric (@var{a}, @var{r}, @var{n})
274 Retorna o @var{n}-ésimo termo da série geométrica
275 @code{@var{a}, @var{a}*@var{r}, @var{a}*@var{r}^2, ..., @var{a}*@var{r}^(@var{n} - 1)}.
277 Para usar essa função escreva primeiramente @code{load("functs")}.
280 @deffn {Função} harmonic (@var{a}, @var{b}, @var{c}, @var{n})
281 Retorna o @var{n}-ésimo termo da série harmônica
282 @code{@var{a}/@var{b}, @var{a}/(@var{b} + @var{c}), @var{a}/(@var{b} + 2*@var{c}), ..., @var{a}/(@var{b} + (@var{n} - 1)*@var{c})}.
284 Para usar essa função escreva primeiramente @code{load("functs")}.
287 @deffn {Função} arithsum (@var{a}, @var{d}, @var{n})
288 Retorna a soma dos elementos da série aritmética de 1 a @var{n}.
290 Para usar essa função escreva primeiramente @code{load("functs")}.
293 @deffn {Função} geosum (@var{a}, @var{r}, @var{n})
294 Retorna a soma dos elementos da série geométrica de 1 a @var{n}. Se @var{n} for
295 infinito (@code{inf}) então a soma será finita se e somente se o valor absoluto
296 de @var{r} for menor que 1.
298 Para usar essa função escreva primeiramente @code{load("functs")}.
301 @deffn {Função} gaussprob (@var{x})
302 Retorna a função de probalilidade de Gauss
303 @code{%e^(-@var{x}^2/2) / sqrt(2*%pi)}.
305 Para usar essa função escreva primeiramente @code{load("functs")}.
308 @deffn {Função} gd (@var{x})
309 Retorna a função de Gudermann
310 @code{2 * atan(%e^@var{x} - %pi/2)}.
312 Para usar essa função escreva primeiramente @code{load("functs")}.
315 @deffn {Função} agd (@var{x})
316 Retorna o inverso da função de Gudermann
317 @code{log (tan (%pi/4 + x/2)))}.
319 Para usar essa função escreva primeiramente @code{load("functs")}.
322 @deffn {Função} vers (@var{x})
323 Retorna o @i{sinus versus} @code{1 - cos (x)}.
325 Para usar essa função escreva primeiramente @code{load("functs")}.
328 @deffn {Função} covers (@var{x})
329 Retorna o @i{sinus versus} do complemento @code{1 - sin (@var{x})}.
331 Para usar essa função escreva primeiramente @code{load("functs")}.
334 @deffn {Função} exsec (@var{x})
335 Retorna a parte externa da secante @code{sec (@var{x}) - 1}.
337 Para usar essa função escreva primeiramente @code{load("functs")}.
340 @deffn {Função} hav (@var{x})
341 Retorna o semi-@i{sinus versus} @code{(1 - cos(x))/2}.
343 Para usar essa função escreva primeiramente @code{load("functs")}.
346 @c REDUNDANT WITH BINOMIAL COEFFICIENT; CUT IT ??
347 @deffn {Função} combination (@var{n}, @var{r})
348 Retorna o número de combinações de @var{n} objetos
349 tomados em grupos de @var{r} elementos.
351 Para usar essa função escreva primeiramente @code{load("functs")}.
354 @c REDUNDANT WITH PERMUTATIONS FUNCTION IN NSET; CUT IT ??
355 @deffn {Função} permutation (@var{n}, @var{r})
356 Retorna o número de permutações de @var{r} objetos
357 selecionados de um conjunto de @var{n} objetos.
359 Para usar essa função escreva primeiramente @code{load("functs")}.
362 @c Adapted from ineq.usg ----------------------
363 @c THIS PACKAGE IS INTERESTING BUT THIS TEXT NEEDS WORK AND EXAMPLES
364 @subsection Package ineq
366 O pacote @code{ineq} contém regras de simplificação
373 @c a>=4; /* uma desigualdade exemplo */
374 @c (b>c)+%; /* adiciona uma segunda e estrita desigualdade */
375 @c 7*(x<y); /* multiplica por um número positivo */
376 @c -2*(x>=3*z); /* multiplica por um número negativo */
377 @c (1+a^2)*(1/(1+a^2)<=1); /* Maxima sabe que 1+a^2 > 0 */
378 @c assume(x>0)$ x*(2<3); /* assumindo x>0 */
379 @c a>=b; /* outra desigualdade */
380 @c 3+%; /* adiciona alguma coisa à desigualdade imediatamente acima */
381 @c %-3; /* retirando essa alguma coisa */
382 @c a>=c-b; /* ainda outra desigualdade */
383 @c b+%; /* adiciona b a ambos os lados da desigualdade */
384 @c %-c; /* subtrai c de ambos os lados */
385 @c -%; /* multiplica por by -1 */
386 @c (z-1)^2>-2*z; /* determining truth of assertion */
387 @c expand(%)+2*z; /* expand this and add 2*z to both sides */
392 Warning: Putting rules on '+' or '*' is inefficient, and may not work.
393 Warning: Putting rules on '+' or '*' is inefficient, and may not work.
394 Warning: Putting rules on '+' or '*' is inefficient, and may not work.
395 Warning: Putting rules on '+' or '*' is inefficient, and may not work.
396 Warning: Putting rules on '+' or '*' is inefficient, and may not work.
397 Warning: Putting rules on '+' or '*' is inefficient, and may not work.
398 Warning: Putting rules on '+' or '*' is inefficient, and may not work.
399 Warning: Putting rules on '+' or '*' is inefficient, and may not work.
400 (%i2) a>=4; /* uma desigualdade exemplo */
402 (%i3) (b>c)+%; /* adiciona uma segunda e estrita desigualdade */
404 (%i4) 7*(x<y); /* multiplica por um número positivo */
406 (%i5) -2*(x>=3*z); /* multiplica por um número negativo */
408 (%i6) (1+a^2)*(1/(1+a^2)<=1); /* Maxima sabe que 1+a^2 > 0 */
411 (%i7) assume(x>0)$ x*(2<3); /* assumindo x>0 */
413 (%i8) a>=b; /* outa desigualdade */
415 (%i9) 3+%; /* adiciona alguma coisa à desigualdade imediatamente acima */
417 (%i10) %-3; /* retirando essa alguma coisa */
419 (%i11) a>=c-b; /* ainda outra desigualdade */
421 (%i12) b+%; /* adiciona b a ambos os lados da desigualdade */
423 (%i13) %-c; /* subtrai c de ambos os lados */
424 (%o13) - c + b + a >= 0
425 (%i14) -%; /* multiplica por -1 */
426 (%o14) c - b - a <= 0
427 (%i15) (z-1)^2>-2*z; /* determinando a verdade de uma assertiva */
429 (%o15) (z - 1) > - 2 z
430 (%i16) expand(%)+2*z; /* expandindo essa assertiva e adicionado 2*z a ambos os lados */
437 Seja cuidadoso com o uso dos parêntesis
438 em torno de desigualdades: quando o usuário digita @code{(A > B) + (C = 5)} o
439 resultado é @code{A + C > B + 5}, mas @code{A > B + C = 5} é um erro de sintaxe,
440 e @code{(A > B + C) = 5} é alguma coisa completametne diferente.
442 Faça @code{disprule (all)} para ver uma lista completa
443 das definições de regras.
445 O usuário será questionado se o Maxima for
446 incapaz de decidir o sinal de uma quantidade multiplicando uma desigualdade.
448 O mais comum recurso estranho é ilustrado por:
464 Outro problema é 0 vezes uma desigualdade; o padrão para isso
465 acontecer é 0 ter sido colocado à esquerda sozinho. Todavia, se você digitar
466 @code{X*@var{some_inequality}} e Maxima perguntar sobre o sinal de @code{X} e você
467 responder @code{zero} (ou @code{z}), o programa retorna @code{X*@var{some_inequality}}
468 e não utiliza a informação que @code{X} é 0. Você pode fazer @code{ev (%, x: 0)} em casos
469 semelhantes a esse, como a base de dados irá somente ser usada para propósitos de comparação
470 em decisões, e não para o propósito de avaliação de @code{X}.
472 O usuário pode notar uma resposta lenta quando esse pacote é disponibilizado para uso, como
473 o simplificador é forçado a examinar mais regras do precisaria sem esse
474 pacote, então você pode desejar remover essas regras após fazer uso
475 delas. Faça @code{kill (rules)} para eliminar todas as regras (incluindo qualquer
476 regra que você possa ter definido); ou você pode ser mais seletivo
477 eliminando somente algumas delas; ou use @code{remrule} sobre uma regra específica.
479 Note que se você disponibiliza para uso esse pacote após definir suas próprias
480 regras você irá sobrscrever suas regras que possuirem nomes identicos a nomes contidos em regras do pacote. As
481 regras no pacote são:
482 @code{*rule1}, ..., @code{*rule8},
483 @code{+rule1}, ..., @code{+rule18},
484 e você deve colocar o nome de regra entre aspas duplas ao referir-se a eles, como
485 em @code{remrule ("+", "+rule1")} para especificamente remover a primeira regra sobre @code{"+"}
486 ou @code{disprule ("*rule2")} para mostrar a definição da segunda regra multiplicativa.
488 @c lrats.usg: "lratsubst" and "fullratsubst" already in doc/info/Polynomials.texi
490 @c Adapted from rducon.usg ----------------------
491 @c THIS IS AN INTERESTING FUNCTION BUT THIS TEXT NEEDS WORK AND EXAMPLES
492 @subsection Package rducon
494 @deffn {Função} reduce_consts (@var{expr})
495 Substitui subexpressões constantes de @var{expr} com
496 construída com átomos constantes, gravando a definição de todas essas
497 constantes construídas na lista de equações @code{const_eqns}, e
498 retornando a expressão modificada @var{expr}. Essas partes de @var{expr} são constantes que
499 retornam @code{true} quando operadas por meio da função @code{constantp}. Conseq@"{u}êntemente,
500 antes de usar @code{reduce_consts}, se pode fazer
503 declare ([@var{objeto que vai receber a propriedade constante}], constant)$
506 para escolher a base de dados das quantidades constantes ocorrendo em suas
509 Se você está planejando gerar saídas em Fortran após esses cálculos
510 simbólicos, uma das primeiras seções de código pode ser o cálculo
511 de todas as constantes. Para gerar esse segmento de código, faça
514 map ('fortran, const_eqns)$
517 Variables como @code{const_eqns} que afetam @code{reduce_consts} são:
519 @code{const_prefix} (valor padrão: @code{xx}) é a seq@"{u}ência de caracteres usada para prefixar todos
520 os símbolos gerados por @code{reduce_consts} para representar subexpressões constantes.
522 @code{const_counter} (valor padrão: 1) é o índice inteiro usado para gerar símbolos
523 únicos para representar cada subexpressão constante emcontrada por @code{reduce_consts}.
525 @code{load ("rducon")} torna essa função disponível para uso.
526 @code{demo (rducon)} faz uma demonstração dessa função.
529 @c rncomb.usg: "rncombine" already in doc/info/Miscellaneous.texi
531 @c Adapted from scifac.usg ----------------------
532 @subsection Pacote scifac
534 @deffn {Função} gcfac (@var{expr})
535 @code{gcfac} função de fatoração que tenta aplicar a mesma heurística que
536 cientístas aplicam em tentativas de fazer expressões extremamente simples. @code{gcfac} está limitada
537 a fatorações monomiais. Para um somatório, @code{gcfac} faz o seguinte:
541 Fatores sobre os inteiros.
543 Coloca em evidência o maior expoente de termos ocorrendo como
544 coeficientes, independentemente da complexidade dos termos.
546 Usa (1) e (2) em fatorações de pares de termos adjascentes.
548 Repetidamente e recursivamente aplica essas técnicas até que
549 a expressão não mais mude.
552 O item (3) não necessáriamente faz uma tarefa ótima fatoração
553 par a par devido à dificuldade combinatória natural de encontrar
554 qual de todas dos possíveis rearranjos de pares retorna o mais
555 compacto resultado de fatoração de um par.
557 @code{load ("scifac")} torna essa função disponível para uso.
558 @code{demo (scifac)} faz uma demonstração dessa função.
561 @c Adapted from sqdnst.usg ----------------------
562 @c THIS FUNCTION IS INTERESTING BUT THIS TEXT NEEDS WORK. HOW DEEPLY CAN SQRT BE NESTED ??
563 @subsection Pacote sqdnst
565 @deffn {Função} sqrtdenest (@var{expr})
566 Desaninha @code{sqrt} de simples, numérico, binômios de raízes irracionais de números racionais , onde for possível. E.g.
570 @c sqrt(sqrt(3)/2+1)/sqrt(11*sqrt(2)-12);
574 (%i1) load ("sqdnst")$
575 (%i2) sqrt(sqrt(3)/2+1)/sqrt(11*sqrt(2)-12);
579 (%o2) ---------------------
580 sqrt(11 sqrt(2) - 12)
590 Algumas vezes isso ajuda na hora de aplicar @code{sqrtdenest} mais que uma vez, sobre coisas como
591 @code{(19601-13860 sqrt(2))^(7/4)}.
593 @code{load ("sqdnst")} Torna essa função disponível para uso.
596 @c stopex.usg: "expandwrt", "expandwrt_denom", and "expandwrt_factored" already in doc/info/Simplification.texi