1 @c /simplifications.texi/1.3/Sat Jul 8 08:16:05 2006//
3 * Introdução a simplification::
4 * Definições para simplification::
7 @node Introdução a simplification, Definições para simplification, simplification, simplification
8 @section Introdução a simplification
10 O directório @code{maxima/share/simplification} contém muitos scripts
11 que implementam regras de simplificação e funções,
12 e também algumas funções não relacionadas a simplificação.
14 @node Definições para simplification, , Introdução a simplification, simplification
15 @section Definições para simplification
17 @c Adapted from absimp.usg ----------------------
19 @c @defvr {Add-on package} (WITH HYPHEN) CONFUSES DESCRIBE (CAN'T FIND END OF ITEM)
20 @c SAME WITH OTHER "ADD-ON PACKAGES" HERE (FACEXP, INEQ)
21 @subsection Package absimp
23 O pacote @code{absimp} contém regras de comparação de sequências decaractere que
24 extendem as regras internas de simplificação para as funções @code{abs} e
26 @code{absimp} respeita as relações
27 estabelecidas com a função interna @code{assume} e por meio de declarações tais
28 como @code{modedeclare (m, even, n, odd)} para inteiros paes ou ímpares.
30 @code{absimp} define as funções @code{unitramp} e @code{unitstep}
31 em termos de @code{abs} e @code{signum}.
33 @code{load ("absimp")} torna esse pacote disponível para uso.
34 @code{demo (absimp)} faz uma demonstração desse pacote.
45 (%i1) load ("absimp")$
49 (%i3) diff (abs (x), x);
57 @c disol.usg: "disolate" already in doc/info/Expressions.texi
59 @c elim.usg: "eliminate" already in doc/info/Polynomials.texi
61 @c Adapted from facexp.usg ----------------------
62 @c ALL OF THE TEXT IN FACEXP.USG IS VERY VAGUE.
63 @c I HAVE NO IDEA WHAT THESE FUNCTIONS DO.
64 @c ALL OF THESE ITEMS NEED TO BE HEAVILY REVISED
65 @c (ASSUMING THIS PACKAGE IS SOMETHING WE WANT TO INVEST TIME IN)
66 @subsection Package facexp
68 @c THIS IS VERY VAGUE. JUST WHAT DOES THIS DO?
69 O pacote @code{facexp} contém muitas funções relacionadas a simplificações que
70 fornecem ao utilizador a habilidade de estruturar expressões por meio de expansão
71 controlada. Essa capacidade é especialmente útil quando a expressão
72 contém variáveis que possuem significado físico, porque é muitas vezes verdadeiro
73 que a forma mais econ@^omica de uma tal expressão pode ser obtida por meio de
74 uma expansão completa da expressão com relação a essas variáveis, e então
75 factorizar seus coeficientes. Apesar de ser verdadeiro que esse procedimento é
76 fácil de realizar usando as funções padrão do Maxima, ajustes
77 adicionais podem se desejáveis, e esses toques finais podem ser
78 mais difíceis de aplicar.
80 A função @code{facsum} e suas formas relacionadas
81 fornecem um meio conveniente de controlar a estrutura de expressões
82 por esse caminho. Outra função, @code{collectterms}, pode ser usada para adicionar duas ou
83 mais expressões que já tenham sido simplificadas para essa forma, sem
84 resimplificar a expressão completa novamente. Essa função pode ser
85 útil quando expressões forem muito grandes.
87 @c CAN'T FIND ANY SUCH FILE "DIAGEVAL".
88 @c THERE ARE COMMENTED-OUT DEFNS OF FACTENEXPAND, FACEXPTEN, AND FACTORFACEXPTEN
89 @c IN FACEXP (AND NOWHERE ELSE).
90 @c COMMENTING OUT THIS TEXT FOR NOW.
91 @c Note: @code{factenexpand}, @code{facexpten}, and @code{factorfacexpten} are available only
92 @c after loading @code{diageval}. They are special functions used for tensor
95 @code{load ("facexp")} torna dispon;ivel para uso esse pacote.
96 @code{demo (facexp)} faz uma demonstração desse pacote.
98 @c THIS IS VERY VAGUE. JUST WHAT DOES THIS DO?
99 @c SOME EXAMPLES WOULD HELP HERE
100 @deffn {Função} facsum (@var{expr}, @var{arg_1}, ..., @var{arg_n})
101 Retorna uma forma de @var{expr} que depende dos
102 argumentos @var{arg_1}, ..., @var{arg_n}.
103 Os argumentos podem ser quaisquer formas adequadas para @code{ratvars}, ou eles podem ser
104 listas de tais formas. Se os argumentos não forem listas, então a forma
105 retornada é completamente expandida com relação aos argumentos, e os
106 coeficientes dos argumentos foram factorizados. Esses coeficientes são
107 livres dos argumentos, excepto talvez no sentido não racional.
109 Se quaisquer dos argumentos forem listas, então todas as tais listas são combinadas
110 em uma lista simples, e em lugar de chamar @code{factor} sobre os
111 coeficientes dos argumentos, @code{facsum} chama a si mesma sobre esses
112 coeficientes, usando essa nova lista simples que foi construída como o novo
113 argumento listo para essa chamada recursiva. Esse processo pode ser repetido para um
114 quantidade arbitrária de repetições por através do aninhamento dos elementos desejados nas listas.
116 É possível que alguém possa querer usar @code{facsum} com relação a subexpressões
117 mais complicadas, tal como @code{log (x + y)}. Tais argumentos são
118 também permitidos. Sem especificação de variável, por exemplo
119 @code{facsum (@var{expr})}, o resultado retornado é o mesmo que o que é retornado por meio de
120 @code{ratsimp (@var{expr})}.
122 Ocasionalmente o utilizador pode querer obter quaisquer das formas abaixo
123 para expressões que são especificadas somente por meio de seus operadores líderes.
124 Por exemplo, alguém pode querer usar @code{facsum} com relação a todos os @code{log}'s. Nessa
125 situação, alguém pode incluir no meio dos argumentos ou o código
126 dos @code{log}'s eespecíficos que devem ser tratados po esse caminho ou alternativamente a
127 expressão @code{operator (log)} ou a expressão @code{'operator (log)}. Se alguém quiser usar
128 @code{facsum} na expressão @var{expr} com relação aos operadores @var{op_1}, ..., @var{op_n},
129 pode-se avaliar @code{facsum (@var{expr}, operator (@var{op_1}, ..., @var{op_n}))}.
130 A forma @code{operator} pode também aparecer dentro de uma lista de argumentos.
132 Adicionalmente, a escolha de comutadores @code{facsum_combine} e
133 @code{nextlayerfactor} pode afectar o ressultado de @code{facsum}.
136 @defvr {Variável global} nextlayerfactor
137 Valor por omissão: @code{false}
139 Quando @code{nextlayerfactor} for @code{true}, chamadas recursivas a @code{facsum}
140 são aplicdas aos factores da forma factorizada dos
141 coeficientes dos argumentos.
143 Quando @code{nextlayerfactor} for @code{false}, @code{facsum} é aplicada a
144 cada coeficiente como um todo mesmo se chamadas recursivas a @code{facsum} acontecerem.
147 @code{nextlayerfactor} na lista argumento de @code{facsum} tem o efieto de
148 @code{nextlayerfactor: true}, mas para o próximo nível da expressão @i{somente}.
149 Uma vez que @code{nextlayerfactor} é sempre associado ou a @code{true} ou a @code{false}, @code{nextlayerfactor}
150 deve ser apresentada com apóstrofo simples mesmo que @code{nextlayerfactor} apareça na lista de argumento de @code{facsum}.
153 @defvr {Variável global} facsum_combine
154 Valor por omissão: @code{true}
156 @code{facsum_combine} controla a forma do resultado final retornada por meio de
157 @code{facsum} quando seu argumento é um quociente de polinómios. Se
158 @code{facsum_combine} for @code{false} então a forma será retornada como um somatório
159 completametne expandido como descrito acima, mas se @code{true}, então a expressão
160 retornada é uma razão de polinómios, com cada polinómio na forma
163 A escolha de @code{true} desse comutador é útil quando se
164 deseja para @code{facsum} ambos o dumerador e o denominador de uma expressão
165 racional, mas não se deseja que o denominador seja multiplicado
166 de forma completa pelos termos do numerador.
169 @deffn {Função} factorfacsum (@var{expr}, @var{arg_1}, ... @var{arg_n})
170 Retorna uma forma de @var{expr} que é
171 obtida por meio de chamada a @code{facsum} sobre os factores de @var{expr} com @var{arg_1}, ... @var{arg_n} como
172 argumentos. Se qualqeur dos factores de @var{expr} estiver elevado a um expoente, ambos
173 o factor e o expoente irão ser processados por esse meio.
176 @deffn {Função} collectterms (@var{expr}, @var{arg_1}, ..., @var{arg_n})
177 Se muitas expressões tiverem sido
178 simplificadas com @code{facsum}, @code{factorfacsum}, @code{factenexpand}, @code{facexpten} ou
179 com @code{factorfacexpten}, e elas estão para serem adicionadas umas às outras, pode ser
180 desejável combiná-las usando a função @code{collecterms}.
181 @code{collecterms} pode pegar como argumentos todos os argumentos que podem ser
182 fornecidos para essas outras funções associadas com excessão de
183 @code{nextlayerfactor}, que não tem efeito sobre @code{collectterms}. A vantagem
184 de @code{collectterms} está em que @code{collectterms} retorna uma forma similar a @code{facsum}, mas
185 uma vez que @code{collectterms} está adicionando forma que já tenham sido processadas por @code{facsum},
186 @code{collectterms} não precisa repetir aquele esforço. Essa capacidade é
187 especialmente útil quando a expressão a ser somada for muito grande.
190 @c Adapted from functs.usg ----------------------
192 @c conjugate already described in doc/info/Matrices.texi
193 @subsection Pacote functs
195 @deffn {Função} rempart (@var{expr}, @var{n})
196 Remove a parte @var{n} da expressão @var{expr}.
198 Se @var{n} é uma lsita da forma @code{[@var{l}, @var{m}]}
199 então as partes de @var{l} até @var{m} são removidas.
201 Para usar essa função escreva primeiramente @code{load("functs")}.
204 @deffn {Função} wronskian ([@var{f_1}, ..., @var{f_n}], @var{x})
205 Retorna a matriz Wronskiana das funções @var{f_1}, ..., @var{f_n} na variável @var{x}.
207 @var{f_1}, ..., @var{f_n} pode ser o nome de funções definidas pelo utilizador,
208 ou expressões na variável @var{x}.
210 O determinante da matriz Wronskiana é o determinante Wronskiano do conjunto de funções.
211 As funções são linearmente independentes entre si se seu determinante for igual a zero.
213 Para usar essa função escreva primeiramente @code{load("functs")}.
216 @c adjoint already described in doc/info/Matrices.texi
218 @deffn {Função} tracematrix (@var{M})
219 Retorna o traço (somatório dos elementos da diagonal principal) da matriz @var{M}.
221 Para usar essa função escreva primeiramente @code{load("functs")}.
224 @deffn {Função} rational (@code{z})
225 Multiplica o numerador e o denominador de @var{z} pelo complexo conjugado do denominador,
226 racionando dessa forma o denominador complexo.
227 Retorna a forma de expressão racional canónica (CRE) se fornecida uma CRE, caso contrário retorna a forma geral.
229 Para usar essa função escreva primeiramente @code{load("functs")}.
232 @c uprobe calls ?uprobe and assumes file is a list => obsolete, not common lisp
234 @c kronecker superseded by kron_delta in src/nset.lisp
236 @deffn {Função} nonzeroandfreeof (@var{x}, @var{expr})
237 Retorna @code{true} se @var{expr} for diferente de zero e @code{freeof (@var{x}, @var{expr})} retorna @code{true}.
238 Retorna @code{false} de outra forma.
240 Para usar essa função escreva primeiramente @code{load("functs")}.
243 @deffn {Função} linear (@var{expr}, @var{x})
244 Quando @var{expr} for uma expressão linear na variável @var{x},
245 @code{linear} retorna @code{@var{a}*@var{x} + @var{b}} onde @var{a} é diferente de zero,
246 e @var{a} e @var{b} são livres de @var{x}.
247 De outra forma, @code{linear} retorna @var{expr}.
249 Para usar essa função escreva primeiramente @code{load("functs")}.
252 @deffn {Função} gcdivide (@var{p}, @var{q})
253 Quando @code{takegcd} for @code{true},
254 @code{gcdivide} divide os polinómios @var{p} e @var{q} por seu maior divisor comum (MDC)
255 e retorna a razão dos resultados.
257 Quando @code{takegcd} for @code{false},
258 @code{gcdivide} retorna a razão @code{@var{p}/@var{q}}.
260 Para usar essa função escreva primeiramente @code{load("functs")}.
263 @c lcm already described in doc/info/Number.texi
265 @deffn {Função} arithmetic (@var{a}, @var{d}, @var{n})
266 Retorna o @var{n}-ésiomo termo da série aritmética
267 @code{@var{a}, @var{a} + @var{d}, @var{a} + 2*@var{d}, ..., @var{a} + (@var{n} - 1)*@var{d}}.
269 Para usar essa função escreva primeiramente @code{load("functs")}.
272 @deffn {Função} geometric (@var{a}, @var{r}, @var{n})
273 Retorna o @var{n}-ésimo termo da série geométrica
274 @code{@var{a}, @var{a}*@var{r}, @var{a}*@var{r}^2, ..., @var{a}*@var{r}^(@var{n} - 1)}.
276 Para usar essa função escreva primeiramente @code{load("functs")}.
279 @deffn {Função} harmonic (@var{a}, @var{b}, @var{c}, @var{n})
280 Retorna o @var{n}-ésimo termo da série harm@^onica
281 @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})}.
283 Para usar essa função escreva primeiramente @code{load("functs")}.
286 @deffn {Função} arithsum (@var{a}, @var{d}, @var{n})
287 Retorna a soma dos elementos da série aritmética de 1 a @var{n}.
289 Para usar essa função escreva primeiramente @code{load("functs")}.
292 @deffn {Função} geosum (@var{a}, @var{r}, @var{n})
293 Retorna a soma dos elementos da série geométrica de 1 a @var{n}. Se @var{n} for
294 infinito (@code{inf}) então a soma será finita se e somente se o valor absoluto
295 de @var{r} for menor que 1.
297 Para usar essa função escreva primeiramente @code{load("functs")}.
300 @deffn {Função} gaussprob (@var{x})
301 Retorna a função de probalilidade de Gauss
302 @code{%e^(-@var{x}^2/2) / sqrt(2*%pi)}.
304 Para usar essa função escreva primeiramente @code{load("functs")}.
307 @deffn {Função} gd (@var{x})
308 Retorna a função de Gudermann
309 @code{2 * atan(%e^@var{x} - %pi/2)}.
311 Para usar essa função escreva primeiramente @code{load("functs")}.
314 @deffn {Função} agd (@var{x})
315 Retorna o inverso da função de Gudermann
316 @code{log (tan (%pi/4 + x/2)))}.
318 Para usar essa função escreva primeiramente @code{load("functs")}.
321 @deffn {Função} vers (@var{x})
322 Retorna o @i{sinus versus} @code{1 - cos (x)}.
324 Para usar essa função escreva primeiramente @code{load("functs")}.
327 @deffn {Função} covers (@var{x})
328 Retorna o @i{sinus versus} do complemento @code{1 - sin (@var{x})}.
330 Para usar essa função escreva primeiramente @code{load("functs")}.
333 @deffn {Função} exsec (@var{x})
334 Retorna a parte externa da secante @code{sec (@var{x}) - 1}.
336 Para usar essa função escreva primeiramente @code{load("functs")}.
339 @deffn {Função} hav (@var{x})
340 Retorna o semi-@i{sinus versus} @code{(1 - cos(x))/2}.
342 Para usar essa função escreva primeiramente @code{load("functs")}.
345 @c REDUNDANT WITH BINOMIAL COEFFICIENT; CUT IT ??
346 @deffn {Função} combination (@var{n}, @var{r})
347 Retorna o número de combinações de @var{n} objectos
348 tomados em grupos de @var{r} elementos.
350 Para usar essa função escreva primeiramente @code{load("functs")}.
353 @c REDUNDANT WITH PERMUTATIONS FUNCTION IN NSET; CUT IT ??
354 @deffn {Função} permutation (@var{n}, @var{r})
355 Retorna o número de permutações de @var{r} objectos
356 seleccionados de um conjunto de @var{n} objectos.
358 Para usar essa função escreva primeiramente @code{load("functs")}.
361 @c Adapted from ineq.usg ----------------------
362 @c THIS PACKAGE IS INTERESTING BUT THIS TEXT NEEDS WORK AND EXAMPLES
363 @subsection Package ineq
365 O pacote @code{ineq} contém regras de simplificação
372 @c a>=4; /* uma desigualdade exemplo */
373 @c (b>c)+%; /* adiciona uma segunda e estrita desigualdade */
374 @c 7*(x<y); /* multiplica por um número positivo */
375 @c -2*(x>=3*z); /* multiplica por um número negativo */
376 @c (1+a^2)*(1/(1+a^2)<=1); /* Maxima sabe que 1+a^2 > 0 */
377 @c assume(x>0)$ x*(2<3); /* assumindo x>0 */
378 @c a>=b; /* outra desigualdade */
379 @c 3+%; /* adiciona alguma coisa à desigualdade imediatamente acima */
380 @c %-3; /* retirando essa alguma coisa */
381 @c a>=c-b; /* ainda outra desigualdade */
382 @c b+%; /* adiciona b a ambos os lados da desigualdade */
383 @c %-c; /* subtrai c de ambos os lados */
384 @c -%; /* multiplica por by -1 */
385 @c (z-1)^2>-2*z; /* determining truth of assertion */
386 @c expand(%)+2*z; /* expand this and add 2*z to both sides */
391 Warning: Putting rules on '+' or '*' is inefficient, and may not work.
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 (%i2) a>=4; /* uma desigualdade exemplo */
401 (%i3) (b>c)+%; /* adiciona uma segunda e estrita desigualdade */
403 (%i4) 7*(x<y); /* multiplica por um número positivo */
405 (%i5) -2*(x>=3*z); /* multiplica por um número negativo */
407 (%i6) (1+a^2)*(1/(1+a^2)<=1); /* Maxima sabe que 1+a^2 > 0 */
410 (%i7) assume(x>0)$ x*(2<3); /* assumindo x>0 */
412 (%i8) a>=b; /* outa desigualdade */
414 (%i9) 3+%; /* adiciona alguma coisa à desigualdade imediatamente acima */
416 (%i10) %-3; /* retirando essa alguma coisa */
418 (%i11) a>=c-b; /* ainda outra desigualdade */
420 (%i12) b+%; /* adiciona b a ambos os lados da desigualdade */
422 (%i13) %-c; /* subtrai c de ambos os lados */
423 (%o13) - c + b + a >= 0
424 (%i14) -%; /* multiplica por -1 */
425 (%o14) c - b - a <= 0
426 (%i15) (z-1)^2>-2*z; /* determinando a verdade de uma assertiva */
428 (%o15) (z - 1) > - 2 z
429 (%i16) expand(%)+2*z; /* expandindo essa assertiva e adicionado 2*z a ambos os lados */
436 Seja cuidadoso com o uso dos parêntesis
437 em torno de desigualdades: quando o utilizador digita @code{(A > B) + (C = 5)} o
438 resltado é @code{A + C > B + 5}, mas @code{A > B + C = 5} é um erro de sintaxe,
439 e @code{(A > B + C) = 5} é alguma coisa completametne diferente.
441 Faça @code{disprule (all)} para ver uma lista completa
442 das definições de regras.
444 O utilizador será questionado se o Maxima for
445 incapaz de decidir o sinal de uma quantidade multiplicando uma desigualdade.
447 O mais comum recurso estranho é ilustrado por:
463 Outro problema é 0 vezes uma desigualdade; o padrão para isso
464 acontecer é 0 ter sido colocado à esquerda sozinho. Contudo, se
465 digitar @code{X*@var{some_inequality}} e Maxima perguntar sobre o sinal
466 de @code{X} e responder @code{zero} (ou @code{z}), o programa retorna
467 @code{X*@var{some_inequality}} e não utiliza a
468 informação que @code{X} é 0. Pode usar @code{ev (%, x:
469 0)} em casos semelhantes a esse; a base de dados irá somente ser usada
470 para propósitos de comparação em decisões, e não
471 para o propósito de avaliação de @code{X}.
473 O utilizador pode notar uma resposta lenta quando esse pacote é
474 disponibilizado para uso, como o simplificador é forçado
475 a examinar mais regras do precisaria sem esse pacote, então pode
476 desejar remover essas regras após fazer uso delas. Faça
477 @code{kill (rules)} para eliminar todas as regras (incluindo qualquer
478 regra que possa ter definido); ou pode ser mais selectivo
479 eliminando somente algumas delas; ou use @code{remrule} sobre uma regra
482 Note que se disponibilizar esse pacote para ser usado, após definir
483 suas próprias regras, irá sobrescrever as suas regras que possuirem
484 nomes identicos a nomes contidos nas regras do pacote. As regras no
485 pacote são: @code{*rule1}, ..., @code{*rule8}, @code{+rule1}, ...,
486 @code{+rule18}, e deve colocar o nome de regra entre aspas duplas
487 ao referir-se a eles, como em @code{remrule ("+", "+rule1")} para
488 especificamente remover a primeira regra sobre @code{"+"} ou
489 @code{disprule ("*rule2")} para mostrar a definição da
490 segunda regra multiplicativa.
492 @c lrats.usg: "lratsubst" and "fullratsubst" already in doc/info/Polynomials.texi
494 @c Adapted from rducon.usg ----------------------
495 @c THIS IS AN INTERESTING FUNCTION BUT THIS TEXT NEEDS WORK AND EXAMPLES
496 @subsection Package rducon
498 @deffn {Função} reduce_consts (@var{expr})
499 Substitui subexpressões constantes de @var{expr} com
500 construída com átomos constantes, gravando a definição de todas essas
501 constantes construídas na lista de equações @code{const_eqns}, e
502 retornando a expressão modificada @var{expr}. Essas partes de @var{expr} são constantes que
503 retornam @code{true} quando operadas por meio da função @code{constantp}. Consequêntemente,
504 antes de usar @code{reduce_consts}, se pode fazer
507 declare ([@var{objecto que vai receber a propriedade constante}], constant)$
510 para escolher a base de dados das quantidades constantes ocorrendo em suas
513 Se está a planear gerar saídas em Fortran após esses
514 cálculos simbólicos, uma das primeiras secções de
515 código pode ser o cálculo de todas as constantes. Para gerar esse
516 segmento de código, faça
519 map ('fortran, const_eqns)$
522 Variables como @code{const_eqns} que afectam @code{reduce_consts} são:
524 @code{const_prefix} (valor padrão: @code{xx}) é a sequência de caracteres usada para prefixar todos
525 os símbolos gerados por @code{reduce_consts} para representar subexpressões constantes.
527 @code{const_counter} (valor padrão: 1) é o índice inteiro usado para gerar símbolos
528 únicos para representar cada subexpressão constante emcontrada por @code{reduce_consts}.
530 @code{load ("rducon")} torna essa função disponível para uso.
531 @code{demo (rducon)} faz uma demonstração dessa função.
534 @c rncomb.usg: "rncombine" already in doc/info/Miscellaneous.texi
536 @c Adapted from scifac.usg ----------------------
537 @subsection Pacote scifac
539 @deffn {Função} gcfac (@var{expr})
540 @code{gcfac} função de factorização que tenta aplicar a mesma heurística que
541 cientístas aplicam em tentativas de fazer expressões extremamente simples. @code{gcfac} está limitada
542 a factorizações monomiais. Para um somatório, @code{gcfac} faz o seguinte:
546 Factores sobre os inteiros.
548 Coloca em evidência o maior expoente de termos ocorrendo como
549 coeficientes, independentemente da complexidade dos termos.
551 Usa (1) e (2) em factorizações de pares de termos adjascentes.
553 Repetidamente e recursivamente aplica essas técnicas até que
554 a expressão não mais mude.
557 O item (3) não necessáriamente faz uma tarefa óptima factorização
558 par a par devido à dificuldade combinatória natural de encontrar
559 qual de todas dos possíveis rearranjos de pares retorna o mais
560 compacto resultado de factorização de um par.
562 @code{load ("scifac")} torna essa função disponível para uso.
563 @code{demo (scifac)} faz uma demonstração dessa função.
566 @c Adapted from sqdnst.usg ----------------------
567 @c THIS FUNCTION IS INTERESTING BUT THIS TEXT NEEDS WORK. HOW DEEPLY CAN SQRT BE NESTED ??
568 @subsection Pacote sqdnst
570 @deffn {Função} sqrtdenest (@var{expr})
571 Desaninha @code{sqrt} de simples, numérico, bin@^omios de raízes irracionais de números racionais , onde for possível. E.g.
575 @c sqrt(sqrt(3)/2+1)/sqrt(11*sqrt(2)-12);
579 (%i1) load ("sqdnst")$
580 (%i2) sqrt(sqrt(3)/2+1)/sqrt(11*sqrt(2)-12);
584 (%o2) ---------------------
585 sqrt(11 sqrt(2) - 12)
595 Algumas vezes isso ajuda na hora de aplicar @code{sqrtdenest} mais que uma vez, sobre coisas como
596 @code{(19601-13860 sqrt(2))^(7/4)}.
598 @code{load ("sqdnst")} Torna essa função disponível para uso.
601 @c stopex.usg: "expandwrt", "expandwrt_denom", and "expandwrt_factored" already in doc/info/Simplification.texi