1 @c Language: Brazilian Portuguese, Encoding: iso-8859-1
2 @c /Operators.texi/1.39/Fri Jun 8 05:36:44 2007/-ko/
4 @hyphenation{con-se-cu-ti-vos}
9 * Operador n@~{a}o fixado::
10 * Operador P@'{o}sfixado::
11 * Operador Pr@'{e}fixado::
12 * Operadores Aritm@'{e}ticos::
13 * Operadores Relacionais::
18 @node N-Argumentos, Operador n@~{a}o fixado, Operadores, Operadores
20 Um operador @code{nary} @'{e} usado para denotar uma funç@~{a}o com qualquer n@'{u}mero de
21 argumentos, cada um dos quais @'{e} separado por uma ocorr@^{e}ncia do
22 operador, e.g. A+B ou A+B+C. A funç@~{a}o @code{nary("x")} @'{e} uma funç@~{a}o
23 de extens@~{a}o sint@'{a}tica para declarar x como sendo um operador @code{nary}.
24 Funç@~{o}es podem ser declaradas para serem
25 @code{nary}. Se @code{declare(j,nary);} @'{e} conclu@'{i}da, diz ao simplicador para
26 simplificar, e.g. @code{j(j(a,b),j(c,d))} para @code{j(a, b, c, d)}.
28 Veja tamb@'{e}m @code{syntax}.
30 @node Operador n@~{a}o fixado, Operador P@'{o}sfixado, N-Argumentos, Operadores
31 @section Operador n@~{a}o fixado
32 Operadores @code{nofix} s@~{a}o usados para denotar funç@~{o}es sem argumentos.
33 A mera presença de tal operador em um comando far@'{a} com que a
34 funç@~{a}o correspondente seja avaliada. Por exemplo, quando se digita
35 "exit;" para sair de uma parada do Maxima, "exit" tem comportamento similar a um
36 operador @code{nofix}. A funç@~{a}o @code{nofix("x")} @'{e} uma funç@~{a}o de extens@~{a}o
37 sint@'{a}tica que declara x como sendo um operador @code{nofix}.
39 Veja tamb@'{e}m @code{syntax}.
41 @node Operador P@'{o}sfixado, Operador Pr@'{e}fixado, Operador n@~{a}o fixado, Operadores
42 @section Operador P@'{o}sfixado
43 Operadores @code{postfix} como a variedade @code{prefix} denotam funç@~{o}es
44 de um argumento simples, mas nesse caso o argumento sucede
45 imediatamente uma ocorr@^{e}ncia do operador na seq@"{u}@^{e}ncia de caracteres de entrada, e.g. 3! .
46 Uma funç@~{a}o @code{postfix("x")} @'{e} uma funç@~{a}o de extens@~{a}o
47 sint@'{a}tica que declara x como sendo um operador @code{postfix}.
49 Veja tamb@'{e}m @code{syntax}.
51 @node Operador Pr@'{e}fixado, Operadores Aritm@'{e}ticos, Operador P@'{o}sfixado, Operadores
52 @section Operador Pr@'{e}fixado
53 Um operador @code{prefix} @'{e} um que significa uma funç@~{a}o de um
54 argumento, o qual imediatamente segue uma ocorr@^{e}ncia do
55 operador. @code{prefix("x")} @'{e} uma funç@~{a}o de extens@~{a}o
56 sint@'{a}tica que declara x como sendo um operador @code{prefix}.
58 Veja tamb@'{e}m @code{syntax}.
60 @node Operadores Aritm@'{e}ticos, Operadores Relacionais, Operador Pr@'{e}fixado, Operadores
61 @section Operadores Aritm@'{e}ticos
69 @fnindex Subtraç@~{a}o
73 @fnindex Multiplicaç@~{a}o
81 @fnindex Exponenciaç@~{a}o
84 Os s@'{i}mbolos @code{+} @code{*} @code{/} e @code{^} representam
85 adiç@~{a}o, multiplicaç@~{a}o, divis@~{a}o, e exponenciaç@~{a}o, respectivamente.
86 O nome desses operadores s@~{a}o @code{"+"} @code{"*"} @code{"/"} e @code{"^"},
87 os quais podem aparecer em lugares onde o nome da funç@~{a}o ou operador @'{e} requerido.
89 Os s@'{i}mbolos @code{+} e @code{-} representam a adiç@~{a}o un@'{a}ria e a negaç@~{a}o un@'{a}ria, respectivamente,
90 e os nomes desses operadores s@~{a}o @code{"+"} e @code{"-"}, respectivamente.
92 A subtraç@~{a}o @code{a - b} @'{e} representada dentro do Maxima como a adiç@~{a}o, @code{a + (- b)}.
93 Express@~{o}es tais como @code{a + (- b)} s@~{a}o mostradas como subtraç@~{a}o.
94 Maxima reconhece @code{"-"} somente como o nome do operador un@'{a}rio de negaç@~{a}o,
95 e n@~{a}o como o nome do operador bin@'{a}rio de subraç@~{a}o.
97 A divis@~{a}o @code{a / b} @'{e} representada dentro do Maxima como multiplicaç@~{a}o, @code{a * b^(- 1)}.
98 Express@~{o}es tais como @code{a * b^(- 1)} s@~{a}o mostradas como divis@~{a}o.
99 Maxima reconhece @code{"/"} como o nome do operador de divis@~{a}o.
101 A adiç@~{a}o e a multiplicaç@~{a}o s@~{a}o operadores en@'{a}rios e comutativos.
102 a divis@~{a}o e a exponenciaç@~{a}o s@~{a}o operadores bin@'{a}rios e n@~{a}o comutativos.
104 Maxima ordena os operandos de operadores n@~{a}o comutativos para construir uma representaç@~{a}o can@^{o}nica.
105 Para armazenamento interno, a ordem @'{e} determinada por @code{orderlessp}.
106 Para mostrar na tela, a ordem para adiç@~{a}o @'{e} determinada por @code{ordergreatp},
107 e para a multiplicaç@~{a}o, a ordem @'{e} a mesma da ordenaç@~{a}o para armazenamento interno.
109 Computaç@~{o}es aritim@'{e}ticas s@~{a}o realizadas sobre n@'{u}meros literais
110 (inteiro, racionais, n@'{u}meros comuns em ponto flutuante, e grandes n@'{u}meros em ponto flutuante de dupla precis@~{a}o).
111 Execto a exponenciaç@~{a}o, todas as operaç@~{o}es aritm@'{e}ticas sobre n@'{u}meros s@~{a}o simplificadas para n@'{u}meros.
112 A exponenciaç@~{a}o @'{e} simplificada para um n@'{u}mero se ou o operando @'{e} um n@'{u}mero comum em ponto flutuante ou um grande n@'{u}mero em ponto flutuante de dupla precis@~{a}o
113 ou se o resultado for um inteiro exato ou um racional exato;
114 de outra forma uma exponenciaç@~{a}o pode ser simplificada para @code{sqrt} ou outra exponenciaç@~{a}o ou permanecer inalterada.
116 A propagaç@~{a}o de n@'{u}meros em ponto flutuante aplica-se a computaç@~{o}es aritim@'{e}ticas:
117 Se qualquer operando for um grande n@'{u}mero em ponto flutuante, o resultado @'{e} um grande n@'{u}mero em ponto flutuante;
118 de outra forma, se qualquer operando for um n@'{u}mero em ponto flutuante comum, o resultado @'{e} um n@'{u}mero comum em ponto flutuante;
119 de outra forma, se os operandos forem racioanis ou inteiros e o resultado ser@'{a} um racional ou inteiro.
121 Computaç@~{a}oes aritim@'{e}ticas s@~{a}o uma simplificaç@~{a}o, n@~{a}o uma avaliaç@~{a}o.
122 Dessa forma a aritm@'{e}tica @'{e} realizada em express@~{o}es com ap@'{o}strofo (mas simplificadas).
124 Operaç@~{o}es aritm@'{e}ticas s@~{a}o aplicadas elemento-por-elemento
125 para listas quando a vari@'{a}vel global @code{listarith} for @code{true},
126 e sempre aplicada elemento-por-elemento para matrizes.
127 Quando um operando for uma lista ou uma matriz e outro for um operando de algum outro tipo,
128 o outro operando @'{e} combinado com cada um dos elementos da lista ou matriz.
132 Adiç@~{a}o e multiplicaç@~{a}o s@~{a}o opeadores en@'{a}rios comutativos.
133 Maxima ordena os operandos para construir uma representaç@~{a}o can@^{o}nica.
134 Os nomes desses operadores s@~{a}o @code{"+"} e @code{"*"}.
136 @c c + g + d + a + b + e + f;
137 @c [op (%), args (%)];
138 @c c * g * d * a * b * e * f;
139 @c [op (%), args (%)];
140 @c apply ("+", [a, 8, x, 2, 9, x, x, a]);
141 @c apply ("*", [a, 8, x, 2, 9, x, x, a]);
145 (%i1) c + g + d + a + b + e + f;
146 (%o1) g + f + e + d + c + b + a
147 (%i2) [op (%), args (%)];
148 (%o2) [+, [g, f, e, d, c, b, a]]
149 (%i3) c * g * d * a * b * e * f;
151 (%i4) [op (%), args (%)];
152 (%o4) [*, [a, b, c, d, e, f, g]]
153 (%i5) apply ("+", [a, 8, x, 2, 9, x, x, a]);
155 (%i6) apply ("*", [a, 8, x, 2, 9, x, x, a]);
160 Divis@~{a}o e exponenciaç@~{a}o s@~{a}o operadores bin@'{a}rios e n@~{a}o comutativos.
161 Os nomes desses operadores s@~{a}o @code{"/"} e @code{"^"}.
164 @c [map (op, %), map (args, %)];
165 @c [apply ("/", [a, b]), apply ("^", [a, b])];
169 (%i1) [a / b, a ^ b];
173 (%i2) [map (op, %), map (args, %)];
174 (%o2) [[/, ^], [[a, b], [a, b]]]
175 (%i3) [apply ("/", [a, b]), apply ("^", [a, b])];
181 Subtraç@~{a}o e divis@~{a}o s@~{a}o representados internamente
182 em termos de adiç@~{a}o e multiplicaç@~{a}o, respectivamente.
184 @c [inpart (a - b, 0), inpart (a - b, 1), inpart (a - b, 2)];
185 @c [inpart (a / b, 0), inpart (a / b, 1), inpart (a / b, 2)];
189 (%i1) [inpart (a - b, 0), inpart (a - b, 1), inpart (a - b, 2)];
191 (%i2) [inpart (a / b, 0), inpart (a / b, 1), inpart (a / b, 2)];
197 C@'{a}lculos s@~{a}o realizados sobre n@'{u}meros lterais.
198 A propagaç@~{a}o de n@'{u}meros em poto flutuante aplica-se.
200 @c 17 + b - (1/2)*29 + 11^(2/4);
201 @c [17 + 29, 17 + 29.0, 17 + 29b0];
205 (%i1) 17 + b - (1/2)*29 + 11^(2/4);
207 (%o1) b + sqrt(11) + -
209 (%i2) [17 + 29, 17 + 29.0, 17 + 29b0];
210 (%o2) [46, 46.0, 4.6b1]
213 Computaç@~oes aritm@'{e}ticas s@~{a}o uma simplificaç@~{a}o, n@~{a}o uma avaliaç@~{a}o.
216 @c '(17 + 29*11/7 - 5^3);
218 @c '(17 + 29*11/7 - 5^3);
224 (%i2) '(17 + 29*11/7 - 5^3);
230 (%i4) '(17 + 29*11/7 - 5^3);
236 A aritm@'{e}tica @'{e} realizada elemento-por-elemento para listas lists (dependendo de @code{listarith}) e dependendo de matrizes.
238 @c matrix ([a, x], [h, u]) - matrix ([1, 2], [3, 4]);
239 @c 5 * matrix ([a, x], [h, u]);
240 @c listarith : false;
241 @c [a, c, m, t] / [1, 7, 2, 9];
244 @c [a, c, m, t] / [1, 7, 2, 9];
249 (%i1) matrix ([a, x], [h, u]) - matrix ([1, 2], [3, 4]);
253 (%i2) 5 * matrix ([a, x], [h, u]);
257 (%i3) listarith : false;
259 (%i4) [a, c, m, t] / [1, 7, 2, 9];
263 (%i5) [a, c, m, t] ^ x;
266 (%i6) listarith : true;
268 (%i7) [a, c, m, t] / [1, 7, 2, 9];
272 (%i8) [a, c, m, t] ^ x;
274 (%o8) [a , c , m , t ]
281 Operador de exponenciaç@~{a}o.
282 Maxima reconhece @code{**} como o mesmo operador que @code{^} em entrada,
283 e @code{**} @'{e} mostrado como @code{^} em sa@'{i}da unidimensional,
284 ou colocando o expoente como sobrescrito em sa@'{i}da bidimensional.
286 A funç@~{a}o @code{fortran} mostra o operador de exponenciaç@~{a}o com como @code{**},
287 independente de a entrada ter sido na forma @code{**} ou a forma @code{^}.
294 @c string (x**y + x^z);
295 @c fortran (x**y + x^z);
298 (%i1) is (a**b = a^b);
303 (%i3) string (x**y + x^z);
305 (%i4) fortran (x**y + x^z);
312 @node Operadores Relacionais, Operadores Geral, Operadores Aritm@'{e}ticos, Operadores
313 @section Operadores Relacionais
319 @deffnx {Operador} <=
321 @fnindex Menor que ou igual a
323 @deffnx {Operador} >=
325 @fnindex Maior que ou igual a
334 @node Operadores Geral, , Operadores Relacionais, Operadores
335 @section Operadores Geral
339 @fnindex exponenciaç@~{a}o n@~{a}o comutativa
349 Para qualquer n@'{u}mero complexo @code{x} (inclu@'{i}ndo n@'{u}meros inteiros, racionais, e reais) exceto para
350 inteiros negativos, @code{x!} @'{e} definido como @code{gamma(x+1)}.
352 Para um inteiro @code{x}, @code{x!} simplifica para o produto de inteiros de 1 a @code{x} inclusive.
353 @code{0!} simplifica para 1.
354 Para um n@'{u}mero em ponto flutuante @code{x}, @code{x!} simplifica para o valor de @code{gamma (x+1)}.
355 Para @code{x} igual a @code{n/2} onde @code{n} @'{e} um inteiro @'{i}mpar,
356 @code{x!} simplifica para um fator racional vezes @code{sqrt (%pi)}
357 (uma vez que @code{gamma (1/2)} @'{e} igual a @code{sqrt (%pi)}).
358 Se @code{x} for qualquer outra coisa,
359 @code{x!} n@~{a}o @'{e} simplificado.
362 @code{factlim}, @code{minfactorial}, e @code{factcomb} controlam a simplificaç@~{a}o
363 de express@~{o}es contendo fatoriais.
365 As funç@~{o}es @code{gamma}, @code{bffac}, e @code{cbffac}
366 s@~{a}o variedades da funç@~{a}o @code{gamma}.
367 @code{makegamma} substitui @code{gamma} para funç@~{o}es relacionadas a fatoriais.
369 Veja tamb@'{e}m @code{binomial}.
371 O fatorial de um inteiro, inteiro dividido por dois, ou argumento em ponto flutuante @'{e} simplificado
372 a menos que o operando seja maior que @code{factlim}.
376 @c [0!, (7/2)!, 4.77!, 8!, 20!];
381 (%i2) [0!, (7/2)!, 4.77!, 8!, 20!];
383 +(%o2) [1, -------------, 81.44668037931199, 40320, 20!]
387 O fatorial de um n@'{u}mero complexo, constante conhecida, ou express@~{a}o geral n@~{a}o @'{e} simplificado.
388 Ainda assim pode ser poss@'{i}vel simplificar o fatorial ap@'{o}s avaliar o operando.
391 @c [(%i + 1)!, %pi!, %e!, (cos(1) + sin(1))!];
392 @c ev (%, numer, %enumer);
395 (%i1) [(%i + 1)!, %pi!, %e!, (cos(1) + sin(1))!];
396 (%o1) [(%i + 1)!, %pi!, %e!, (sin(1) + cos(1))!]
397 (%i2) ev (%, numer, %enumer);
398 (%o2) [(%i + 1)!, 7.188082728976037, 4.260820476357,
402 O fatorial de um s@'{i}mbolo n@~{a}o associado n@~{a}o @'{e} simplificado.
415 Fatoriais s@~{a}o simplificados, n@~{a}o avaliados.
416 Dessa forma @code{x!} pode ser substitu@'{i}do mesmo em uma express@~{a}o com ap@'{o}strofo.
419 @c '([0!, (7/2)!, 4.77!, 8!, 20!]);
422 (%i1) '([0!, (7/2)!, 4.77!, 8!, 20!]);
424 (%o1) [1, -------------, 81.44668037931199, 40320,
433 @fnindex Duplo fatorial
435 O operador de duplo fatorial.
437 Para um n@'{u}mero inteiro, n@'{u}mero em ponto flutuante, ou n@'{u}mero racional @code{n},
438 @code{n!!} avalia para o produto @code{n (n-2) (n-4) (n-6) ... (n - 2 (k-1))}
439 onde @code{k} @'{e} igual a @code{entier (n/2)},
440 que @'{e}, o maior inteiro menor que ou igual a @code{n/2}.
441 Note que essa definiç@~{a}o n@~{a}o coincide com outras definiç@~{o}es publicadas
442 para argumentos que n@~{a}o s@~{a}o inteiros.
443 @c REPORTED TO BUG TRACKER AS BUG # 1093138 !!!
445 Para um inteiro par (ou @'{i}mpar) @code{n}, @code{n!!} avalia para o produto de
446 todos os inteiros consecutivos pares (ou @'{i}mpares) de 2 (ou 1) at@'{e} @code{n} inclusive.
448 Para um argumento @code{n} que n@~{a}o @'{e} um n@'{u}mero inteiro, um n@'{u}mero em ponto flutuante, ou um n@'{u}mero racional,
449 @code{n!!} retorna uma forma substantiva @code{genfact (n, n/2, 2)}.
450 @c n!! IS NEITHER SIMPLIFIED NOR EVALUATED IN THIS CASE -- MENTION THAT? OR TOO MUCH DETAIL ???
456 @fnindex N@~{a}o igual (desigualdade sint@'{a}tica)
458 Representa a negaç@~{a}o da igualdade sint@'{a}tica @code{=}.
460 Note que pelo fato de as regras de avaliaç@~{a}o de express@~{o}es predicadas
461 (em particular pelo fato de @code{not @var{expr}} fazer com que ocorra a avaliaç@~{a}o de @var{expr}),
462 a forma @code{not @var{a} = @var{b}} n@~{a}o @'{e} equivalente @`a forma @code{@var{a} # @var{b}} em alguns casos.
464 Note que devido @`as regras para avaliaç@~{a}o de express@~{o}es predicadas
465 (em particular devido a @code{not @var{expr}} fazer com que a avaliaç@~{a}o de @var{expr} ocorra),
466 @code{not @var{a} = @var{b}} @'{e} equivalente a @code{is(@var{a} # @var{b})},
467 em lugar de ser equivalente a @code{@var{a} # @var{b}}.
476 @c @'{e} (not a = b);
489 (%i6) @'{e} (not a = b);
497 @fnindex Multiplicaç@~{a}o n@~{a}o comutativa matricial
499 O operador ponto, para multiplicaç@~{a}o (n@~{a}o comutativa) de matrizes.
500 Quando "." @'{e} usado com essa finalidade, espaços devem ser colocados em ambos os lados desse
501 operador, e.g. A . B. Isso disting@"{u}e o operador ponto plenamente de um ponto decimal em
502 um n@'{u}mero em ponto flutuante.
510 @code{dotconstrules},
521 @fnindex Operador de atribuiç@~{a}o
523 O operador de atribuiç@~{a}o. E.g. A:3 escolhe a vari@'{a}vel A para 3.
529 @fnindex Operador de atribuiç@~{a}o (avalia o lado esquerdo da igualdade)
531 Operador de atribuiç@~{a}o. :: atribui o valor da express@~{a}o
532 em seu lado direito para o valor da quantidade na sua esquerda, que pode
533 avaliar para uma vari@'{a}vel at@^{o}mica ou vari@'{a}vel subscrita.
537 @deffn {Operador} ::=
539 @fnindex Operador de definiç@~{a}o de funç@~{a}o de macro
541 Operador de definiç@~{a}o de funç@~{a}o de macro.
542 @code{::=} define uma funç@~{a}o (chamada uma "macro" por raz@~{o}es hist@'{o}ricas)
543 que coloca um ap@'{o}strofo em seus argumentos (evitando avaliaç@~{a}o),
544 e a express@~{a}o que @'{e} retornada (chamada a "expans@~{a}o de macro")
545 @'{e} avaliada no contexto a partir do qual a macro foi chamada.
546 Uma funç@~{a}o de macro @'{e} de outra forma o mesmo que uma funç@~{a}o comum.
548 @code{macroexpand} retorna uma expans@~{a}o de macro (sem avaliar a expans@~{a}o).
549 @code{macroexpand (foo (x))} seguida por @code{''%} @'{e} equivalente a @code{foo (x)}
550 quando @code{foo} for uma funç@~{a}o de macro.
552 @code{::=} coloca o nome da nova funç@~{a}o de macro dentro da lista global @code{macros}.
553 @code{kill}, @code{remove}, e @code{remfunction} desassocia definiç@~{o}es de funç@~{a}o de macro
554 e remove nomes de @code{macros}.
556 @code{fundef} e @code{dispfun} retornam respectivamente uma definiç@~{a}o de funç@~{a}o de macro
557 e uma atribuiç@~{a}o dessa definiç@~{a}o a um r@'{o}tulo, respectivamente.
559 Funç@~{o}es de macro comumente possuem express@~{o}es @code{buildq} e
560 @code{splice} para construir uma express@~{a}o,
561 que @'{e} ent@~{a}o avaliada.
565 Uma funç@~{a}o de macro coloca um ap@'{o}strofo em seus argumentos evitando ent@~{a}o a avaliaç@~{a}o,
566 ent@~{a}o mensagem (1) mostra @code{y - z}, n@~{a}o o valor de @code{y - z}.
567 A expans@~{a}o de macro (a express@~{a}o com ap@'{o}strofo @code{'(print ("(2) x is equal to", x))}
568 @'{e} avaliada no contexto a partir do qual a macro for chamada,
569 mostrando a mensagem (2).
575 @c printq1 (x) ::= block (print ("(1) x is equal to", x), '(print ("(2) x is equal to", x)));
585 (%i4) printq1 (x) ::= block (print ("(1) x @'{e} igual a", x), '(print ("(2) x @'{e} igual a", x)));
586 (%o4) printq1(x) ::= block(print("(1) x @'{e} igual a", x),
587 '(print("(2) x @'{e} igual a", x)))
588 (%i5) printq1 (y - z);
589 (1) x @'{e} igual a y - z
590 (2) x @'{e} igual a %pi
594 Uma funç@~{a}o comum avalia seus argumentos, ent@~{a}o message (1) mostra o valor de @code{y - z}.
595 O valor de retorno n@~{a}o @'{e} avaliado, ent@~{a}o mensagem (2) n@~{a}o @'{e} mostrada
596 at@'{e} a avaliaç@~{a}o expl@'{i}cita @code{''%}.
602 @c printe1 (x) := block (print ("(1) x @'{e} igual a", x), '(print ("(2) x @'{e} igual a", x)));
613 (%i4) printe1 (x) := block (print ("(1) x @'{e} igual a", x), '(print ("(2) x @'{e} igual a", x)));
614 (%o4) printe1(x) := block(print("(1) x @'{e} igual a", x),
615 '(print("(2) x @'{e} igual a", x)))
616 (%i5) printe1 (y - z);
617 (1) x @'{e} igual a 1234 - 1729 w
618 (%o5) print((2) x @'{e} igual a, x)
620 (2) x @'{e} igual a %pi
624 @code{macroexpand} retorna uma expans@~{a}o de macro.
625 @code{macroexpand (foo (x))} seguido por @code{''%} @'{e} equivalente a @code{foo (x)}
626 quando @code{foo} for uma funç@~{a}o de macro.
632 @c g (x) ::= buildq ([x], print ("x @'{e} igual a", x));
633 @c macroexpand (g (y - z));
644 (%i4) g (x) ::= buildq ([x], print ("x @'{e} igual a", x));
645 (%o4) g(x) ::= buildq([x], print("x @'{e} igual a", x))
646 (%i5) macroexpand (g (y - z));
647 (%o5) print(x @'{e} igual a, y - z)
649 x @'{e} igual a 1234 - 1729 w
652 x @'{e} igual a 1234 - 1729 w
660 @fnindex Operador de definiç@~{a}o de funç@~{a}o
662 O operador de definiç@~{a}o de funç@~{a}o. E.g. @code{f(x):=sin(x)} define
663 uma funç@~{a}o @code{f}.
669 @fnindex Operador de equaç@~{a}o
670 @fnindex Igual (igualdade sint@'{a}tica)
672 O operador de equaç@~{a}o.
674 Uma express@~{a}o @code{@var{a} = @var{b}}, por si mesma, representa
675 uma equaç@~{a}o n@~{a}o avaliada, a qual pode ou n@~{a}o se manter.
676 Equaç@~{o}es n@~{a}o avaliadas podem aparecer como argumentos para @code{solve} e @code{algsys}
677 ou algumas outras funç@~{o}es.
679 A funç@~{a}o @code{is} avalia @code{=} para um valor Booleano.
680 @code{is(@var{a} = @var{b})} avalia @code{@var{a} = @var{b}} para @code{true} quando @var{a} e @var{b}
681 forem id@^{e}nticos. Isto @'{e}, @var{a} e @var{b} forem @'{a}tomos que s@~{a}o id@^{e}nticos,
682 ou se eles n@~{a}o forem @'{a}tomos e seus operadores forem id@^{e}nticos e seus argumentos forem id@^{e}nticos.
683 De outra forma, @code{is(@var{a} = @var{b})} avalia para @code{false};
684 @code{is(@var{a} = @var{b})} nunca avalia para @code{unknown}.
685 Quando @code{is(@var{a} = @var{b})} for @code{true}, @var{a} e @var{b} s@~{a}o ditos para serem sintaticamente iguais,
686 em contraste para serem express@~{o}es equivalentes, para as quais @code{is(equal(@var{a}, @var{b}))} @'{e} @code{true}.
687 Express@~{o}es podem ser equivalentes e n@~{a}o sint@'{a}ticamente iguais.
689 A negaç@~{a}o de @code{=} @'{e} representada por @code{#}.
690 Da mesma forma que com @code{=}, uma express@~{a}o @code{@var{a} # @var{b}}, por si mesma, n@~{a}o @'{e} avaliada.
691 @code{is(@var{a} # @var{b})} avalia @code{@var{a} # @var{b}} para
692 @code{true} ou @code{false}.
694 Complementando a funç@~{a}o @code{is},
695 alguns outros operadores avaliam @code{=} e @code{#} para @code{true} ou @code{false},
696 a saber @code{if}, @code{and}, @code{or}, e @code{not}.
698 Note que pelo fato de as regras de avaliaç@~{a}o de express@~{o}es predicadas
699 (em particular pelo fato de @code{not @var{expr}} fazer com que ocorra a avaliaç@~{a}o de @var{expr}),
700 a forma @code{not @var{a} = @var{b}} @'{e} equivalente a @code{is(@var{a} # @var{b})},
701 em lugar de ser equivalente a @code{@var{a} # @var{b}}.
703 @code{rhs} e @code{lhs} retornam o primeiro membro e o segundo membro de uma equaç@~{a}o,
704 respectivamente, de uma equaç@~{a}o ou inequaç@~{a}o.
706 Veja tamb@'{e}m @code{equal} e @code{notequal}.
710 Uma express@~{a}o @code{@var{a} = @var{b}}, por si mesma, representa
711 uma equaç@~{a}o n@~{a}o avaliada, a qual pode ou n@~{a}o se manter.
714 @c eq_1 : a * x - 5 * y = 17;
715 @c eq_2 : b * x + 3 * y = 29;
716 @c solve ([eq_1, eq_2], [x, y]);
717 @c subst (%, [eq_1, eq_2]);
721 (%i1) eq_1 : a * x - 5 * y = 17;
723 (%i2) eq_2 : b * x + 3 * y = 29;
725 (%i3) solve ([eq_1, eq_2], [x, y]);
727 (%o3) [[x = ---------, y = -----------]]
729 (%i4) subst (%, [eq_1, eq_2]);
730 196 a 5 (29 a - 17 b)
731 (%o4) [--------- - --------------- = 17,
733 196 b 3 (29 a - 17 b)
734 --------- + --------------- = 29]
737 (%o5) [17 = 17, 29 = 29]
740 @code{is(@var{a} = @var{b})} avalia @code{@var{a} = @var{b}} para @code{true} quando @var{a} e @var{b}
741 s@~{a}o sintaticamente iguais (isto @'{e}, identicos).
742 Express@~{o}es podem ser equivalentes e n@~{a}o sintaticamente iguais.
745 @c a : (x + 1) * (x - 1);
747 @c [is (a = b), is (a # b)];
748 @c [is (equal (a, b)), is (notequal (a, b))];
751 (%i1) a : (x + 1) * (x - 1);
752 (%o1) (x - 1) (x + 1)
756 (%i3) [is (a = b), is (a # b)];
758 (%i4) [is (equal (a, b)), is (notequal (a, b))];
762 Alguns operadores avaliam @code{=} e @code{#} para @code{true} ou @code{false}.
765 @c if expand ((x + y)^2) = x^2 + 2 * x * y + y^2 then FOO else BAR;
766 @c eq_3 : 2 * x = 3 * x;
767 @c eq_4 : exp (2) = %e^2;
768 @c [eq_3 and eq_4, eq_3 or eq_4, not eq_3];
771 (%i1) if expand ((x + y)^2) = x^2 + 2 * x * y + y^2 then FOO else BAR;
773 (%i2) eq_3 : 2 * x = 3 * x;
775 (%i3) eq_4 : exp (2) = %e^2;
778 (%i4) [eq_3 and eq_4, eq_3 or eq_4, not eq_3];
779 (%o4) [false, true, true]
782 Devido a @code{not @var{expr}} fazer com que a avaliaç@~{a}o de @var{expr} ocorra,
783 @code{not @var{a} = @var{b}} @'{e} equivalente a @code{is(@var{a} # @var{b})}.
786 @c [2 * x # 3 * x, not (2 * x = 3 * x)];
787 @c is (2 * x # 3 * x);
790 (%i1) [2 * x # 3 * x, not (2 * x = 3 * x)];
791 (%o1) [2 x # 3 x, true]
792 (%i2) is (2 * x # 3 * x);
799 @deffn {Operador} and
801 @fnindex Conjunç@~{a}o l@'{o}gica
803 O operador l@'{o}gico de conjunç@~{a}o.
804 @code{and} @'{e} um operador n-@'{a}rio infixo;
805 seus operandos s@~{a}o express@~{o}es Booleanas, e seu resultado @'{e} um valor Booleano.
807 @code{and} força avaliaç@~{a}o (como @code{is}) de um ou mais operandos,
808 e pode forçar a avaliaç@~{a}o de todos os operandos.
810 Operandos s@~{a}o avaliados na ordem em que aparecerem.
811 @code{and} avalia somente quantos de seus operandos forem necess@'{a}rios para determinar o resultado.
812 Se qualquer operando for @code{false},
813 o resultado @'{e} @code{false} e os operandos restantes n@~{a}o s@~{a}o avaliados.
815 O sinalizador global @code{prederror} governa o comportamento de @code{and}
816 quando um operando avaliado n@~{a}o pode ser determinado como sendo @code{true} ou @code{false}.
817 @code{and} imprime uma mensagem de erro quando @code{prederror} for @code{true}.
818 De outra forma, operandos que n@~{a}o avaliam para @code{true} ou para @code{false} s@~{a}o aceitos,
819 and o resultado @'{e} uma express@~{a}o Booleana.
821 @code{and} n@~{a}o @'{e} comutativo:
822 @code{a and b} pode n@~{a}o ser igual a @code{b and a} devido ao tratamento de operandos indeterminados.
829 @fnindex Disjunç@~{a}o l@'{o}gica
831 O operador l@'{o}gico de disjunç@~{a}o.
832 @code{or} @'{e} um operador n-@'{a}rio infixo;
833 seus operandos s@~{a}o express@~{o}es Booleanas, e seu resultado @'{e} um valor Booleano.
835 @code{or} força avaliaç@~{a}o (como @code{is}) de um ou mais operandos,
836 e pode forçar a avaliaç@~{a}o de todos os operandos.
838 Operandos s@~{a}o avaliados na ordem em que aparecem.
839 @code{or} avalia somente quantos de seus operandos forem necess@'{a}rios para determinar o resultado.
840 Se qualquer operando for @code{true},
841 o resultado @'{e} @code{true} e os operandos restantes n@~{a}o s@~{a}o avaliados.
843 O sinalizador global @code{prederror} governa o comportamento de @code{or}
844 quando um operando avaliado n@~{a}o puder ser determinado como sendo @code{true} ou @code{false}.
845 @code{or} imprime uma mensagem de erro quando @code{prederror} for @code{true}.
846 De outra forma, operandos que n@~{a}o avaliam para @code{true} ou para @code{false} s@~{a}o aceitos,
847 E o resultado @'{e} uma express@~{a}o Booleana.
849 @code{or} n@~{a}o @'{e} comutativo:
850 @code{a or b} pode n@~{a}o ser igual a @code{b or a} devido ao tratamento de operando indeterminados.
855 @deffn {Operador} not
857 @fnindex Negaç@~{a}o l@'{o}gica
859 O operador l@'{o}gico de negaç@~{a}o.
860 @code{not} @'{e} operador prefixado;
861 Seu operando @'{e} uma express@~{a}o Booleana, e seu resultado @'{e} um valor Booleano.
863 @code{not} força a avaliaç@~{a}o (como @code{is}) de seu operando.
865 O sinalizador global @code{prederror} governa o comportamento de @code{not}
866 quando seu operando n@~{a}o pode ser determinado em termos de @code{true} ou @code{false}.
867 @code{not} imprime uma mensagem de erro quando @code{prederror} for @code{true}.
868 De outra forma, operandos que n@~{a}o avaliam para @code{true} ou para @code{false} s@~{a}o aceitos,
869 e o resultado @'{e} uma express@~{a}o Booleana.
873 @deffn {Funç@~{a}o} abs (@var{expr})
874 Retorna o valor absoluto de @var{expr}. Se @var{expr} for um n@'{u}mero complexo, retorna o m@'{o}dulo
875 complexo de @var{expr}.
879 @defvr {Palavra chave} additive
880 Se @code{declare(f,additive)} tiver sido executado, ent@~{a}o:
882 (1) Se @code{f} for uma funç@~{a}o de uma @'{u}nica vari@'{a}vel, sempre que o simplificador encontrar @code{f} aplicada
883 a uma adiç@~{a}o, @code{f} ser@'{a} distribu@'{i}do sobre aquela adiç@~{a}o. I.e. @code{f(y+x)} ir@'{a}
884 simplificar para @code{f(y)+f(x)}.
886 (2) Se @code{f} for uma funç@~{a}o de 2 ou mais argumentos, a adiç@~{a}o @'{e} definida como
887 adiç@~{a}o no primeiro argumento para @code{f}, como no caso de @code{sum} ou
888 @code{integrate}, i.e. @code{f(h(x)+g(x),x)} ir@'{a} simplificar para @code{f(h(x),x)+f(g(x),x)}.
889 Essa simplificaç@~{a}o n@~{a}o ocorre quando @code{f} @'{e} aplicada para express@~{o}es da
890 forma @code{sum(x[i],i,lower-limit,upper-limit)}.
894 @c NEEDS TO BE REWORKED. NOT CONVINCED THIS SYMBOL NEEDS ITS OWN ITEM
895 @c (SHOULD BE DESCRIBED IN CONTEXT OF EACH FUNCTION WHICH RECOGNIZES IT)
896 @defvr {Palavra chave} allbut
897 trabalha com os comandos @code{part} (i.e. @code{part}, @code{inpart}, @code{substpart},
898 @code{substinpart}, @code{dpart}, e @code{lpart}). Por exemplo,
901 @c expr : e + d + c + b + a;
902 @c part (expr, [2, 5]);
905 (%i1) expr : e + d + c + b + a;
906 (%o1) e + d + c + b + a
907 (%i2) part (expr, [2, 5]);
914 @c expr : e + d + c + b + a;
915 @c part (expr, allbut (2, 5));
918 (%i1) expr : e + d + c + b + a;
919 (%o1) e + d + c + b + a
920 (%i2) part (expr, allbut (2, 5));
924 @code{allbut} @'{e} tamb@'{e}m reconhecido por @code{kill}.
927 @c [aa : 11, bb : 22, cc : 33, dd : 44, ee : 55];
928 @c kill (allbut (cc, dd));
932 (%i1) [aa : 11, bb : 22, cc : 33, dd : 44, ee : 55];
933 (%o1) [11, 22, 33, 44, 55]
934 (%i2) kill (allbut (cc, dd));
936 (%i1) [aa, bb, cc, dd];
937 (%o1) [aa, bb, 33, 44]
940 @code{kill(allbut(@var{a_1}, @var{a_2}, ...))} tem o mesmo efeito que @code{kill(all)}
941 exceto que n@~{a}o elimina os s@'{i}mbolos @var{a_1}, @var{a_2}, ... .
945 @defvr {Declaraç@~{a}o} antisymmetric
946 Se @code{declare(h,antisymmetric)} @'{e} conclu@'{i}da, diz ao
947 simplicador que @code{h} @'{e} uma funç@~{a}o antisim@'{e}trica. E.g. @code{h(x,z,y)} simplificar@'{a} para
948 @code{- h(x, y, z)}. Isto @'{e}, dar@'{a} (-1)^n vezes o resultado dado por
949 @code{symmetric} ou @code{commutative}, quando n for o n@'{u}mero de interescolhas de dois
950 argumentos necess@'{a}rios para converter isso naquela forma.
954 @deffn {Funç@~{a}o} cabs (@var{expr})
955 Retorna o valor absoluto complexo (o m@'{o}dulo complexo) de
960 @deffn {Funç@~{a}o} ceiling (@var{x})
962 Quando @var{x} for um n@'{u}mero real, retorna o @'{u}ltimo inteiro que
963 @'{e} maior que ou igual a @var{x}.
965 Se @var{x} for uma express@~{a}o constante (@code{10 * %pi}, por exemplo),
966 @code{ceiling} avalia @var{x} usando grandes n@'{u}meros em ponto flutuante, e
967 aplica @code{ceiling} para o grande n@'{u}mero em ponto flutuante resultante. Porque @code{ceiling} usa
968 avaliaç@~{a}o de ponto flutuante, @'{e} poss@'{i}vel, embora improv@'{a}vel,
969 que @code{ceiling} possa retornar uma valor err@^{o}neo para entradas
970 constantes. Para prevenir erros, a avaliaç@~{a}o de ponto flutuante
971 @'{e} conclu@'{i}da usando tr@^{e}s valores para @code{fpprec}.
973 Para entradas n@~{a}o constantes, @code{ceiling} tenta retornar um valor
974 simplificado. Aqui est@'{a} um exemplo de simplificaç@~{o}es que @code{ceiling}
978 @c ceiling (ceiling (x));
979 @c ceiling (floor (x));
980 @c declare (n, integer)$
981 @c [ceiling (n), ceiling (abs (n)), ceiling (max (n, 6))];
982 @c assume (x > 0, x < 1)$
984 @c tex (ceiling (a));
987 (%i1) ceiling (ceiling (x));
989 (%i2) ceiling (floor (x));
991 (%i3) declare (n, integer)$
992 (%i4) [ceiling (n), ceiling (abs (n)), ceiling (max (n, 6))];
993 (%o4) [n, abs(n), max(n, 6)]
994 (%i5) assume (x > 0, x < 1)$
997 (%i7) tex (ceiling (a));
998 $$\left \lceil a \right \rceil$$
1002 A funç@~{a}o @code{ceiling} n@~{a}o mapeia automaticamente sobre listas ou matrizes.
1003 Finalmente, para todas as entradas que forem manifestamente complexas, @code{ceiling} retorna
1004 uma forma substantiva.
1006 Se o intervalo de uma funç@~{a}o @'{e} um subconjunto dos inteiros, o intervalo pode ser
1007 declarado @code{integervalued}. Ambas as funç@~{o}es @code{ceiling} e @code{floor}
1008 podem usar essa informaç@~{a}o; por exemplo:
1011 @c declare (f, integervalued)$
1013 @c ceiling (f(x) - 1);
1016 (%i1) declare (f, integervalued)$
1019 (%i3) ceiling (f(x) - 1);
1025 @deffn {Funç@~{a}o} charfun (@var{p})
1027 Retorna 0 quando o predicado @var{p} avaliar para @code{false}; retorna
1028 1 quando o predicado avaliar para @code{true}. Quando o predicado
1029 avaliar para alguma coisa que n@~{a}o @code{true} ou @code{false} (@code{unknown}),
1030 retorna uma forma substantiva.
1036 @c subst (x = -1, %);
1037 @c e : charfun ('"and" (-1 < x, x < 1))$
1038 @c [subst (x = -1, e), subst (x = 0, e), subst (x = 1, e)];
1041 (%i1) charfun (x < 1);
1042 (%o1) charfun(x < 1)
1043 (%i2) subst (x = -1, %);
1045 (%i3) e : charfun ('"and" (-1 < x, x < 1))$
1046 (%i4) [subst (x = -1, e), subst (x = 0, e), subst (x = 1, e)];
1052 @defvr {Declaraç@~{a}o} commutative
1053 Se @code{declare(h,commutative)} @'{e} conclu@'{i}da, diz ao
1054 simplicador que @code{h} @'{e} uma funç@~{a}o comutativa. E.g. @code{h(x,z,y)} ir@'{a}
1055 simplificar para @code{h(x, y, z)}. Isto @'{e} o mesmo que @code{symmetric}.
1059 @deffn {Funç@~{a}o} compare (@var{x}, @var{y})
1061 Retorna um operador de comparaç@~{a}o @var{op}
1062 (@code{<}, @code{<=}, @code{>}, @code{>=}, @code{=}, ou @code{#}) tal que
1063 @code{is (@var{x} @var{op} @var{y})} avalia para @code{true};
1064 quando ou @var{x} ou @var{y} dependendo de @code{%i} e
1065 @code{@var{x} # @var{y}}, retorna @code{notcomparable};
1066 Quando n@~{a}o existir tal operador ou
1067 Maxima n@~{a}o estiver apto a determinar o operador, retorna @code{unknown}.
1074 @c compare (%i, %i);
1075 @c compare (%i, %i + 1);
1076 @c compare (1/x, 0);
1077 @c compare (x, abs(x));
1080 (%i1) compare (1, 2);
1082 (%i2) compare (1, x);
1084 (%i3) compare (%i, %i);
1086 (%i4) compare (%i, %i + 1);
1088 (%i5) compare (1/x, 0);
1090 (%i6) compare (x, abs(x));
1094 A funç@~{a}o @code{compare} n@~{a}o tenta de terminar se o dom@'{i}nio real de
1095 seus argumentos @'{e} n@~{a}o vazio; dessa forma
1098 @c compare (acos (x^2 + 1), acos (x^2 + 1) + 1);
1101 (%i1) compare (acos (x^2 + 1), acos (x^2 + 1) + 1);
1105 O dom@'{i}nio real de @code{acos (x^2 + 1)} @'{e} vazio.
1109 @deffn {Funç@~{a}o} entier (@var{x})
1110 Retorna o @'{u}ltimo inteiro menor que ou igual a @var{x} onde @var{x} @'{e} num@'{e}rico. @code{fix} (como em
1111 @code{fixnum}) @'{e} um sin@^{o}nimo disso, ent@~{a}o @code{fix(@var{x})} @'{e} precisamente o mesmo.
1115 @c NEEDS CLARIFICATION
1116 @deffn {Funç@~{a}o} equal (@var{a}, @var{b})
1118 Representa a equival@^{e}ncia, isto @'{e}, valor igual.
1120 Por si mesma, @code{equal} n@~{a}o avalia ou simplifica.
1121 A funç@~{a}o @code{is} tenta avaliar @code{equal} para um valor Booleano.
1122 @code{is(equal(@var{a}, @var{b}))}
1123 retorna @code{true} (ou @code{false}) se
1124 e somente se @var{a} e @var{b} forem iguais (ou n@~{a}o iguais) para todos os poss@'{i}veis
1125 valores de suas vari@'{a}veis, como determinado atrav@'{e}s da avaliaç@~{a}o de @code{ratsimp(@var{a} - @var{b})};
1126 se @code{ratsimp} retornar 0, as duas express@~{o}es s@~{a}o consideradas equivalentes.
1127 Duas express@~{o}es podem ser equivalentes mesmo se mesmo se elas n@~{a}o forem sintaticamente iguais (i.e., identicas).
1129 Quando @code{is} falhar em reduzir @code{equal} a @code{true} ou @code{false},
1130 o resultado @'{e} governado atrav@'{e}s do sinalizador global @code{prederror}.
1131 Quando @code{prederror} for @code{true},
1132 @code{is} reclama com uma mensagem de erro.
1133 De outra forma, @code{is} retorna @code{unknown}.
1135 Complementando @code{is},
1136 alguns outros operadores avaliam @code{equal} e @code{notequal} para @code{true} ou @code{false},
1137 a saber @code{if}, @code{and}, @code{or}, e @code{not}.
1139 @c FOLLOWING STATEMENT IS MORE OR LESS TRUE BUT I DON'T THINK THE DETAILS ARE CORRECT
1140 @c Declarations (integer, complex, etc)
1141 @c for variables appearing in @var{a} and @var{b} are ignored by @code{equal}.
1142 @c All variables are effectively assumed to be real-valued.
1144 A negaç@~{a}o de @code{equal} @'{e} @code{notequal}.
1148 Por si mesmo, @code{equal} n@~{a}o avalia ou simplifica.
1151 @c equal (x^2 - 1, (x + 1) * (x - 1));
1152 @c equal (x, x + 1);
1156 (%i1) equal (x^2 - 1, (x + 1) * (x - 1));
1158 (%o1) equal(x - 1, (x - 1) (x + 1))
1159 (%i2) equal (x, x + 1);
1160 (%o2) equal(x, x + 1)
1165 A funç@~{a}o @code{is} tenta avaliar @code{equal} para um valor Booleano.
1166 @code{is(equal(@var{a}, @var{b}))} retorna @code{true} quando @code{ratsimp(@var{a} - @var{b})} retornar 0.
1167 Duas express@~{o}es podem ser equivalentes mesmo se n@~{a}o forem sintaticamente iguais (i.e., identicas).
1170 @c ratsimp (x^2 - 1 - (x + 1) * (x - 1));
1171 @c is (equal (x^2 - 1, (x + 1) * (x - 1)));
1172 @c is (x^2 - 1 = (x + 1) * (x - 1));
1173 @c ratsimp (x - (x + 1));
1174 @c is (equal (x, x + 1));
1177 @c is (equal (x, y));
1181 (%i1) ratsimp (x^2 - 1 - (x + 1) * (x - 1));
1183 (%i2) is (equal (x^2 - 1, (x + 1) * (x - 1)));
1185 (%i3) is (x^2 - 1 = (x + 1) * (x - 1));
1187 (%i4) ratsimp (x - (x + 1));
1189 (%i5) is (equal (x, x + 1));
1191 (%i6) is (x = x + 1);
1193 (%i7) ratsimp (x - y);
1195 (%i8) is (equal (x, y));
1201 Quando @code{is} falha em reduzir @code{equal} a @code{true} ou @code{false},
1202 o resultado @'{e} governado atrav@'{e}s do sinalizador global @code{prederror}.
1205 @c [aa : x^2 + 2*x + 1, bb : x^2 - 2*x - 1];
1206 @c ratsimp (aa - bb);
1207 @c prederror : true;
1208 @c is (equal (aa, bb));
1209 @c prederror : false;
1210 @c is (equal (aa, bb));
1213 (%i1) [aa : x^2 + 2*x + 1, bb : x^2 - 2*x - 1];
1215 (%o1) [x + 2 x + 1, x - 2 x - 1]
1216 (%i2) ratsimp (aa - bb);
1218 (%i3) prederror : true;
1220 (%i4) is (equal (aa, bb));
1221 Maxima was unable to evaluate the predicate:
1223 equal(x + 2 x + 1, x - 2 x - 1)
1224 -- an error. Quitting. To debug this try debugmode(true);
1225 (%i5) prederror : false;
1227 (%i6) is (equal (aa, bb));
1231 Alguns operadores avaliam @code{equal} e @code{notequal} para @code{true} ou @code{false}.
1234 @c if equal (y, y - 1) then FOO else BAR;
1235 @c eq_1 : equal (x, x + 1);
1236 @c eq_2 : equal (y^2 + 2*y + 1, (y + 1)^2);
1237 @c [eq_1 and eq_2, eq_1 or eq_2, not eq_1];
1240 (%i1) if equal (y, y - 1) then FOO else BAR;
1242 (%i2) eq_1 : equal (x, x + 1);
1243 (%o2) equal(x, x + 1)
1244 (%i3) eq_2 : equal (y^2 + 2*y + 1, (y + 1)^2);
1246 (%o3) equal(y + 2 y + 1, (y + 1) )
1247 (%i4) [eq_1 and eq_2, eq_1 or eq_2, not eq_1];
1248 (%o4) [false, true, true]
1251 Devido a @code{not @var{expr}} fazer com que ocorra a avaliaç@~{a}o de @var{expr},
1252 @code{not equal(@var{a}, @var{b})} @'{e} equivalente a @code{is(notequal(@var{a}, @var{b}))}.
1255 @c [notequal (2*z, 2*z - 1), not equal (2*z, 2*z - 1)];
1256 @c is (notequal (2*z, 2*z - 1));
1259 (%i1) [notequal (2*z, 2*z - 1), not equal (2*z, 2*z - 1)];
1260 (%o1) [notequal(2 z, 2 z - 1), true]
1261 (%i2) is (notequal (2*z, 2*z - 1));
1267 @deffn {Funç@~{a}o} floor (@var{x})
1269 Quando @var{x} for um n@'{u}mero real, retorna o maior inteiro que
1270 @'{e} menor que ou igual a @var{x}.
1272 Se @var{x} for uma express@~{a}o constante (@code{10 * %pi}, for exemplo),
1273 @code{floor} avalia @var{x} usando grandes n@'{u}meros em ponto flutuante, e
1274 aplica @code{floor} ao grande n@'{u}mero em ponto flutuante resultante. Porque @code{floor} usa
1275 avaliaç@~{a}o em ponto flutuante, @'{e} poss@'{i}vel, embora improv@'{a}vel,
1276 que @code{floor} n@~{a}o possa retornar um valor err@^{o}neo para entradas
1277 constantes. Para prevenir erros, a avaliaç@~{a}o de ponto flutuante
1278 @'{e} conclu@'{i}da usando tr@^{e}s valores para @code{fpprec}.
1280 Para entradas n@~{a}o constantes, @code{floor} tenta retornar um valor
1281 simplificado. Aqui est@'{a} exemplos de simplificaç@~{o}es que @code{floor}
1285 @c floor (ceiling (x));
1286 @c floor (floor (x));
1287 @c declare (n, integer)$
1288 @c [floor (n), floor (abs (n)), floor (min (n, 6))];
1289 @c assume (x > 0, x < 1)$
1294 (%i1) floor (ceiling (x));
1296 (%i2) floor (floor (x));
1298 (%i3) declare (n, integer)$
1299 (%i4) [floor (n), floor (abs (n)), floor (min (n, 6))];
1300 (%o4) [n, abs(n), min(n, 6)]
1301 (%i5) assume (x > 0, x < 1)$
1304 (%i7) tex (floor (a));
1305 $$\left \lfloor a \right \rfloor$$
1309 A funç@~{a}o @code{floor} n@~{a}o mapeia automaticamente sobre listas ou matrizes.
1310 Finalmente, para todas as entradas que forem manifestamente complexas, @code{floor} retorna
1311 uma forma substantiva.
1313 Se o intervalo de uma funç@~{a}o for um subconjunto dos inteiros, o intervalo pode ser
1314 declarado @code{integervalued}. Ambas as funç@~{o}es @code{ceiling} e @code{floor}
1315 podem usar essa informaç@~{a}o; por exemplo:
1318 @c declare (f, integervalued)$
1320 @c ceiling (f(x) - 1);
1323 (%i1) declare (f, integervalued)$
1326 (%i3) ceiling (f(x) - 1);
1332 @deffn {Funç@~{a}o} notequal (@var{a}, @var{b})
1333 Represents the negation of @code{equal(@var{a}, @var{b})}.
1339 @c maybe (equal (a, b));
1341 @c not equal (a, b);
1342 @c maybe (notequal (a, b));
1345 @c maybe (equal (a, b));
1347 @c maybe (notequal (a, b));
1352 (%i2) maybe (equal (a, b));
1354 (%i3) notequal (a, b);
1355 (%o3) notequal(a, b)
1356 (%i4) not equal (a, b);
1357 (%o4) notequal(a, b)
1358 (%i5) maybe (notequal (a, b));
1360 (%i6) assume (a > b);
1364 (%i8) maybe (equal (a, b));
1366 (%i9) notequal (a, b);
1367 (%o9) notequal(a, b)
1368 (%i10) maybe (notequal (a, b));
1374 @c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
1375 @c NOTE THAT eval IS RECOGNIZED ONLY AS AN ARGUMENT TO ev,
1376 @c BUT FOR SOME REASON eval DOES NOT HAVE THE evflag PROPERTY
1377 @deffn {Operador} eval
1378 Como um argumento em uma chamada a @code{ev (@var{expr})},
1379 @code{eval} causa uma avaliaç@~{a}o extra de @var{expr}.
1384 @deffn {Funç@~{a}o} evenp (@var{expr})
1385 Retorna @code{true} se @var{expr} for um inteiro sempre.
1386 @c THIS IS STRANGE -- SHOULD RETURN NOUN FORM IF INDETERMINATE
1387 @code{false} @'{e} retornado em todos os outros casos.
1391 @deffn {Funç@~{a}o} fix (@var{x})
1392 Um sin@^{o}nimo para @code{entier (@var{x})}.
1396 @deffn {Funç@~{a}o} fullmap (@var{f}, @var{expr_1}, ...)
1397 Similar a @code{map}, mas @code{fullmap} mant@'{e}m mapeadas para
1398 baixo todas as subexpress@~{o}es at@'{e} que os operadores principais n@~{a}o mais sejam os
1401 @code{fullmap} @'{e} usada pelo simplificador do
1402 Maxima para certas manipulaç@~{o}es de matrizes; dessa forma, Maxima algumas vezes gera
1403 uma mensagem de erro concernente a @code{fullmap} mesmo apesar de @code{fullmap} n@~{a}o ter sido
1404 explicitamente chamada pelo usu@'{a}rio.
1416 (%i2) fullmap (g, %);
1417 (%o2) g(b) g(c) + g(a)
1418 (%i3) map (g, %th(2));
1424 @deffn {Funç@~{a}o} fullmapl (@var{f}, @var{list_1}, ...)
1425 Similar a @code{fullmap}, mas @code{fullmapl} somente mapeia sobre
1431 @c fullmapl ("+", [3, [4, 5]], [[a, 1], [0, -1.5]]);
1434 (%i1) fullmapl ("+", [3, [4, 5]], [[a, 1], [0, -1.5]]);
1435 (%o1) [[a + 3, 4], [4, 3.5]]
1440 @deffn {Funç@~{a}o} is (@var{expr})
1441 Tenta determinar se a @var{expr} predicada (express@~{o}es que avaliam para @code{true}
1442 ou @code{false}) @'{e} dedut@'{i}vel de fatos localizados na base de dados de @code{assume}.
1444 Se a dedutibilidade do predicado for @code{true} ou @code{false},
1445 @code{is} retorna @code{true} ou @code{false}, respectivamente.
1446 De outra forma, o valor de retorno @'{e} governado atrav@'{e}s do sinalizador global @code{prederror}.
1447 Quando @code{prederror} for @code{true},
1448 @code{is} reclama com uma mensagem de erro.
1449 De outra forma, @code{is} retorna @code{unknown}.
1451 @code{ev(@var{expr}, pred)}
1452 (que pode ser escrita da forma @code{@var{expr}, pred} na linha de comando interativa)
1453 @'{e} equivalente a @code{is(@var{expr})}.
1455 Veja tamb@'{e}m @code{assume}, @code{facts}, e @code{maybe}.
1459 @code{is} causa avaliaç@~{a}o de predicados.
1462 @c @'{e} (%pi > %e);
1467 (%i2) @'{e} (%pi > %e);
1471 @code{is} tenta derivar predicados da base de dados do @code{assume}.
1478 @c @'{e} (equal (a, c));
1481 (%i1) assume (a > b);
1483 (%i2) assume (b > c);
1485 (%i3) @'{e} (a < b);
1487 (%i4) @'{e} (a > c);
1489 (%i5) @'{e} (equal (a, c));
1493 Se @code{is} n@~{a}o puder nem comprovar nem refutar uma forma predicada a partir da base de dados de @code{assume},
1494 o sinalizador global @code{prederror} governa o comportamento de @code{is}.
1500 @c prederror: false$
1504 (%i1) assume (a > b);
1506 (%i2) prederror: true$
1507 (%i3) @'{e} (a > 0);
1508 Maxima was unable to evaluate the predicate:
1510 -- an error. Quitting. To debug this try debugmode(true);
1511 (%i4) prederror: false$
1512 (%i5) @'{e} (a > 0);
1518 @deffn {Funç@~{a}o} maybe (@var{expr})
1519 Tenta determinar se a @var{expr} predicada
1520 @'{e} dedut@'{i}vel dos fatos na base de dados de @code{assume}.
1522 Se a dedutibilidade do predicado for @code{true} ou @code{false},
1523 @code{maybe} retorna @code{true} ou @code{false}, respectivamente.
1524 De outra forma, @code{maybe} retorna @code{unknown}.
1526 @code{maybe} @'{e} funcinalmente equivalente a @code{is} com @code{prederror: false},
1527 mas o resultado @'{e} computado sem atualmente atribuir um valor a @code{prederror}.
1529 Veja tamb@'{e}m @code{assume}, @code{facts}, e @code{is}.
1539 (%i1) maybe (x > 0);
1541 (%i2) assume (x > 1);
1543 (%i3) maybe (x > 0);
1549 @deffn {Funç@~{a}o} isqrt (@var{x})
1550 Retorna o "inteiro ra@'{i}z quadrada"
1551 do valor absoluto de @var{x},
1552 que @'{e} um inteiro.
1556 @deffn {Funç@~{a}o} lmax (@var{L})
1558 Quando @var{L} for uma lista ou um conjunto, retorna @code{apply ('max, args (@var{L}))}. Quando @var{L} n@~{a}o for uma
1559 lista ou tamb@'{e}m n@~{a}o for um conjunto, sinaliza um erro.
1563 @deffn {Funç@~{a}o} lmin (@var{L})
1565 Quando @var{L} for uma lista ou um conjunto, retorna @code{apply ('min, args (@var{L}))}. Quando @var{L} n@~{a}o for uma
1566 lista ou ou tamb@'{e}m n@~{a}o for um conjunto, sinaliza um erro.
1570 @deffn {Funç@~{a}o} max (@var{x_1}, ..., @var{x_n})
1572 Retorna um valor simplificado para o m@'{a}ximo entre as express@~{o}es @var{x_1} a @var{x_n}.
1573 Quando @code{get (trylevel, maxmin)}, for dois ou mais, @code{max} usa a simplificaç@~{a}o
1574 @code{max (e, -e) --> |e|}. Quando @code{get (trylevel, maxmin)} for 3 ou mais, @var{max} tenta
1575 eliminar express@~{o}es que estiverem entre dois outros argumentos; por exemplo,
1576 @code{max (x, 2*x, 3*x) --> max (x, 3*x)}. Para escolher o valor de @code{trylevel} para 2, use
1577 @code{put (trylevel, 2, maxmin)}.
1581 @deffn {Funç@~{a}o} min (@var{x_1}, ..., @var{x_n})
1583 Retorna um valor simplificado para o m@'{i}nimo entre as express@~{o}es @code{x_1} at@'{e} @code{x_n}.
1584 Quando @code{get (trylevel, maxmin)}, for 2 ou mais, @code{min} usa a simplificaç@~{a}o
1585 @code{min (e, -e) --> -|e|}. Quando @code{get (trylevel, maxmin)} for 3 ou mais, @code{min} tenta
1586 eliminar express@~{o}es que estiverem entre dois outros argumentos; por exemplo,
1587 @code{min (x, 2*x, 3*x) --> min (x, 3*x)}. Para escolher o valor de @code{trylevel} para 2, use
1588 @code{put (trylevel, 2, maxmin)}.
1592 @deffn {Funç@~{a}o} polymod (@var{p})
1593 @deffnx {Funç@~{a}o} polymod (@var{p}, @var{m})
1594 Converte o polin@^{o}mio @var{p} para uma representaç@~{a}o modular
1595 com relaç@~{a}o ao m@'{o}dulo corrente que @'{e} o valor da vari@'{a}vel
1598 @code{polymod (@var{p}, @var{m})} especifica um m@'{o}dulo @var{m} para ser usado
1599 em lugar do valor corrente de @code{modulus}.
1601 Veja @code{modulus}.
1605 @deffn {Funç@~{a}o} mod (@var{x}, @var{y})
1607 Se @var{x} e @var{y} forem n@'{u}meros reais e @var{y} for n@~{a}o nulo,
1608 retorna @code{@var{x} - @var{y} * floor(@var{x} / @var{y})}.
1609 Adicionalmente para todo real @var{x}, n@'{o}s temos @code{mod (@var{x}, 0) = @var{x}}. Para uma discurs@~{a}o da
1610 definiç@~{a}o @code{mod (@var{x}, 0) = @var{x}}, veja a Seç@~{a}o 3.4, de "Concrete Mathematics,"
1611 por Graham, Knuth, e Patashnik. A funç@~{a}o @code{mod (@var{x}, 1)}
1612 @'{e} uma funç@~{a}o dente de serra com per@'{i}odo 1 e com @code{mod (1, 1) = 0} e
1613 @code{mod (0, 1) = 0}.
1615 Para encontrar o argumento (um n@'{u}mero no intervalo @code{(-%pi, %pi]}) de um
1616 n@'{u}mero complexo, use a funç@~{a}o @code{@var{x} |-> %pi - mod (%pi - @var{x}, 2*%pi)}, onde
1617 @var{x} @'{e} um argumento.
1619 Quando @var{x} e @var{y} forem express@~{o}es constantes (@code{10 * %pi}, por exemplo), @code{mod}
1620 usa o mesmo esquema de avaliaç@~{a}o em ponto flutuante que @code{floor} e @code{ceiling} usam.
1621 Novamente, @'{e} poss@'{i}vel, embora improv@'{a}vel, que @code{mod} possa retornar um
1622 valor err@^{o}neo nesses casos.
1624 Para argumentos n@~{a}o num@'{e}ricos @var{x} ou @var{y}, @code{mod }conhece muitas regras de
1635 (%i2) mod (a*x, a*y);
1643 @deffn {Funç@~{a}o} oddp (@var{expr})
1644 @'{e} @code{true} se @var{expr} for um inteiro @'{i}mpar.
1645 @c THIS IS STRANGE -- SHOULD RETURN NOUN FORM IF INDETERMINATE
1646 @code{false} @'{e} retornado em todos os outros casos.
1650 @c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
1651 @c NOTE THAT pred IS RECOGNIZED ONLY AS AN ARGUMENT TO ev,
1652 @c BUT FOR SOME REASON pred DOES NOT HAVE THE evflag PROPERTY
1653 @deffn {Operador} pred
1654 Como um argumento em uma chamada a @code{ev (@var{expr})},
1655 @code{pred} faz com que predicados (express@~{o}es que avaliam para @code{true}
1656 ou @code{false}) sejam avaliados.
1661 @deffn {Funç@~{a}o} make_random_state (@var{n})
1662 @deffnx {Funç@~{a}o} make_random_state (@var{s})
1663 @deffnx {Funç@~{a}o} make_random_state (true)
1664 @deffnx {Funç@~{a}o} make_random_state (false)
1665 @c OMIT THIS FOR NOW. SEE COMMENT BELOW.
1666 @c @defunx make_random_state (@var{a})
1667 Um objeto de estado rand@^{o}mico representa o estado do gerador de n@'{u}meros rand@^{o}micos (aleat@'{o}rios).
1668 O estado compreende 627 palavras de 32 bits.
1670 @code{make_random_state (@var{n})} retorna um novo objeto de estado rand@^{o}mico
1671 criado de um valor inteiro semente igual a @var{n} modulo 2^32.
1672 @var{n} pode ser negativo.
1674 @c OMIT THIS FOR NOW. NOT SURE HOW THIS IS SUPPOSED TO WORK.
1675 @c @code{make_random_state (@var{a})} returns a new random state object
1676 @c created from an array @var{a}, which must be a Lisp array of 32 unsigned bytes.
1678 @code{make_random_state (@var{s})} retorna uma copia do estado rand@^{o}mico @var{s}.
1680 @code{make_random_state (true)} retorna um novo objeto de estado rand@^{o}mico,
1681 usando a hora corrente do rel@'{o}gio do computador como semente.
1683 @code{make_random_state (false)} retorna uma c@'{o}pia do estado corrente
1684 do gerador de n@'{u}meros rand@^{o}micos.
1688 @deffn {Funç@~{a}o} set_random_state (@var{s})
1689 Copia @var{s} para o estado do gerador de n@'{u}meros rand@^{o}micos.
1691 @code{set_random_state} sempre retorna @code{done}.
1695 @deffn {Funç@~{a}o} random (@var{x})
1696 Retorna um n@'{u}mero pseudorand@^{o}mico. Se @var{x} @'{e} um inteiro, @code{random (@var{x})} retorna um
1697 inteiro de 0 a @code{@var{x} - 1} inclusive. Se @var{x} for um n@'{u}mero em ponto flutuante,
1698 @code{random (@var{x})} retorna um n@'{u}mero n@~{a}o negativo em ponto flutuante menor que @var{x}.
1699 @code{random} reclama com um erro se @var{x} n@~{a}o for nem um inteiro nem um n@'{u}mero em ponto flutuante,
1700 ou se @var{x} n@~{a}o for positivo.
1702 As funç@~{o}es @code{make_random_state} e @code{set_random_state}
1703 mant@'{e}m o estado do gerador de n@'{u}meros rand@^{o}micos.
1705 O gerador de n@'{u}meros rand@^{o}micos do Maxima @'{e} uma implementaç@~{a}o do algor@'{i}tmo de Mersenne twister MT 19937.
1710 @c s1: make_random_state (654321)$
1711 @c set_random_state (s1);
1713 @c random (9573684);
1715 @c s2: make_random_state (false)$
1719 @c set_random_state (s2);
1725 (%i1) s1: make_random_state (654321)$
1726 (%i2) set_random_state (s1);
1728 (%i3) random (1000);
1730 (%i4) random (9573684);
1732 (%i5) random (2^75);
1733 (%o5) 11804491615036831636390
1734 (%i6) s2: make_random_state (false)$
1736 (%o7) .2310127244107132
1737 (%i8) random (10.0);
1738 (%o8) 4.394553645870825
1739 (%i9) random (100.0);
1740 (%o9) 32.28666704056853
1741 (%i10) set_random_state (s2);
1743 (%i11) random (1.0);
1744 (%o11) .2310127244107132
1745 (%i12) random (10.0);
1746 (%o12) 4.394553645870825
1747 (%i13) random (100.0);
1748 (%o13) 32.28666704056853
1753 @deffn {Funç@~{a}o} rationalize (@var{expr})
1755 Converte todos os n@'{u}meros em ponto flutuante de precis@~{a}o dupla e grandes n@'{u}meros em ponto flutuante na express@~{a}o do Maxima
1756 @var{expr} para seus exatos equivalentes racionais. Se voc@^{e} n@~{a}o estiver faminilarizado com
1757 a representaç@~{a}o bin@'{a}ria de n@'{u}meros em ponto flutuante, voc@^{e} pode se
1758 surpreender que @code{rationalize (0.1)} n@~{a}o seja igual a 1/10. Esse comportamento
1759 n@~{a}o @'{e} especial para o Maxima -- o n@'{u}mero 1/10 tem uma representaç@~{a}o bin@'{a}ria
1760 repetitiva e n@~{a}o terminada.
1763 @c rationalize (0.5);
1764 @c rationalize (0.1);
1766 @c rationalize (0.1b0);
1768 @c rationalize (0.1b0);
1769 @c rationalize (sin (0.1*x + 5.6));
1772 (%i1) rationalize (0.5);
1776 (%i2) rationalize (0.1);
1781 (%i4) rationalize (0.1b0);
1786 (%i6) rationalize (0.1b0);
1787 236118324143482260685
1788 (%o6) ----------------------
1789 2361183241434822606848
1790 (%i7) rationalize (sin (0.1*x + 5.6));
1796 Exemplo de utilizaç@~{a}o:
1799 @c unitfrac(r) := block([uf : [], q],
1800 @c if not(ratnump(r)) then error("A entrada para 'unitfrac' deve ser um n@'{u}mero racional"),
1802 @c uf : cons(q : 1/ceiling(1/r), uf),
1807 @c unitfrac (-9/10);
1809 @c unitfrac (36/37);
1813 (%i1) unitfrac(r) := block([uf : [], q],
1814 if not(ratnump(r)) then error("The input to 'unitfrac' must be a rational number"),
1816 uf : cons(q : 1/ceiling(1/r), uf),
1819 (%o1) unitfrac(r) := block([uf : [], q],
1820 if not ratnump(r) then error("The input to 'unitfrac' must be a rational number"
1822 ), while r # 0 do (uf : cons(q : ----------, uf), r : r - q),
1827 (%i2) unitfrac (9/10);
1831 (%i3) apply ("+", %);
1835 (%i4) unitfrac (-9/10);
1839 (%i5) apply ("+", %);
1843 (%i6) unitfrac (36/37);
1845 (%o6) [-, -, -, --, ----]
1847 (%i7) apply ("+", %);
1855 @deffn {Funç@~{a}o} sign (@var{expr})
1856 Tenta determinar o sinal de @var{expr}
1857 a partir dos fatos na base de dados corrente. Retorna uma das
1858 seguintes respostar: @code{pos} (positivo), @code{neg} (negativo), @code{zero}, @code{pz}
1859 (positivo ou zero), @code{nz} (negativo ou zero), @code{pn} (positivo ou negativo),
1860 ou @code{pnz} (positivo, negativo, ou zero, i.e. nada se sabe sobre o sinal da epress@~{a}o).
1864 @deffn {Funç@~{a}o} signum (@var{x})
1865 Para um @var{x} num@'{e}rico retorna 0 se @var{x} for 0, de outra forma retorna -1 ou +1
1866 @`a medida que @var{x} seja menor ou maior que 0, respectivamente.
1868 Se @var{x} n@~{a}o for num@'{e}rico ent@~{a}o uma forma simplificada mas equivalente @'{e} retornada.
1869 Por exemplo, @code{signum(-x)} fornece @code{-signum(x)}.
1870 @c UMM, THIS ISN'T THE WHOLE STORY, AS IT APPEARS signum CONSULTS THE assume DATABASE FOR SYMBOLIC ARGUMENT
1874 @deffn {Funç@~{a}o} sort (@var{L}, @var{P})
1875 @deffnx {Funç@~{a}o} sort (@var{L})
1876 Organiza uma lista @var{L} coforme o predicado @code{P} de dois argumentos,
1877 de forma que @code{@var{P} (@var{L}[k], @var{L}[k + 1])} seja @code{true}
1878 para qualquer dois elementos sucessivos.
1879 O predicado pode ser especificado como o nome de uma funç@~{a}o ou operador bin@'{a}rio infixo,
1880 ou como uma express@~{a}o @code{lambda}.
1881 Se especificado como o nome de um operador,
1882 o nome deve ser contido entre "aspas duplas".
1884 A lista ordenada @'{e} retornada como novo objeto;
1885 o argumento @var{L} n@~{a}o @'{e} modificado.
1886 Para construir o valor de retorno,
1887 @code{sort} faz uma c@'{o}pia superficial dos elementos de @var{L}.
1888 @c DUNNO IF WE NEED TO GO INTO THE IMPLICATIONS OF SHALLOW COPY HERE ...
1889 @c MIGHT CONSIDER A REF FOR TOTAL ORDER HERE
1890 Se o predicado @var{P} n@~{a}o for uma ordem total sobre os elementos de @var{L},
1891 ent@~{a}o @code{sort} possivelvente pode executar para concluir sem error,
1892 mas os resultados s@~{a}o indefinidos.
1893 @code{sort} reclama se o predicado avaliar para alguma outra coisa
1894 que n@~{a}o seja @code{true} ou @code{false}.
1896 @code{sort (@var{L})} @'{e} equivalente a @code{sort (@var{L}, orderlessp)}.
1897 Isto @'{e}, a ordem padr@~{a}o de organizaç@~{a}o @'{e} ascendente,
1898 como determinado por @code{orderlessp}.
1899 Todos os @'{a}tomos do Maxima e express@~{o}es s@~{a}o compar@'{a}veis sob @code{orderlessp},
1900 embora exista exemplos isolados de express@~{o}es para as quais @code{orderlessp} n@~{a}o @'{e} transitiva;
1901 isso @'{e} uma falha.
1906 @c sort ([11, -17, 29b0, 7.55, 3, -5/2, b + a, 9 * c, 19 - 3 * x]);
1907 @c sort ([11, -17, 29b0, 7.55, 3, -5/2, b + a, 9 * c, 19 - 3 * x], ordergreatp);
1908 @c sort ([%pi, 3, 4, %e, %gamma]);
1909 @c sort ([%pi, 3, 4, %e, %gamma], "<");
1910 @c my_list : [[aa, hh, uu], [ee, cc], [zz, xx, mm, cc], [%pi, %e]];
1912 @c sort (my_list, lambda ([a, b], orderlessp (reverse (a), reverse (b))));
1915 (%i1) sort ([11, -17, 29b0, 7.55, 3, -5/2, b + a, 9 * c, 19 - 3 * x]);
1917 (%o1) [- 17, - -, 3, 7.55, 11, 2.9b1, b + a, 9 c, 19 - 3 x]
1919 (%i2) sort ([11, -17, 29b0, 7.55, 3, -5/2, b + a, 9 * c, 19 - 3 * x], ordergreatp);
1921 (%o2) [19 - 3 x, 9 c, b + a, 2.9b1, 11, 7.55, 3, - -, - 17]
1923 (%i3) sort ([%pi, 3, 4, %e, %gamma]);
1924 (%o3) [3, 4, %e, %gamma, %pi]
1925 (%i4) sort ([%pi, 3, 4, %e, %gamma], "<");
1926 (%o4) [%gamma, %e, 3, %pi, 4]
1927 (%i5) my_list : [[aa, hh, uu], [ee, cc], [zz, xx, mm, cc], [%pi, %e]];
1928 (%o5) [[aa, hh, uu], [ee, cc], [zz, xx, mm, cc], [%pi, %e]]
1929 (%i6) sort (my_list);
1930 (%o6) [[%pi, %e], [aa, hh, uu], [ee, cc], [zz, xx, mm, cc]]
1931 (%i7) sort (my_list, lambda ([a, b], orderlessp (reverse (a), reverse (b))));
1932 (%o7) [[%pi, %e], [ee, cc], [zz, xx, mm, cc], [aa, hh, uu]]
1937 @deffn {Funç@~{a}o} sqrt (@var{x})
1938 A ra@'{i}z quadrada de @var{x}. @'{E} representada internamente por
1939 @code{@var{x}^(1/2)}. Veja tamb@'{e}m @code{rootscontract}.
1941 @code{radexpand} se @code{true} far@'{a} com que n-@'{e}simas ra@'{i}zes de fatores de um produto
1942 que forem pot@^{e}ncias de n sejam colocados fora do radical, e.g.
1943 @code{sqrt(16*x^2)} retonar@'{a} @code{4*x} somente se @code{radexpand} for @code{true}.
1947 @defvr {Vari@'{a}vel de opç@~{a}o} sqrtdispflag
1948 Valor padr@~{a}o: @code{true}
1950 Quando @code{sqrtdispflag} for @code{false},
1951 faz com que @code{sqrt} seja mostrado como expoente 1/2.
1952 @c AND OTHERWISE ... ??
1956 @c NEEDS EXPANSION, CLARIFICATION, MORE EXAMPLES
1957 @c sublis CAN ONLY SUBSTITUTE FOR ATOMS, RIGHT ?? IF SO, SAY SO
1958 @deffn {Funç@~{a}o} sublis (@var{lista}, @var{expr})
1959 Faz multiplas substituiç@~{o}es paralelas dentro de uma express@~{a}o.
1961 A vari@'{a}vel @code{sublis_apply_lambda} controla a simplificaç@~{a}o ap@'{o}s
1968 @c sublis ([a=b, b=a], sin(a) + cos(b));
1974 @deffn {Funç@~{a}o} sublist (@var{lista}, @var{p})
1975 Retorna a lista de elementos da @var{lista} da qual o
1976 predicado @code{p} retornar @code{true}.
1981 @c L: [1, 2, 3, 4, 5, 6];
1982 @c sublist (L, evenp);
1985 (%i1) L: [1, 2, 3, 4, 5, 6];
1986 (%o1) [1, 2, 3, 4, 5, 6]
1987 (%i2) sublist (L, evenp);
1993 @defvr {Vari@'{a}vel de opç@~{a}o} sublis_apply_lambda
1994 Valor padr@~{a}o: @code{true} - controla se os substitutos de
1995 @code{lambda} s@~{a}o aplicados na simplificaç@~{a}o ap@'{o}s as @code{sublis} serem usadas ou
1996 se voc@^{e} tem que fazer um @code{ev} para pegar coisas para aplicar. @code{true} significa faça a
2001 @c NEEDS CLARIFICATION, MORE EXAMPLES
2002 @deffn {Funç@~{a}o} subst (@var{a}, @var{b}, @var{c})
2003 Substitue @var{a} por @var{b} em @var{c}. @var{b} deve ser um @'{a}tomo ou uma
2004 subexpress@~{a}o completa de @var{c}. Por exemplo, @code{x+y+z} @'{e} uma subexpress@~{a}o
2005 completa de @code{2*(x+y+z)/w} enquanto @code{x+y} n@~{a}o @'{e}. Quando @var{b} n@~{a}o tem
2006 essas caracter@'{i}sticas, pode-se algumas vezes usar @code{substpart} ou @code{ratsubst}
2007 (veja abaixo). Alternativamente, se @var{b} for da forma de @code{e/f} ent@~{a}o se poder@'{a}
2008 usar @code{subst (a*f, e, c)} enquanto se @var{b} for da forma @code{e^(1/f)} ent@~{a}o se poder@'{a}
2009 usar @code{subst (a^f, e, c)}. O comando @code{subst} tamb@'{e}m discerne o @code{x^y} de @code{x^-y}
2010 de modo que @code{subst (a, sqrt(x), 1/sqrt(x))} retorna @code{1/a}. @var{a} e @var{b} podem tamb@'{e}m ser
2011 operadores de uma express@~{a}o contida entre aspas duplas @code{"} ou eles podem ser nomes de
2012 funç@~{a}o. Se se desejar substituir por uma vari@'{a}vel independente em
2013 formas derivadas ent@~{a}o a funç@~{a}o @code{at} (veja abaixo) poder@'{a} ser usada.
2015 @c UMM, REVERSE THIS AND MOVE IT TO substitute ??
2016 @code{subst} @'{e} um @'{a}lias para @code{substitute}.
2018 @code{subst (@var{eq_1}, @var{expr})} ou @code{subst ([@var{eq_1}, ..., @var{eq_k}], @var{expr})}
2019 s@~{a}o outras formas
2020 permitidas. As @var{eq_i} s@~{a}o equaç@~{o}es indicando substituiç@~{o}es a serem feitas.
2021 Para cada equaç@~{a}o, o lado direito ser@'{a} substitu@'{i}do pelo lado esquerdo na
2022 express@~{a}o @var{expr}.
2024 @code{exptsubst} se @code{true} permite que substituiç@~{o}es
2025 como @code{y} por @code{%e^x} em @code{%e^(a*x)} ocorram.
2027 @c WHAT IS THIS ABOUT ??
2028 Quando @code{opsubst} for @code{false},
2029 @code{subst} tentar@'{a} substituir dentro do operador de uma express@~{a}o.
2030 E.g. @code{(opsubst: false, subst (x^2, r, r+r[0]))} trabalhar@'{a}.
2035 (%i1) subst (a, x+y, x + (x+y)^2 + y);
2038 (%i2) subst (-%i, %i, a + b*%i);
2043 Para exemplos adicionais, faça @code{example (subst)}.
2047 @c NEEDS CLARIFICATION
2048 @deffn {Funç@~{a}o} substinpart (@var{x}, @var{expr}, @var{n_1}, ..., @var{n_k})
2049 Similar a @code{substpart}, mas @code{substinpart} trabalha sobre a
2050 representaç@~{a}o interna de @var{expr}.
2055 @c x . 'diff (f(x), x, 2);
2056 @c substinpart (d^2, %, 2);
2057 @c substinpart (f1, f[1](x + 1), 0);
2060 (%i1) x . 'diff (f(x), x, 2);
2063 (%o1) x . (--- (f(x)))
2066 (%i2) substinpart (d^2, %, 2);
2069 (%i3) substinpart (f1, f[1](x + 1), 0);
2073 Se o @'{u}ltimo argumento para a funç@~{a}o @code{part} for uma lista de @'{i}ndices ent@~{a}o
2074 muitas subexpress@~{o}es s@~{a}o escolhidas, cada uma correspondendo a um
2075 @'{i}ndice da lista. Dessa forma
2078 @c part (x + y + z, [1, 3]);
2081 (%i1) part (x + y + z, [1, 3]);
2085 @code{piece} recebe o valor da @'{u}ltima express@~{a}o selecionada quando usando as
2086 funç@~{o}es @code{part}. @code{piece} @'{e} escolhida durante a execuç@~{a}o da funç@~{a}o e
2087 dessa forma pode ser referenciada para a pr@'{o}pria funç@~{a}o como mostrado abaixo.
2088 Se @code{partswitch} for escolhida para @code{true} ent@~{a}o @code{end} @'{e} retornado quando uma
2089 parte selecionada de uma express@~{a}o n@~{a}o existir, de outra forma uma mensagem
2090 de erro @'{e} fornecida.
2093 @c expr: 27*y^3 + 54*x*y^2 + 36*x^2*y + y + 8*x^3 + x + 1;
2094 @c part (expr, 2, [1, 3]);
2096 @c substpart (factor (piece), expr, [1, 2, 3, 5]);
2097 @c expr: 1/x + y/x - 1/z;
2098 @c substpart (xthru (piece), expr, [2, 3]);
2101 (%i1) expr: 27*y^3 + 54*x*y^2 + 36*x^2*y + y + 8*x^3 + x + 1;
2103 (%o1) 27 y + 54 x y + 36 x y + y + 8 x + x + 1
2104 (%i2) part (expr, 2, [1, 3]);
2107 (%i3) sqrt (piece/54);
2109 (%i4) substpart (factor (piece), expr, [1, 2, 3, 5]);
2111 (%o4) (3 y + 2 x) + y + x + 1
2112 (%i5) expr: 1/x + y/x - 1/z;
2116 (%i6) substpart (xthru (piece), expr, [2, 3]);
2122 Tamb@'{e}m, escolhendo a opç@~{a}o @code{inflag} para @code{true} e chamando @code{part} ou @code{substpart} @'{e}
2123 o mesmo que chamando @code{inpart} ou @code{substinpart}.
2127 @c NEEDS CLARIFICATION
2128 @deffn {Funç@~{a}o} substpart (@var{x}, @var{expr}, @var{n_1}, ..., @var{n_k})
2129 Substitue @var{x} para a subexpress@~{a}o
2130 selecionada pelo resto dos argumentos como em @code{part}. Isso retorna o
2131 novo valor de @var{expr}. @var{x} pode ser algum operador a ser substitu@'{i}do por um
2132 operador de @var{expr}. Em alguns casos @var{x} precisa ser contido em aspas duplas @code{"}
2133 (e.g. @code{substpart ("+", a*b, 0)} retorna @code{b + a}).
2137 @c substpart (3/2, %, 2, 1, 2);
2139 @c substpart ("+", %, 1, 0);
2147 (%i2) substpart (3/2, %, 2, 1, 2);
2152 (%i3) a*x + f (b, y);
2154 (%i4) substpart ("+", %, 1, 0);
2155 (%o4) x + f(b, y) + a
2158 Tamb@'{e}m, escolhendo a opç@~{a}o @code{inflag} para @code{true} e chamando @code{part} ou @code{substpart} @'{e}
2159 o mesmo que chamando @code{inpart} ou @code{substinpart}.
2163 @c NEEDS EXPANSION AND EXAMPLES
2164 @deffn {Funç@~{a}o} subvarp (@var{expr})
2165 Retorna @code{true} se @var{expr} for uma vari@'{a}vel subscrita (i.e. que possui @'{i}ndice ou subscrito em sua grafia), por exemplo
2170 @deffn {Funç@~{a}o} symbolp (@var{expr})
2171 Retorna @code{true} se @var{expr} for um s@'{i}mbolo, de outra forma retorna @code{false}.
2172 com efeito, @code{symbolp(x)} @'{e} equivalente ao predicado @code{atom(x) and not numberp(x)}.
2174 @c FOLLOWING REALLY WANTS TO BE @xref{Identiifers} BUT THAT
2175 @c LEAVES THE UNPLEASANT RESIDUE *Note ...:: IN THE OUTPUT OF describe
2176 Veja tamb@'{e}m @ref{Identificadores}
2180 @deffn {Funç@~{a}o} unorder ()
2181 Disabilita a aç@~{a}o de alias criada pelo @'{u}ltimo uso dos comandos
2182 de ordenaç@~{a}o @code{ordergreat} e @code{orderless}. @code{ordergreat} e @code{orderless} n@~{a}o podem
2183 ser usados mais que uma vez cada sem chamar @code{unorder}.
2184 Veja tamb@'{e}m @code{ordergreat} e @code{orderless}.
2188 @c HMM, IN THIS EXAMPLE, WHY ISN'T %o5 EQUAL TO ZERO ???
2203 (%i3) ordergreat (a);
2216 @c THIS ITEM SEEMS OUT OF PLACE -- IS IT FROM A SHARE PACKAGE ??
2218 @deffn {Funç@~{a}o} vectorpotential (@var{givencurl})
2219 Retorna o potencial do vetor de um dado
2220 vetor de torç@~{a}o, no sistema de coordenadas corrente.
2221 @code{potentialzeroloc} tem um papel similar ao de @code{potential}, mas a ordem dos
2222 lados esquerdos das equaç@~{o}es deve ser uma permutaç@~{a}o c@'{i}clica das
2223 vari@'{a}veis de coordenadas.
2227 @deffn {Funç@~{a}o} xthru (@var{expr})
2228 Combina todos os termos de @var{expr} (o qual pode ser uma adiç@~{a}o) sobre um
2229 denominador comum sem produtos e somas exponenciadas
2230 como @code{ratsimp} faz. @code{xthru} cancela fatores comuns no numerador e
2231 denominador de express@~{o}es racionais mas somente se os fatores s@~{a}o
2234 @c REPHRASE IN NEUTRAL TONE (GET RID OF "IT IS BETTER")
2235 Algumas vezes @'{e} melhor usar @code{xthru} antes de @code{ratsimp} em uma
2236 express@~{a}o com o objetivo de fazer com que fatores explicitos do m@'{a}ximo divisor comum entre o
2237 numerador e o denominador seja cancelado simplificando dessa forma a
2238 express@~{a}o a ser aplicado o @code{ratsimp}.
2241 @c ((x+2)^20 - 2*y)/(x+y)^20 + (x+y)^(-19) - x/(x+y)^20;
2245 (%i1) ((x+2)^20 - 2*y)/(x+y)^20 + (x+y)^(-19) - x/(x+y)^20;
2248 (%o1) --------- + --------------- - ---------
2250 (y + x) (y + x) (y + x)
2261 @c THIS FUNCTION APPEARS TO BE A HACK; SEE 4'TH ITEM BELOW
2262 @c DUNNO WHETHER WE CAN CLEAR THIS UP
2263 @deffn {Funç@~{a}o} zeroequiv (@var{expr}, @var{v})
2264 Testa se a express@~{a}o @var{expr} na vari@'{a}vel
2265 @var{v} @'{e} equivalente a zero, retornando @code{true}, @code{false}, ou
2266 @code{dontknow} (n@~{a}o sei).
2268 @code{zeroequiv} Tem essas restriç@~{o}es:
2271 N@~{a}o use funç@~{o}es que o Maxima n@~{a}o sabe como
2272 diferenciar e avaliar.
2274 Se a express@~{a}o tem postes sobre o eixo real, podem existir erros
2275 no resultado (mas isso @'{e} improv@'{a}vel ocorrer).
2277 Se a express@~{a}o contem funç@~{o}es que n@~{a}o s@~{a}o soluç@~{o}es para
2278 equaç@~{o}es diferenciais de primeira ordem (e.g. funç@~{o}es de Bessel) pode ocorrer
2279 resultados incorretos.
2281 O algor@'{i}tmo usa avaliaç@~{a}o em pontos aleat@'{o}riamente escolhidos para
2282 subexpress@~{o}es selecionadas cuidadosamente. Isso @'{e} sempre neg@'{o}cio um tanto
2283 quanto perigoso, embora o algor@'{i}tmo tente minimizar o
2288 @code{zeroequiv (sin(2*x) - 2*sin(x)*cos(x), x)} retorna
2289 @code{true} e @code{zeroequiv (%e^x + x, x)} retorna @code{false}.
2290 Por outro lado @code{zeroequiv (log(a*b) - log(a) - log(b), a)} retorna @code{dontknow} devido @`a
2291 presença de um par@^{a}metro extra @code{b}.