In documentation for lreduce and rreduce, supply second argument as an explicit list
[maxima.git] / doc / info / pt_BR / Simplification.texi.update
blobfbe732874e2f29e121aefbb04c70aee3e6a3b687
1 @c
2 @c versao pt_BR baseada no md5sum abaixo:
3 @c a5691c7e174af39fa0fc1f72e6697045  Simplification.texi
4 @c
5 @menu
6 * Functions and Variables for Simplification::  
7 @end menu
9 @c -----------------------------------------------------------------------------
10 @node Functions and Variables for Simplification,  , Simplification, Simplification
11 @section Functions and Variables for Simplification
12 @c -----------------------------------------------------------------------------
14 @c -----------------------------------------------------------------------------
15 @anchor{additive}
16 @defvr {Propriedade} additive
18 Se @code{declare(f,additive)} tiver sido executado, ent@~{a}o:
20 (1) Se @code{f} tiver uma @'{u}nica vari@'{a}vel independente, sempre que o simplificador encontrar @code{f}
21 aplicada a uma soma, @code{f} ir@'{a} ser distribu@'{i}da sobre aquela soma.  I.e.
22 @code{f(y+x)} ir@'{a} simplificar para @code{f(y)+f(x)}.
24 (2) Se @code{f} for uma fun@,{c}@~{a}o de 2 ou mais argumentos, aditividade @'{e} definida como
25 aditividade no primeiro argumento a @code{f}, como no caso de @code{sum} ou
26 @code{integrate}, i.e.  @code{f(h(x)+g(x),x)} ir@'{a} simplificar para
27 @code{f(h(x),x)+f(g(x),x)}.  Essa simplifica@,{c}@~{a}o n@~{a}o ocorre quando @code{f} for
28 aplicada a express@~{o}es da forma @code{sum(x[i],i,lower-limit,upper-limit)}.
30 Exemplo:
32 @c ===beg===
33 @c F3 (a + b + c);
34 @c declare (F3, additive);
35 @c F3 (a + b + c);
36 @c ===end===
37 @example
38 (%i1) F3 (a + b + c);
39 (%o1)                     F3(c + b + a)
40 (%i2) declare (F3, additive);
41 (%o2)                         done
42 (%i3) F3 (a + b + c);
43 (%o3)                 F3(c) + F3(b) + F3(a)
44 @end example
46 @opencatbox
47 @category{Operadores} @category{Declara@,{c}@~{o}es e infer@^{e}ncias}
48 @closecatbox
49 @end defvr
51 @c -----------------------------------------------------------------------------
52 @anchor{antisymmetric}
53 @defvr {Propriedade} antisymmetric
55 Se @code{declare(h,antisymmetric)} for executado, isso diz ao simplificador que
56 @code{h} @'{e} antisim@'{e}trica.  E.g.  @code{h(x,z,y)} ir@'{a} simplificar para 
57 @code{- h(x, y, z)}.  Isto @'{e}, ir@'{a} fornecer (-1)^n vezes o resultado fornecido por
58 @code{symmetric} ou por @code{commutative}, onde @var{n} @'{e} o n@'{u}mero de trocas
59 de dois argumentos necess@'{a}rias para converter @code{h(x,z,y)} em @code{- h(x, y, z)}.
61 Exemplos:
63 @c ===beg===
64 @c S (b, a);
65 @c declare (S, symmetric);
66 @c S (b, a);
67 @c S (a, c, e, d, b);
68 @c T (b, a);
69 @c declare (T, antisymmetric);
70 @c T (b, a);
71 @c T (a, c, e, d, b);
72 @c ===end===
73 @example
74 (%i1) S (b, a);
75 (%o1)                        S(b, a)
76 (%i2) declare (S, symmetric);
77 (%o2)                         done
78 (%i3) S (b, a);
79 (%o3)                        S(a, b)
80 (%i4) S (a, c, e, d, b);
81 (%o4)                   S(a, b, c, d, e)
82 (%i5) T (b, a);
83 (%o5)                        T(b, a)
84 (%i6) declare (T, antisymmetric);
85 (%o6)                         done
86 (%i7) T (b, a);
87 (%o7)                       - T(a, b)
88 (%i8) T (a, c, e, d, b);
89 (%o8)                   T(a, b, c, d, e)
90 @end example
92 @opencatbox
93 @category{Operadores} @category{Declara@,{c}@~{o}es e infer@^{e}ncias}
94 @closecatbox
95 @end defvr
97 @c -----------------------------------------------------------------------------
98 @deffn {Fun@,{c}@~{a}o} combine (@var{expr})
100 Simplifica a soma @var{expr} combinando termos com o mesmo
101 denominador em um termo simples.
103 Exemplo:
105 @c ===beg===
106 @c 1*f/2*b + 2*c/3*a + 3*f/4*b +c/5*b*a;
107 @c combine (%);
108 @c ===end===
109 @example
110 (%i1) 1*f/2*b + 2*c/3*a + 3*f/4*b +c/5*b*a;
111                              5 b f   a b c   2 a c
112 (%o1)                        ----- + ----- + -----
113                                4       5       3
114 (%i2) combine (%);
115                          75 b f + 4 (3 a b c + 10 a c)
116 (%o2)                    -----------------------------
117                                       60
118 @end example
120 @opencatbox
121 @category{Express@~{o}es}
122 @closecatbox
123 @end deffn
125 @c -----------------------------------------------------------------------------
126 @anchor{commutative}
127 @defvr {Propriedade} commutative
129 Se @code{declare(h, commutative)} for realizado, diz ao simplificador que
130 @code{h} @'{e} uma fun@,{c}@~{a}o comutativa.  E.g.  @code{h(x, z, y)} ir@'{a} simplificar para
131 @code{h(x, y, z)}.  @'{E} o mesmo que @code{symmetric}.
133 Exemplo:
135 @c ===beg===
136 @c S (b, a);
137 @c S (a, b) + S (b, a);
138 @c declare (S, commutative);
139 @c S (b, a);
140 @c S (a, b) + S (b, a);
141 @c S (a, c, e, d, b);
142 @c ===end===
143 @example
144 (%i1) S (b, a);
145 (%o1)                               S(b, a)
146 (%i2) S (a, b) + S (b, a);
147 (%o2)                          S(b, a) + S(a, b)
148 (%i3) declare (S, commutative);
149 (%o3)                                done
150 (%i4) S (b, a);
151 (%o4)                               S(a, b)
152 (%i5) S (a, b) + S (b, a);
153 (%o5)                              2 S(a, b)
154 (%i6) S (a, c, e, d, b);
155 (%o6)                          S(a, b, c, d, e)
156 @end example
158 @opencatbox
159 @category{Operadores} @category{Declara@,{c}@~{o}es e infer@^{e}ncias}
160 @closecatbox
161 @end defvr
163 @c NEEDS CLARIFICATION, EXAMPLES
165 @c -----------------------------------------------------------------------------
166 @anchor{demoivre}
167 @deffn  {Fun@,{c}@~{a}o} demoivre (@var{expr})
168 @deffnx {Vari@'{a}vel de op@,{c}@~{a}o} demoivre
170 O comando @code{demoivre (expr)} converte uma express@~{a}o
171 sem ajustar a vari@'{a}vel global @code{demoivre}.
173 Quando a vari@'{a}vel @code{demoivre} for @code{true}, exponenciais complexar s@~{a}o
174 convertidas em express@~{o}es equivalentes em termos das fun@,{c}@~{o}es circulares:
175 @code{exp (a + b*%i)} simplifica para @code{%e^a * (cos(b) + %i*sin(b))}
176 se @code{b} for livre de @code{%i}.  @code{a} e @code{b} n@~{a}o s@~{a}o expandidos.
178 O valor padr@~{a}o de @code{demoivre} @'{e} @code{false}.
180 A fun@,{c}@~{a}o @code{exponentialize} converte fun@,{c}@~{o}es hiperb@'{o}licas e circulares na forma
181 exponencial.  As vari@'{a}veis de op@,{c}@~{a}o @code{demoivre} e @code{exponentialize} n@~{a}o podem ambas serem verdadeiras ao
182 mesmo tempo.
184 @opencatbox
185 @category{Vari@'{a}veis complexas} @category{Trigonometric functions} @category{Hyperbolic functions}
186 @closecatbox
187 @end deffn
189 @c NEEDS WORK
191 @c -----------------------------------------------------------------------------
192 @anchor{function_distrib}
193 @deffn {Fun@,{c}@~{a}o} distrib (@var{expr})
195 Distribui sobre momas e produtos.  Difere de @code{expand} na medida em que somente
196 trabalha no n@'{i}vel mais alto da express@~{a}o, i.e., n@~{a}o @'{e} recursiva e @'{e} mais
197 r@'{a}pida que a @code{expand}.  Difere da @code{multthru} na medida que expande
198 todas as somas no n@'{i}vel mais alto.
200 Exemplos:
202 @example
203 (%i1) distrib ((a+b) * (c+d));
204 (%o1)                 b d + a d + b c + a c
205 (%i2) multthru ((a+b) * (c+d));
206 (%o2)                 (b + a) d + (b + a) c
207 (%i3) distrib (1/((a+b) * (c+d)));
208                                 1
209 (%o3)                    ---------------
210                          (b + a) (d + c)
211 (%i4) expand (1/((a+b) * (c+d)), 1, 0);
212                                 1
213 (%o4)                 ---------------------
214                       b d + a d + b c + a c
215 @end example
217 @opencatbox
218 @category{Express@~{o}es}
219 @closecatbox
220 @end deffn
222 @c -----------------------------------------------------------------------------
223 @anchor{distribute_over}
224 @defvr {Vari@'{a}vel de op@,{c}@~{a}o} distribute_over
225 Valor padr@~{a}o: @code{true}
227 A vari@'{a}vel de op@,{c}@~{a}o @code{distribute_over} controla a distributividade de fun@,{c}@~{o}es sobre cole@,{c}@~{o}es como listas, 
228 matrizes, e equa@,{c}@~{o}es.  No momento somente algumas fun@,{c}@~{o}es do m@'{a}xima possuem essa
229 propriedade.  @'{E} poss@'{i}vel buscar por essa propriedade com o comando
230 @code{properties}.
232 A distributividade de fun@,{c}@~{o}es @'{e} desligada, ao se ajustar @code{distribute_over} 
233 para o valor @code{false}.
235 Exemplos:
237 A fun@,{c}@~{a}o @code{sin} @'{e} distributiva sobre uma lista:
239 @c ===beg===
240 @c sin([x,1,1.0]);
241 @c ===end===
242 @example
243 (%i1) sin([x,1,1.0]);
244 (%o1)                 [sin(x), sin(1), .8414709848078965]
245 @end example
247 A @code{mod} @'{e} uma fun@,{c}@~{a}o com dois argumentos que @'{e} distributiva sobre listas.  Distributividade sobre 
248 lista sobre lista @'{e} tamb@'{e}m poss@'{i}vel:
250 @c ===beg===
251 @c mod([x,11,2*a],10);
252 @c mod([[x,y,z],11,2*a],10);
253 @c ===end===
254 @example
255 (%i2) mod([x,11,2*a],10);
256 (%o2)                    [mod(x, 10), 1, 2 mod(a, 5)]
257 (%i3) mod([[x,y,z],11,2*a],10);
258 (%o3)       [[mod(x, 10), mod(y, 10), mod(z, 10)], 1, 2 mod(a, 5)]
259 @end example
261 A distributividade da fun@,{c}@~{a}o @code{floor} sobre uma matriz e uma equa@,{c}@~{a}o:
263 @c ===beg===
264 @c floor(matrix([a,b],[c,d]));
265 @c floor(a=b);
266 @c ===end===
267 @example
268 (%i4) floor(matrix([a,b],[c,d]));
269                             [ floor(a)  floor(b) ]
270 (%o4)                       [                    ]
271                             [ floor(c)  floor(d) ]
272 (%i5) floor(a=b);
273 (%o5)                         floor(a) = floor(b)
274 @end example
276 Fun@,{c}@~{o}es com mais que um argumento distribuem sobre quaisquer dos argumentos ou sobre todos os
277 argumentos:
279 @c ===beg===
280 @c expintegral_e([1,2],[x,y]);
281 @c ===end===
282 @example
283 (%i6) expintegral_e([1,2],[x,y]);
284 (%o6) [[expintegral_e(1, x), expintegral_e(1, y)], 
285        [expintegral_e(2, x), expintegral_e(2, y)]]
286 @end example
288 Verificar se uma fun@,{c}@~{a}o tem a propriedade @code{distribute_over}:
290 @c ===beg===
291 @c properties(abs);
292 @c ===end===
293 @example
294 (%i7) properties(abs);
295 (%o7) [integral, distributes over bags, noun, rule, gradef]
296 @end example
298 O mapeamento de fun@,{c}@~{o}es @'{e} desligado, ao se ajustar @code{distribute_over} 
299 para o valor @code{false}.
301 @c ===beg===
302 @c distribute_over;
303 @c sin([x,1,1.0]);
304 @c distribute_over : not distribute_over;
305 @c ===end===
306 @example
307 (%i1) distribute_over;
308 (%o1)                                true
309 (%i2) sin([x,1,1.0]);
310 (%o2)                [sin(x), sin(1), 0.8414709848078965]
311 (%i3) distribute_over : not distribute_over;
312 (%o3)                                false
313 (%i4) sin([x,1,1.0]);
314 (%o4)                          sin([x, 1, 1.0])
315 (%i5)
316 @end example
318 @opencatbox
319 @category{Simplification flags and variables}
320 @closecatbox
321 @end defvr
323 @c -----------------------------------------------------------------------------
324 @anchor{domain}
325 @defvr {Vari@'{a}vel de op@,{c}@~{a}o} domain
326 Valor padr@~{a}o: @code{real}
328 Quando @code{domain} for ajustado para @code{complex}, @code{sqrt (x^2)} ir@'{a} retornar
329 @code{sqrt (x^2)} ao inv@'{e}s de @code{abs(x)}.
331 @c PRESERVE EDITORIAL COMMENT -- MAY HAVE SOME SIGNIFICANCE NOT YET UNDERSTOOD !!!
332 @c The notion of a "domain" of simplification is still in its infancy,
333 @c and controls little more than this at the moment.
335 @opencatbox
336 @category{Simplification flags and variables}
337 @closecatbox
338 @end defvr
340 @c -----------------------------------------------------------------------------
341 @anchor{evenfun}
342 @anchor{oddfun}
343 @defvr  {Propriedade} evenfun
344 @defvrx {Propriedade} oddfun
346 O comando @code{declare(f, evenfun)} ou o comando @code{declare(f, oddfun)} diz ao Maxima para reconhecer
347 a fun@,{c}@~{a}o @code{f} como uma fun@,{c}@~{a}o par ou uma fun@,{c}@~{a}o @'{i}mpar.
349 Exemplos:
351 @example
352 (%i1) o (- x) + o (x);
353 (%o1)                     o(x) + o(- x)
354 (%i2) declare (o, oddfun);
355 (%o2)                         done
356 (%i3) o (- x) + o (x);
357 (%o3)                           0
358 (%i4) e (- x) - e (x);
359 (%o4)                     e(- x) - e(x)
360 (%i5) declare (e, evenfun);
361 (%o5)                         done
362 (%i6) e (- x) - e (x);
363 (%o6)                           0
364 @end example
365 @end defvr
367 @c -----------------------------------------------------------------------------
368 @anchor{expand}
369 @deffn  {Fun@,{c}@~{a}o} expand (@var{expr})
370 @deffnx {Fun@,{c}@~{a}o} expand (@var{expr}, @var{p}, @var{n})
372 Expande a express@~{a}o @var{expr}.
373 Produto de somas @footnote{Nota do tradutor: @math{(a+b)(c+d)}.} e somas exponeciadas @footnote{Nota do tradutor: @math{(a+b)^x}.} s@~{a}o
374 expandidas, numeradores de express@~{o}es racionais que forem somas s@~{a}o
375 quebrados em seus termos respectivos, e multiplica@,{c}@~{a}o (comutativa
376 e n@~{a}o comutativa) s@~{a}o distribu@'{i}das sobre a adi@,{c}@~{a}o em todos os n@'{i}veis de
377 @var{expr}.
379 Para polin@^{o}mios se deve usar normalmente @code{ratexpand} que usa um
380 algoritmo mais eficiente.
382 As vari@'{a}veis de op@,{c}@~{a}o @code{maxnegex} e @code{maxposex} controlam o expoente m@'{a}ximo negativo o
383 expoente m@'{a}ximo positivo, respectivamente, que ir@'{a} expandir.
385 O comando @code{expand (@var{expr}, @var{p}, @var{n})} expande @var{expr}, 
386 usando @var{p} para @code{maxposex} e @var{n} para @code{maxnegex}.
387 @'{E} @'{u}til com o objetivo de expandir partes mas n@~{a}o toda express@~{a}o.
389 A vari@'{a}vel de op@,{c}@~{a}o @code{expon} - o expoente da maior pot@^{e}ncia com expoente negativo que @'{e}
390 automaticamente expandida (independente de chamadas a @code{expand}) @footnote{Nota do tradutor: essa expans@~{a}o @'{e} a que ocorre imediatamente quando voc@^{e} encerra com um enter a entrada de dados nos %i1, %i2, ..., %in.}.  Por exemplo
391 se @code{expon} for 4 ent@~{a}o @code{(x+1)^(-5)} n@~{a}o ser@'{a} automaticamente expandido.
393 A vari@'{a}vel de op@,{c}@~{a}o @code{expop} - o maior expoente positivo que @'{e} automaticamente expandido @footnote{Nota do tradutor: @'{e} o mesmo caso da @code{expon}.}.
394 A express@~{a}o @code{(x+1)^3}, ao ser digitada, ir@'{a} ser automaticamente expandida somente se
395 @code{expop} for maior que ou igual a 3.  Se for desejado ter
396 @code{(x+1)^n} expandido onde @code{n} @'{e} maior que @code{expop} ent@~{a}o
397 a execu@,{c}@~{a}o de @code{expand ((x+1)^n)} funcionar@'{a} somente se @code{maxposex} n@~{a}o for
398 menor que @code{n}.
400 O comando @code{expand(expr, 0, 0)} faz com que ocorra uma resimplifica@,{c}@~{a}o de @code{expr}.  A @code{expr}
401 n@~{a}o @'{e} reavaliada.  Diferentemente de @code{ev(expr, noeval)} uma representa@,{c}@~{a}o
402 especial (e. g. uma CRE @footnote{Nota do tradutor: em Introdu@,{c}@~{a}o a Polin@^{o}mios existe uma boa explana@,{c}@~{a}o sobre o que @'{e} uma CRE.}) @'{e} removida.  Veja tamb@'{e}m @code{ev}.
404 O sinalizador @code{expand} usado com @code{ev} faz com que ocorra expans@~{a}o.
406 O arquivo @file{share/simplification/facexp.mac}
407 @c I should really use a macro which expands to something like
408 @c @uref{file://...,,simplification/facexp.mac}.  But texi2html
409 @c currently supports @uref only with one argument.
410 @c Worse, the `file:' scheme is OS and browser dependent.
411 cont@'{e}m muitas fun@,{c}@~{o}es relacionadas (particularmente @code{facsum},
412 @code{factorfacsum} e @code{collectterms}, que s@~{a}o chamadas automaticamente) e vari@'{a}veis
413 (@code{nextlayerfactor} e @code{facsum_combine}) que fornecem ao usu@'{a}rio com
414 a habilidade para estruturar express@~{o}es por expans@~{a}o controlada.
415 @c MERGE share/simplification/facexp.usg INTO THIS FILE OR CREATE NEW FILE facexp.texi
416 Descri@,{c}@~{o}es breves de fun@,{c}@~{o}es est@~{a}o dispon@'{i}veis em @file{simplification/facexp.usg}.
417 Uma demonsta@,{c}@~{a}o de como usar est@'{a} dispon@'{i}vel fazendo @code{demo("facexp")}.
419 Exemplos:
421 @c ===beg===
422 @c expr:(x+1)^2*(y+1)^3;
423 @c expand(expr);
424 @c expand(expr,2);
425 @c expr:(x+1)^-2*(y+1)^3;
426 @c expand(expr);
427 @c expand(expr,2,2);
428 @c ===end===
429 @example
430 (%i1) expr:(x+1)^2*(y+1)^3;
431                                2        3
432 (%o1)                   (x + 1)  (y + 1)
433 (%i2) expand(expr);
434        2  3        3    3      2  2        2      2      2
435 (%o2) x  y  + 2 x y  + y  + 3 x  y  + 6 x y  + 3 y  + 3 x  y
436                                                       2
437                                      + 6 x y + 3 y + x  + 2 x + 1
438 (%i3) expand(expr,2);
439                2        3              3          3
440 (%o3)         x  (y + 1)  + 2 x (y + 1)  + (y + 1)
441 (%i4) expr:(x+1)^-2*(y+1)^3;
442                                    3
443                             (y + 1)
444 (%o4)                       --------
445                                    2
446                             (x + 1)
447 (%i5) expand(expr);
448             3               2
449            y             3 y            3 y             1
450 (%o5) ------------ + ------------ + ------------ + ------------
451        2              2              2              2
452       x  + 2 x + 1   x  + 2 x + 1   x  + 2 x + 1   x  + 2 x + 1
453 (%i6) expand(expr,2,2);
454 @group
455                                    3
456                             (y + 1)
457 (%o6)                     ------------
458                            2
459                           x  + 2 x + 1
460 @end group
461 @end example
463 Resimplificar uma express@~{a}o sem expans@~{a}o:
465 @c ===beg===
466 @c expr:(1+x)^2*sin(x);
467 @c exponentialize:true;
468 @c expand(expr,0,0);
469 @c ===end===
470 @example
471 (%i7) expr:(1+x)^2*sin(x);
472                                        2
473 (%o7)                           (x + 1)  sin(x)
474 (%i8) exponentialize:true;
475 (%o8)                                true
476 (%i9) expand(expr,0,0);
477                                    2    %i x     - %i x
478                          %i (x + 1)  (%e     - %e      )
479 (%o9)                  - -------------------------------
480                                         2
481 @end example
483 @opencatbox
484 @category{Express@~{o}es}
485 @closecatbox
486 @end deffn
488 @c NEEDS EXAMPLES
490 @c -----------------------------------------------------------------------------
491 @anchor{expandwrt}
492 @deffn {Fun@,{c}@~{a}o} expandwrt (@var{expr}, @var{x_1}, @dots{}, @var{x_n})
494 Expande express@~{o}es @code{expr} com rela@,{c}@~{a}o @`{a}s 
495 vari@'{a}veis @var{x_1}, @dots{}, @var{x_n}.
496 Todos os produtos envolvendo as vari@'{a}veis aparecem explicitamente.  A forma retornada
497 ir@'{a} ser livre de produtos de somas que n@~{a}o forem livreas das
498 vari@'{a}veis.  As @var{x_1}, @dots{}, @var{x_n}
499 podem ser vari@'{a}veis, operadores, ou express@~{o}es.
501 Por padr@~{a}o, denominadores n@~{a}o s@~{a}o expandidos, mas isso pode ser controlado por
502 meio do comutador @code{expandwrt_denom}.
504 Essa fun@,{c}@~{a}o @'{e} chamada automaticamente a partir de
505 @file{simplification/stopex.mac}.
507 @opencatbox
508 @category{Express@~{o}es}
509 @closecatbox
510 @end deffn
512 @c -----------------------------------------------------------------------------
513 @anchor{expandwert_denom}
514 @defvr {Vari@'{a}vel de op@,{c}@~{a}o} expandwrt_denom
515 Valor padr@~{a}o: @code{false}
517 A vari@'{a}vel de op@,{c}@~{a}o @code{expandwrt_denom} controla o tratamento de express@~{o}es
518 racionais por @code{expandwrt}.  Se @code{true}, ambos o numerador e o
519 denominador da express@~{a}o ir@~{a}o ser expandidos conforme os
520 argumentos de @code{expandwrt}, mas se @code{expandwrt_denom} for @code{false},
521 ent@~{a}o somente o numerador ir@'{a} ser expandido usando @code{expandwrt}.
523 @opencatbox
524 @category{Express@~{o}es}
525 @closecatbox
526 @end defvr
528 @c NEEDS A STAND-ALONE DESCRIPTION (NOT "IS SIMILAR TO")
529 @c NEEDS EXAMPLES
531 @c -----------------------------------------------------------------------------
532 @anchor{expandwrt_factored}
533 @deffn {Fun@,{c}@~{a}o} expandwrt_factored (@var{expr}, @var{x_1}, @dots{}, @var{x_n})
535 @'{E} similar a @code{expandwrt}, mas trata express@~{o}es que s@~{a}o produtos
536 um pouco diferentemente.  A fun@,{c}@~{a}o @code{expandwrt_factored} expande somente os fatores de
537 @code{expr} que possuem as vari@'{a}veis @var{x_1}, @dots{}, @var{x_n}.
539 @c NOT SURE WHY WE SHOULD MENTION THIS HERE
540 Essa fun@,{c}@~{a}o @'{e} chamada automaticamente a partir de @file{simplification/stopex.mac}.
542 @opencatbox
543 @category{Express@~{o}es}
544 @closecatbox
545 @end deffn
547 @c -----------------------------------------------------------------------------
548 @anchor{expon}
549 @defvr {Vari@'{a}vel de op@,{c}@~{a}o} expon
550 Valor padr@~{a}o: 0
552 A vari@'{a}vel de op@,{c}@~{a}o @code{expon} @'{e} o expoente da maior pot@^{e}ncia de expoente negativo que
553 @'{e} automaticamente expandida (independente de chamadas a @code{expand}).  Por
554 exemplo, se @code{expon} for 4 ent@~{a}o @code{(x+1)^(-5)} n@~{a}o ir@'{a} ser automaticamente
555 expandido.
557 @opencatbox
558 @category{Express@~{o}es}
559 @closecatbox
560 @end defvr
562 @c -----------------------------------------------------------------------------
563 @anchor{exponentialize}
564 @deffn  {Fun@,{c}@~{a}o} exponentialize (@var{expr})
565 @deffnx {Vari@'{a}vel de op@,{c}@~{a}o} exponentialize
567 A fun@,{c}@~{a}o @code{exponentialize (expr)} converte 
568 fun@,{c}@~{o}es circulares e hiperb@'{o}licas em @var{expr} para exponenciais,
569 sem ajustar a vari@'{a}vel global @code{exponentialize}.
571 Quando a vari@'{a}vel de op@,{c}@~{a}o @code{exponentialize} for @code{true},
572 todas as fun@,{c}@~{o}es circulares e hiperb@'{o}licas s@~{a}o convertidas para a forma exponencial.
573 O valor padr@~{a}o de @code{exponentialize} @'{e} @code{false}.
575 A fun@,{c}@~{a}o @code{demoivre} converts complex exponentials into circular functions.
576 As vari@'{a}veis de op@,{c}@~{a}o @code{exponentialize} e @code{demoivre} n@~{a}o podem
577 ambas serem @code{true} ao mesmo tempo.
579 @opencatbox
580 @category{Vari@'{a}veis complexas} @category{Trigonometric functions} @category{Hyperbolic functions}
581 @closecatbox
582 @end deffn
584 @c NEEDS CLARIFICATION
585 @c NEEDS EXAMPLES
587 @c -----------------------------------------------------------------------------
588 @anchor{expop}
589 @defvr {Vari@'{a}vel de op@,{c}@~{a}o} expop
590 Valor padr@~{a}o: 0
592 A vari@'{a}vel de op@,{c}@~{a}o @code{expop} @'{e} o maior expoente positivo que @'{e} automaticamente expandido.
593 Dessa forma @code{(x + 1)^3}, quando digitado, ir@'{a} ser automaticamente expandido somente se
594 @code{expop} for maior que ou igual a 3.  Se for desejado ter
595 @code{(x + 1)^n} expandido onde @code{n} @'{e} maior que @code{expop} ent@~{a}o
596 executando @code{expand ((x + 1)^n)} ir@'{a} funcionar somente se @code{maxposex} n@~{a}o for
597 menor que n.
599 @opencatbox
600 @category{Express@~{o}es}
601 @closecatbox
602 @end defvr
604 @c NEEDS CLARIFICATION, EXAMPLES
606 @c -----------------------------------------------------------------------------
607 @anchor{lassociative}
608 @defvr {Propriedade} lassociative
610 O comando @code{declare (g, lassociative)} diz ao simplificador do Maxima que @code{g} @'{e}
611 associativa @`{a} esquerda.  E.g., @code{g (g (a, b), g (c, d))} ir@'{a} simplificar para
612 @code{g (g (g (a, b), c), d)}.
614 @opencatbox
615 @category{Declara@,{c}@~{o}es e infer@^{e}ncias} @category{Operadores} @category{Simplification}
616 @closecatbox
617 @end defvr
619 @c NEEDS CLARIFICATION, EXAMPLES
620 @c WHAT'S UP WITH THE QUOTE MARKS ??
622 @c -----------------------------------------------------------------------------
623 @anchor{linear}
624 @defvr {Propriedade} linear
626 Uma das propriedades de operador do Maxima.  Para uma fun@,{c}@~{a}o @code{f} de uma @'{u}nica vari@'{a}vel
627 declarada linear, "expans@~{a}o" de @code{f(x + y)} retorna @code{f(x) + f(y)} e
628 @code{f(a*x)} retorna @code{a*f(x)} acontecendo
629 onde @code{a} tenha sido declarado "constant".  Para fun@,{c}@~{o}es de dois ou mais argumentos,
630 "linearidade" @'{e} definida para se comportar como em @code{sum} ou @code{integrate},
631 i.e., @code{f (a*x + b, x)} retorna @code{a*f(x,x) + b*f(1,x)}
632 para @code{a} e @code{b} independente de @code{x}.
634 Exemplo:
636 @c ===beg===
637 @c declare (f, linear);
638 @c f(x+y);
639 @c declare (a, constant);
640 @c f(a*x);
641 @c ===end===
642 @example
643 (%i1) declare (f, linear);
644 (%o1)                                done
645 (%i2) f(x+y);
646 (%o2)                             f(y) + f(x)
647 (%i3) declare (a, constant);
648 (%o3)                                done
649 (%i4) f(a*x);
650 (%o4)                               a f(x)
651 @end example
653 A propriedade @code{linear} @'{e} equivalente a @code{additive} e @code{outative}.
654 Veja tamb@'{e}m @code{opproperties}.
656 Exemplo:
658 @c ===beg===
659 @c 'sum (F(k) + G(k), k, 1, inf);
660 @c declare (nounify (sum), linear);
661 @c 'sum (F(k) + G(k), k, 1, inf);
662 @c ===end===
663 @example
664 (%i1) 'sum (F(k) + G(k), k, 1, inf);
665                        inf
666                        ====
667                        \
668 (%o1)                   >    (G(k) + F(k))
669                        /
670                        ====
671                        k = 1
672 (%i2) declare (nounify (sum), linear);
673 (%o2)                         done
674 (%i3) 'sum (F(k) + G(k), k, 1, inf);
675 @group
676                      inf          inf
677                      ====         ====
678                      \            \
679 (%o3)                 >    G(k) +  >    F(k)
680                      /            /
681                      ====         ====
682                      k = 1        k = 1
683 @end group
684 @end example
686 @opencatbox
687 @category{Declara@,{c}@~{o}es e infer@^{e}ncias} @category{Operadores} @category{Simplification}
688 @closecatbox
689 @end defvr
691 @c NEEDS EXAMPLES
693 @c -----------------------------------------------------------------------------
694 @anchor{maxnegex}
695 @defvr {Vari@'{a}vel de op@,{c}@~{a}o} maxnegex
696 Valor padr@~{a}o: 1000
698 A vari@'{a}vel de op@,{c}@~{a}o @code{maxnegex} @'{e} o maior expoente negativo que ser@'{a}
699 expandido pelo comando @code{expand} (veja tamb@'{e}m @code{maxposex}).
701 @opencatbox
702 @category{Express@~{o}es}
703 @closecatbox
704 @end defvr
706 @c NEEDS EXAMPLES
708 @c -----------------------------------------------------------------------------
709 @anchor{maxposex}
710 @defvr {Vari@'{a}vel de op@,{c}@~{a}o} maxposex
711 Valor padr@~{a}o: 1000
713 A vari@'{a}vel de op@,{c}@~{a}o @code{maxposex} @'{e} o maior expoente que ser@'{a}
714 expandido com o comando @code{expand} (veja tamb@'{e}m @code{maxnegex}).
716 @opencatbox
717 @category{Express@~{o}es}
718 @closecatbox
719 @end defvr
721 @c NEEDS EXAMPLES
723 @c -----------------------------------------------------------------------------
724 @anchor{multiplicative}
725 @defvr {Propriedade} multiplicative
727 O comando @code{declare(f, multiplicative)} diz ao simplificador do Maxima que @code{f}
728 @'{e} multiplicativa.
730 @enumerate
731 @item
732 Se @code{f} for uma fun@,{c}@~{a}o de uma @'{u}nica vari@'{a}vel, sempre que o simplificador encontra @code{f} aplicada
733 a um produto, @code{f} distribui-se sobre aquele produto.  E.g., @code{f(x*y)}
734 simplifica para @code{f(x)*f(y)}.
735 @item
736 Se @code{f} for uma fun@,{c}@~{a}o de dois ou mais argumentos, a multiplicatividade @'{e}
737 definida como multiplicatividade no primeiro argumento para @code{f}, e.g.,
738 @code{f (g(x) * h(x), x)} simplifies to @code{f (g(x) ,x) * f (h(x), x)}.
739 @end enumerate
741 Essa simplifica@,{c}@~{a}o n@~{a}o ocorre quando @code{f} for aplicada a express@~{o}es da
742 forma @code{product (x[i], i, m, n)}.
744 Exemplo:
746 @c ===beg===
747 @c F2 (a * b * c);
748 @c declare (F2, multiplicative);
749 @c F2 (a * b * c);
750 @c ===end===
751 @example
752 (%i1) F2 (a * b * c);
753 (%o1)                       F2(a b c)
754 (%i2) declare (F2, multiplicative);
755 (%o2)                         done
756 (%i3) F2 (a * b * c);
757 (%o3)                   F2(a) F2(b) F2(c)
758 @end example
760 @opencatbox
761 @category{Declara@,{c}@~{o}es e infer@^{e}ncias} @category{Express@~{o}es} @category{Simplification}
762 @closecatbox
763 @end defvr
765 @c NEEDS WORK
767 @c -----------------------------------------------------------------------------
768 @anchor{multthru}
769 @deffn  {Fun@,{c}@~{a}o} multthru (@var{expr})
770 @deffnx {Fun@,{c}@~{a}o} multthru (@var{expr_1}, @var{expr_2})
772 Multiplica um fator (que pode ser uma soma) de @var{expr} pelos outros fatores
773 de @var{expr}.  Isto @'{e}, @var{expr} @'{e} @code{@var{f_1} @var{f_2} ... @var{f_n}}
774 onde ao menos um fator, digamos @var{f_i}, @'{e} uma soma de termos.  Cada termo daquela
775 soma @'{e} multiplicado pelos outros fatores no produto.  (Explicitamente todos os
776 fatores exceto @var{f_i}).  A fun@,{c}@~{a}o @code{multthru} n@~{a}o expande somas exponenciadas.
777 Essa fun@,{c}@~{a}o @'{e} o caminho mais r@'{a}pido para distribuir produtos (comutativos ou
778 n@~{a}o) sobre somas.  Uma vez que quocientes s@~{a}o representados como produtos
779 @code{multthru} pode ser usada para dividir somas por produtos tamb@'{e}m.
781 O comando @code{multthru (@var{expr_1}, @var{expr_2})} multiplica cada termo em
782 @var{expr_2} (que deve ser uma soma ou uma equa@,{c}@~{a}o) por @var{expr_1}.  Se
783 @var{expr_1} n@~{a}o for uma soma ent@~{a}o essa forma @'{e} equivalente a
784 @code{multthru (@var{expr_1}*@var{expr_2})}.
786 @example
787 (%i1) x/(x-y)^2 - 1/(x-y) - f(x)/(x-y)^3;
788                       1        x         f(x)
789 (%o1)             - ----- + -------- - --------
790                     x - y          2          3
791                             (x - y)    (x - y)
792 (%i2) multthru ((x-y)^3, %);
793                            2
794 (%o2)             - (x - y)  + x (x - y) - f(x)
795 (%i3) ratexpand (%);
796                            2
797 (%o3)                   - y  + x y - f(x)
798 (%i4) ((a+b)^10*s^2 + 2*a*b*s + (a*b)^2)/(a*b*s^2);
799                         10  2              2  2
800                  (b + a)   s  + 2 a b s + a  b
801 (%o4)            ------------------------------
802                                   2
803                              a b s
804 (%i5) multthru (%);  /* note that this does not expand (b+a)^10 */
805                                         10
806                        2   a b   (b + a)
807 (%o5)                  - + --- + ---------
808                        s    2       a b
809                            s
810 (%i6) multthru (a.(b+c.(d+e)+f));
811 (%o6)            a . f + a . c . (e + d) + a . b
812 (%i7) expand (a.(b+c.(d+e)+f));
813 (%o7)         a . f + a . c . e + a . c . d + a . b
814 @end example
816 @opencatbox
817 @category{Express@~{o}es}
818 @closecatbox
819 @end deffn
821 @c -----------------------------------------------------------------------------
822 @anchor{property_nary}
823 @defvr {Propriedade} nary
825 O comando @code{declare(f, nary)} diz ao Maxima para reconhecer a fun@,{c}@~{a}o @code{f} como uma
826 fun@,{c}@~{a}o en@'{a}ria @footnote{Nota do tradutor: uma fun@,{c}@~{a}o en@'{a}ria @'{e} uma fun@,{c}@~{a}o que tem qualquer n@'{u}mero ``n'' de argumentos.}.
828 A declara@,{c}@~{a}o @code{nary} n@~{a}o @'{e} o mesmo que chamar a
829 fun@,{c}@~{a}o @mxref{function_nary, nary}.  O @'{u}nico efeito de
830 @code{declare(f, nary)} @'{e} instruir o simplificador do Maxima a melhorar express@~{o}es
831 aninhadas, por exemplo, para simplificar @code{foo(x, foo(y, z))} em
832 @code{foo(x, y, z)}.  Veja tamb@'{e}m @mrefdot{declare}
834 Exemplo:
836 @example
837 (%i1) H (H (a, b), H (c, H (d, e)));
838 (%o1)               H(H(a, b), H(c, H(d, e)))
839 (%i2) declare (H, nary);
840 (%o2)                         done
841 (%i3) H (H (a, b), H (c, H (d, e)));
842 (%o3)                   H(a, b, c, d, e)
843 @end example
844 @end defvr
846 @c NEEDS CLARIFICATION, EXAMPLES
848 @c -----------------------------------------------------------------------------
849 @anchor{negdistrib}
850 @defvr {Vari@'{a}vel de op@,{c}@~{a}o} negdistrib
851 Valor padr@~{a}o: @code{true}
853 Quando @code{negdistrib} for @code{true}, -1 distribui sobre uma express@~{a}o.
854 E.g., @code{-(x + y)} torna-se @code{- y - x}.  Ajustando a @code{negdistrib} para @code{false}
855 permitir@'{a} @code{- (x + y)} to be displayed like that.  This is sometimes useful
856 but be very careful: like the @code{simp} flag, this is one flag you do not
857 want to set to @code{false} as a matter of course or necessarily for other
858 than local use in your Maxima.
860 Exemplo:
862 @c ===beg===
863 @c negdistrib;
864 @c -(x+y);
865 @c negdistrib : not negdistrib ;
866 @c -(x+y);
867 @c ===end===
868 @example
869 (%i1) negdistrib;
870 (%o1)                                true
871 (%i2) -(x+y);
872 (%o2)                               - y - x
873 (%i3) negdistrib : not negdistrib ;
874 (%o3)                                false
875 (%i4) -(x+y);
876 (%o4)                              - (y + x)
877 @end example
879 @opencatbox
880 @category{Simplification flags and variables}
881 @closecatbox
882 @end defvr
884 @c -----------------------------------------------------------------------------
885 @anchor{opproperties}
886 @defvr {Vari@'{a}vel de sistema} opproperties
888 A vari@'{a}vel de sistema @code{opproperties} cont@'{e}m a lista das propriedades de operador especial recognized
889 by the Maxima simplifier:
891 Exemplo:
893 @c ===beg===
894 @c opproperties;
895 @c ===end===
896 @example
897 (%i1) opproperties;
898 (%o1) [linear, additive, multiplicative, outative, evenfun, oddfun, 
899        commutative, symmetric, antisymmetric, nary, lassociative, rassociative]
900 @end example
902 @opencatbox
903 @category{Vari@'{a}veis globais} @category{Operadores}
904 @closecatbox
905 @end defvr
907 @c NEEDS EXAMPLES
909 @c -----------------------------------------------------------------------------
910 @anchor{outative}
911 @defvr {Propriedade} outative
913 O comando @code{declare(f, outative)} diz ao simplificador do Maxima que fatores constantes
914 no argumento de @code{f} podem ser retirado pra fora.
916 @enumerate
917 @item
918 Se @code{f} for de uma @'{u}nica vari@'{a}vel, sempre que o simplificador encontrar @code{f} aplicada
919 a um produto, aquele produto ser@'{a} particionado em fatores que s@~{a}o constantes
920 e fatore que n@~{a}o s@~{a}o constantes e al@'{e}m disso os fatores que s@~{a}o constantes ser@~{a}o puxados para fora da @code{f}.  E.g.,
921 @code{f(a*x)} simplificar@'{a} para @code{a*f(x)} onde @code{a} @'{e} uma constante.
922 Fatores constantes n@~{a}o at@^{o}micos permanecer@~{a}o intocados em seus locais de or@'{i}gem.
923 @item
924 Se @code{f} for uma fun@,{c}@~{a}o de dois ou mais argumentos, outativity @footnote{Nota do tradutor: linearidade ou homogeneidade de grau 1.} @'{e} definida como no
925 caso de @code{sum} ou @code{integrate}, i.e., @code{f (a*g(x), x)} simplificar@'{a}
926 para @code{a * f(g(x), x)} para @code{a} independente de @code{x}.
927 @end enumerate
929 As fun@,{c}@~{o}es @code{sum}, @code{integrate}, e @code{limit} s@~{a}o todas @code{outative}.
931 Exemplo:
933 @c ===beg===
934 @c F1 (100 * x);
935 @c declare (F1, outative);
936 @c F1 (100 * x);
937 @c declare (zz, constant);
938 @c F1 (zz * y);
939 @c ===end===
940 @example
941 (%i1) F1 (100 * x);
942 (%o1)                       F1(100 x)
943 (%i2) declare (F1, outative);
944 (%o2)                         done
945 (%i3) F1 (100 * x);
946 (%o3)                       100 F1(x)
947 (%i4) declare (zz, constant);
948 (%o4)                         done
949 (%i5) F1 (zz * y);
950 (%o5)                       zz F1(y)
951 @end example
953 @opencatbox
954 @category{Declara@,{c}@~{o}es e infer@^{e}ncias} @category{Operadores}
955 @closecatbox
956 @end defvr
958 @c -----------------------------------------------------------------------------
959 @anchor{radcan}
960 @deffn {Fun@,{c}@~{a}o} radcan (@var{expr})
962 Simplifica @var{expr}, que pode conter logar@'{i}tmos, exponenciais, e radicais, 
963 convertendo @var{expr} em uma forma que @'{e} can@^{o}nica sobre uma larga classe de express@~{o}es 
964 e @'{e} tamb@'{e}m can@^{o}nica em uma dada ordena@,{c}@~{a}o de vari@'{a}veis; isto @'{e}, todas as formas funcionalmente equivalentes a @var{expr}
965 s@~{a}o mapeadas em uma forma @'{u}nica.  Para uma, at@'{e} certo ponto, larga classe de express@~{o}es, 
966 @code{radcan} produz uma forma regular.  Duas express@~{o}es equivalentes nessa classe 
967 n@~{a}o necess@'{a}riamente possuem a mesma apar@^{e}ncia, mas sua diferen@,{c}a pode ser 
968 simplificada para zero por @code{radcan}.
970 Para algumas express@~{o}es @code{radcan} consome bastante tempo.  @'{E} o custo de 
971 explorar certas rela@,{c}@~{o}es em torno dos componentes da express@~{a}o para 
972 simplifica@,{c}@~{o}es baseadas em fatora@,{c}@~{a}o e expans@~{a}o de expoentes de fra@,{c}@~{o}es parciais.
974 @c %e_to_numlog NEEDS ITS OWN @defvar !!!
976 @c %e_to_numlog HAS NO EFFECT ON RADCAN. RADCAN ALWAYS SIMPLIFIES 
977 @c exp(a*log(x)) --> x^a. Commenting the following out. 11/2009
978 @c When @code{%e_to_numlog} is @code{true}, @code{%e^(r*log(expr))} simplifies 
979 @c to @code{expr^r} if @code{r} is a rational number.
981 @c RADEXPAND CONTROLS THE SIMPLIFICATION OF THE POWER FUNCTION, E.G.
982 @c (x*y)^a --> x^a*y^a AND (x^a)^b --> x^(a*b), IF RADEXPAND HAS THE VALUE 'ALL.
983 @c THE VALUE OF RADEXPAND HAS NO EFFECT ON RADCAN. RADCAN ALWAYS SIMPLIFIES
984 @c THE ABOVE EXPRESSIONS. COMMENTING THE FOLLOWING OUT. 11/2009
985 @c When @code{radexpand} is @code{false}, certain transformations are inhibited.
986 @c @code{radcan (sqrt (1-x))} remains @code{sqrt (1-x)} and is not simplified 
987 @c to @code{%i sqrt (x-1)}. @code{radcan (sqrt (x^2 - 2*x + 1))} remains 
988 @c @code{sqrt (x^2 - 2*x + 1)} and is not simplified to @code{x - 1}.
990 Exemplos:
992 @c ===beg===
993 @c radcan((log(x+x^2)-log(x))^a/log(1+x)^(a/2));
994 @c radcan((log(1+2*a^x+a^(2*x))/log(1+a^x)));
995 @c radcan((%e^x-1)/(1+%e^(x/2)));
996 @c ===end===
997 @example
998 (%i1) radcan((log(x+x^2)-log(x))^a/log(1+x)^(a/2));
999                                            a/2
1000 (%o1)                            log(x + 1)
1002 (%i2) radcan((log(1+2*a^x+a^(2*x))/log(1+a^x)));
1003 (%o2)                                  2
1005 (%i3) radcan((%e^x-1)/(1+%e^(x/2)));
1006                                      x/2
1007 (%o3)                              %e    - 1
1008 @end example
1010 @opencatbox
1011 @category{Simplification functions}
1012 @closecatbox
1013 @end deffn
1015 @c NEEDS CLARIFICATION, EXAMPLES
1017 @c -----------------------------------------------------------------------------
1018 @anchor{radexpand}
1019 @defvr {Vari@'{a}vel de op@,{c}@~{a}o} radexpand
1020 Valor padr@~{a}o: @code{true}
1022 A vari@'{a}vel de op@,{c}@~{a}o @code{radexpand} controla algumas simplifica@,{c}@~{o}es de radicais.
1024 Qnado @code{radexpand} for @code{all}, faz com que ra@'{i}zes en@'{e}simas de fatores de um produto
1025 que s@~{a}o expoentes de n sejam colocados fora do radical.  E.g. se
1026 @code{radexpand} for @code{all}, @code{sqrt (16*x^2)} simplifica para @code{4*x}.
1028 @c EXPRESS SIMPLIFICATON RULES IN GENERAL CASE, NOT SPECIAL CASE
1029 Mais particularmente, considere @code{sqrt (x^2)}.
1030 @itemize @bullet
1031 @item
1032 Se @code{radexpand} for @code{all} ou @code{assume (x > 0)} tiver sido executado, 
1033 @code{sqrt(x^2)} simplifica para @code{x}.
1034 @item
1035 Se @code{radexpand} for @code{true} e @code{domain} for @code{real}
1036 (o padr@~{a}o), @code{sqrt(x^2)} simplifica para @code{abs(x)}.
1037 @item
1038 Se @code{radexpand} for @code{false}, ou @code{radexpand} for @code{true} 4
1039 @code{domain} for @code{complex}, @code{sqrt(x^2)} n@~{a}o @'{e} simplificado.
1040 @end itemize
1042 @c CORRECT STATEMENT HERE ???
1043 Note que @code{domain} somente importa quando @code{radexpand} for @code{true}.
1045 @opencatbox
1046 @category{Simplification flags and variables}
1047 @closecatbox
1048 @end defvr
1050 @c NEEDS CLARIFICATION, EXAMPLES
1052 @c -----------------------------------------------------------------------------
1053 @anchor{rassociative}
1054 @defvr {Propriedade} rassociative
1056 O comando @code{declare (g, rassociative)} dis ao simplificador
1057 do Maxima que @code{g} @'{e} associativa @`{a} direita.  E.g.,
1058 @code{g(g(a, b), g(c, d))} simplifica para @code{g(a, g(b, g(c, d)))}.
1060 @opencatbox
1061 @category{Declara@,{c}@~{o}es e infer@^{e}ncias} @category{Operadores}
1062 @closecatbox
1063 @end defvr
1065 @c NEEDS CLARIFICATION, EXAMPLES
1067 @c -----------------------------------------------------------------------------
1068 @anchor{scsimp}
1069 @deffn {Fun@,{c}@~{a}o} scsimp (@var{expr}, @var{rule_1}, @dots{}, @var{rule_n})
1071 Simplifica@,{c}@~{a}o Comparativa Sequencial (m@'{e}todo devido a Stoute).
1072 A fun@,{c}@~{a}o @code{scsimp} tenta simplificar @var{expr}
1073 conforme as regras @var{rule_1}, @dots{}, @var{rule_n}.
1074 Se uma pequena express@~{a}o for obtida, o processo se repete.  De outra forma, ap@'{o}s todas
1075 as simplifica@,{c}@~{o}es serem tentadas, a fun@,{c}@~{a}o @code{scsimp} retorna a express@~{a}o original.
1077 @c MERGE EXAMPLES INTO THIS FILE
1078 O comando @code{example (scsimp)} mostra alguns exemplos.
1080 @opencatbox
1081 @category{Simplification functions}
1082 @closecatbox
1083 @end deffn
1085 @c -----------------------------------------------------------------------------
1086 @anchor{simp}
1087 @defvr {Vari@'{a}vel de op@,{c}@~{a}o} simp
1088 Valor padr@~{a}o: @code{true}
1090 A vari@'{a}vel de op@,{c}@~{a}o @code{simp} habilita simplifica@,{c}@~{a}o.  @'{E} o padr@~{a}o.  A vari@'{a}vel de op@,{c}@~{a}o @code{simp} @'{e} tamb@'{e}m
1091 uma @code{evflag}, que @'{e} reconhecida pela fun@,{c}@~{a}o @code{ev}.  Veja @code{ev}.
1093 Quando @code{simp} for usada como uma @code{evflag} com um valor @code{false}, a 
1094 simplifica@,{c}@~{a}o @'{e} suprimida somente durante a fase de avalia@,{c}@~{a}o de uma express@~{a}o.
1095 O sinalizador n@~{a}o pode suprimir a simplifica@,{c}@~{a}o que segue a fase de
1096 avalia@,{c}@~{a}o.
1098 Exemplos:
1100 A simplifica@,{c}@~{a}o @'{e} desabilitada globalmente.  A express@~{a}o @code{sin(1.0)} n@~{a}o
1101 @'{e} simplificada para seu valor num@'{e}rico.  O sinalizador @code{simp} habilita a
1102 simplifica@,{c}@~{a}o.
1104 @c ===beg===
1105 @c simp:false;
1106 @c sin(1.0);
1107 @c sin(1.0),simp;
1108 @c ===end===
1109 @example
1110 (%i1) simp:false;
1111 (%o1)                                false
1112 (%i2) sin(1.0);
1113 (%o2)                              sin(1.0)
1114 (%i3) sin(1.0),simp;
1115 (%o3)                          .8414709848078965
1116 @end example
1118 A simplifica@,{c}@~{a}o @'{e} ligada novamente.  O sinalizador @code{simp} n@~{a}o pode suprimir
1119 a simplifica@,{c}@~{a}o completamente.  A sa@'{i}da mostra uma express@~{a}o simplificada, mas
1120 a vari@'{a}vel @code{x} tem uma express@~{a}o n@~{a}o simplificada como um valor, devido a
1121 atribui@,{c}@~{a}o ter ocorrido durante a fase de avalia@,{c}@~{a}o da express@~{a}o.
1123 @c ===beg===
1124 @c simp:true;
1125 @c x:sin(1.0),simp:false;
1126 @c :lisp $x
1127 @c ===end===
1128 @example
1129 (%i4) simp:true;
1130 (%o4)                                true
1131 (%i5) x:sin(1.0),simp:false;
1132 (%o5)                          .8414709848078965
1133 (%i6) :lisp $X
1134 ((%SIN) 1.0)
1135 @end example
1137 @opencatbox
1138 @category{Sinalizadores de avalia@,{c}@~{a}o}
1139 @closecatbox
1140 @end defvr
1142 @c NEEDS CLARIFICATION, EXAMPLES
1144 @c -----------------------------------------------------------------------------
1145 @anchor{symmetric}
1146 @defvr {Propriedade} symmetric
1148 O comando @code{declare (h, symmetric)} diz ao simplificador do
1149 Maxima que @code{h} @'{e} uma fun@,{c}@~{a}o sim@'{e}trica.  E.g., @code{h (x, z, y)} 
1150 simplifies to @code{h (x, y, z)}.
1152 A propriedade @code{commutative} @'{e} sin@^{o}nimo de @code{symmetric}.
1154 @opencatbox
1155 @category{Declara@,{c}@~{o}es e infer@^{e}ncias} @category{Operadores}
1156 @closecatbox
1157 @end defvr
1159 @c -----------------------------------------------------------------------------
1160 @anchor{xthru}
1161 @deffn {Fun@,{c}@~{a}o} xthru (@var{expr})
1163 Combina todos os termos de @var{expr} (que deve ser uma soma) sobre um denominador
1164 comum sem expandir produtos e e somas exponenciadas como @code{ratsimp}
1165 faz.  A fun@,{c}@~{a}o @code{xthru} cancela fatores comuns no numerador e no denominador de
1166 express@~{o}es racionais mas somente se os fatores forem expl@'{i}citos.
1168 @c REPHRASE IN NEUTRAL TONE (GET RID OF "IT IS BETTER")
1169 Algumas vezes @'{e} melhor usar @code{xthru} antes de @code{ratsimp} em uma
1170 express@~{a}o com o objetivo de fazer com que fatores expl@'{i}citos de mdc do numerador e do
1171 denominador sejam cancelados simplificando dessa forma a express@~{a}o na qual ser@'{a} usada a
1172 @code{ratsimp}.
1174 Exemplos:
1176 @c ===beg===
1177 @c ((x+2)^20 - 2*y)/(x+y)^20 + (x+y)^(-19) - x/(x+y)^20;
1178 @c xthru (%);
1179 @c ===end===
1180 @example
1181 (%i1) ((x+2)^20 - 2*y)/(x+y)^20 + (x+y)^(-19) - x/(x+y)^20;
1182 @group
1183                                 20
1184                  1       (x + 2)   - 2 y       x
1185 (%o1)        --------- + --------------- - ---------
1186                     19             20             20
1187              (y + x)        (y + x)        (y + x)
1188 @end group
1189 (%i2) xthru (%);
1190                                  20
1191                           (x + 2)   - y
1192 (%o2)                     -------------
1193                                    20
1194                             (y + x)
1195 @end example
1197 @opencatbox
1198 @category{Express@~{o}es}
1199 @closecatbox
1200 @end deffn