Fix bug #1848: taytorat leaks internal gensyms from multivar expansions
[maxima.git] / doc / info / pt / unit.texi
blobb9de3e2e5abf62e6e31edcc163bd45c9877d4f13
1 @c /unit.texi/1.2/Sun May 28 17:08:50 2006//
2 @menu
3 * Introdução a Units::       
4 * Definições para Units::       
5 @end menu
7 @node Introdução a Units, Definições para Units, unit, unit
8 @section Introdução a Units
10 O pacote @emph{unit} torna o utilizador apto a converter entre unidades
11 arbitrárias e trabalhar com dimensões em equações. O funcionamento desse pacote
12 é radicalmente diferente do pacote original units do Maxima - apesar de
13 o original conter uma lista básica de definições, o pacote actual usa um conjunto de regras para permitir
14 ao utilizador escolher, sobre uma base dimensional, qual a resposta fianl de unidade pode ser
15 convertida.  Isso irá separar unidades em lugar de misturá-las na tela,
16 permitindo ao utilizador durante a leitura identificar as unidades associadas com uma resposta em
17 particular.  Isso permitirá ao utilizador simplificar uma expressão em sua Base fundamental
18 de Unidades, bem como fornecer ajuste fino sobre a simplificação de unidades derivadas.
19 Análise dimensional é possível, e uma variedade de ferramentas está disponível para 
20 gerenciar a conversão e também uma variedade de opções de simplificação. Adicionalmente para personalizar
21 conversão automática, @emph{units} também fornede um manual tradicional 
22 de opções de conversão.  
24 Nota -quando conversões de unidade forem não exactas Maxima irá fazer aproximações resultando 
25 em frações. Esso é uma concequência das técnicas usadas para simplificar unidades.
26 A mensagem de alerta desse tipo de substituição está desabilitada por padrão no
27 caso de inidades (normalmente essas mensagens estão habilitadas) uma vez que essa situação de iemissão de mensagens de alerta ocorre frequêntemente
28 e os alertas confundem a saída.  (O estado actual de @code{ratprint} é restabelecido
29 após uma conversão de unidades, de forma que modificações de utilizador para aquela configuração irão ser preservadas 
30 de outra forma.)  Se o utilizador precisar dessa informação para @code{units}, ele pode escolher
31 @emph{unitverbose:on} para reativar a impressão de mensagens de alerta do
32 processo de conversão.
34 @emph{unit} está inclído no Maxima no directório share/contrib/unit directory. Isso segue
35 aos pacotes normais do Maxima conforme convenções:
37 @example
38 (%i1) load("unit")$
39 ******************************************************************* 
40 *                       Units version 0.50                        * 
41 *          Definitions based on the NIST Reference on             * 
42 *              Constants, Units, and Uncertainty                  * 
43 *       Conversion factors from various sources including         * 
44 *                   NIST and the GNU units package                * 
45 ******************************************************************* 
47 Redefining necessary functions... 
48 WARNING: DEFUN/DEFMACRO: redefining function TOPLEVEL-MACSYMA-EVAL ...
49 WARNING: DEFUN/DEFMACRO: redefining function MSETCHK ...
50 WARNING: DEFUN/DEFMACRO: redefining function KILL1 ...
51 WARNING: DEFUN/DEFMACRO: redefining function NFORMAT ...
52 Initializing unit arrays... 
53 Done.
54 @end example
56 As mensagens WARNING (DE ALERTA) são esperadas n ão uma causa de preocupação - elas indicam
57 que o pacote @emph{unit} está redefinindo funções anteriormente definidas no local adequado do Maxima.  
58 Essa redefinição é necessária com o bojetivo de manusear adequadamente as unidades.  O utilizador
59 pode estar consciente que se outras modificações tiverem sido feitas para essas funções por outros
60 pacotes essas novas mudanças irão ser sobrescritas por meio desse processo de disponibilização do pacote @code{unit}.
62 O ficheiro @emph{unit.mac} também chama um ficheiro lisp, a saber @emph{unit-functions.lisp}, que
63 contém as funçãoes lisp necessárias ao pacote.
65 Clifford Yapp é o autor primário.  Ele recebeu grande contribuição de
66 Barton Willis da University of Nebraska at Kearney (UNK), Robert Dodier, e
67 da intrépida tribo da lista de mensagens do Maxima.
69 Existem provavelmente muitos erros.  Diga-me quais.  @code{float} e @code{numer}
70 não fazem o que é esperado.
72 PORFAZER : funcionalidade de dimensão, manuseio de temperatura, 
73 a função @code{showabbr} e Cia. Ltda.  Mostrar exemplos com adição de quantidades contendo
74 unidades.
77 @node Definições para Units,  , Introdução a Units, unit
78 @section Definições para Units
80 @deffn {Função} setunits (@var{list})
81 Por padrão, o pacote @emph{unit} não usa qualquer dimensões derivadas, mas irá
82 converter todas as unidades nas sete fundamentais do sistema MKS.
83 @example
84 (%i2) N;
85                                      kg m
86 (%o2)                                ----
87                                        2
88                                       s
89 (%i3) dyn;
90                                    1      kg m
91 (%o3)                           (------) (----)
92                                  100000     2
93                                            s
94 (%i4) g;
95                                     1
96 (%o4)                             (----) (kg)
97                                    1000
98 (%i5) centigram*inch/minutes^2;
99                                   127        kg m
100 (%o5)                       (-------------) (----)
101                              1800000000000     2
102                                               s
103 @end example
105 Em alguns casos esse é o comportamento desejado.  Se o utilizador desejar usar outras
106 unidades, isso é conseguido com o comando @code{setunits}:
107 @example
108 (%i6) setunits([centigram,inch,minute]);
109 (%o6)                                done
110 (%i7) N;
111                             1800000000000   %in cg
112 (%o7)                      (-------------) (------)
113                                  127            2
114                                             %min
115 (%i8) dyn;
116                                18000000   %in cg
117 (%o8)                         (--------) (------)
118                                  127          2
119                                           %min
120 (%i9) g;
121 (%o9)                             (100) (cg)
122 (%i10) centigram*inch/minutes^2;
123                                     %in cg
124 (%o10)                              ------
125                                         2
126                                     %min
127 @end example
129 A escolha de unidades é completamente flexível.  Por exemplo, se quisermos
130 voltar para quiilogramas, metros, e segundos como padrão para essas
131 dimensão nós podemos fazer:
132 @example
133 (%i11) setunits([kg,m,s]);
134 (%o11)                               done
135 (%i12) centigram*inch/minutes^2;
136                                   127        kg m
137 (%o12)                      (-------------) (----)
138                              1800000000000     2
139                                               s
140 @end example
142 Unidade derivadas são também manuseáveis por meio desse comando:
143 @example
144 (%i17) setunits(N);
145 (%o17)                               done
146 (%i18) N;
147 (%o18)                                 N
148 (%i19) dyn; 
149                                     1
150 (%o19)                           (------) (N)
151                                   100000
152 (%i20) kg*m/s^2;
153 (%o20)                                 N
154 (%i21) centigram*inch/minutes^2;
155                                     127
156 (%o21)                        (-------------) (N)
157                                1800000000000
158 @end example
160 Note que o pacote @emph{unit} reconhece a combinação não MKS
161 de massa, comprimento, e tempo inverso elevado ao quadrado como uma força, e converte isso
162 para Newtons.  É dessa forma que Maxima trabalha geralmente.  Se, por exemplo, nós
163 preferirmos dinas em lugar de Newtons, simplesmente fazemos o seguinte:
164 @example
165 (%i22) setunits(dyn);
166 (%o22)                               done
167 (%i23) kg*m/s^2;
168 (%o23)                          (100000) (dyn)
169 (%i24) centigram*inch/minutes^2;
170                                   127
171 (%o24)                         (--------) (dyn)
172                                 18000000
173 @end example
175 Para descontinuar simplificando para qualquer unidade de força, usamos o comando @code{uforget}:
176 @example
177 (%i26) uforget(dyn);
178 (%o26)                               false
179 (%i27) kg*m/s^2;
180                                      kg m
181 (%o27)                               ----
182                                        2
183                                       s
184 (%i28) centigram*inch/minutes^2;
185                                   127        kg m
186 (%o28)                      (-------------) (----)
187                              1800000000000     2
188                                               s
189 @end example
190 Isso pode trabalhar igualmente bem com @code{uforget(N)} ou
191 @code{uforget(%force)}.
193 Veja também @code{uforget}. Para usar essa função escreva primeiro @code{load("unit")}.
194 @end deffn
196 @deffn {Função} uforget (@var{list})
197 Por padrão, o pacote @emph{unit} converte todas as unidades para as
198 sete unidaes fundamentais do sitema MKS de unidades. Ess comportamento pode
199 ser mudado com o comando @code{setunits}. Após o qual, o
200 utilizador pode restabelecer o comportamento padrão para uma dimensão em particular
201 mediante o comando @code{uforget}:
202 @example
203 (%i13) setunits([centigram,inch,minute]);
204 (%o13)                               done
205 (%i14) centigram*inch/minutes^2;
206                                     %in cg
207 (%o14)                              ------
208                                         2
209                                     %min
210 (%i15) uforget([cg,%in,%min]);
211 (%o15)                      [false, false, false]
212 (%i16) centigram*inch/minutes^2;
213                                   127        kg m
214 (%o16)                      (-------------) (----)
215                              1800000000000     2
216                                               s
217 @end example
219 @code{uforget} opera sobre dimensões,
220 não sobre unidades, de forma que qualquer unidade de uma dimensão em particular irá trabalhar.  A
221 própia dimensão é também um argumento legal.
223 Veja também @code{setunits}. To use this function write first @code{load("unit")}.
224 @end deffn
226 @deffn {Função} convert (@var{expr}, @var{list})
227 Quando do restabelecimento dos valores padrão o ambiente global é destruído, existe o comando
228 @code{convert}, que permite conversões imediatas.  @code{convert} pode aceitar  um argumetno
229 simples ou uma lista de unidades a serem usadas na conversão.  Quando uma operação de conversão for
230 concluída, o sistema normal de avaliação global é contornado, com o objectivo de evitar que
231 o resultado desejado seja convertido novamente.  Como consequência, em cálculos aproximados
232 alertas de "rat" irão ser visíveis se o ambiente global que controla esse comportamento
233 (@code{ratprint}) for @code{true}.  @code{convert} também é útil para uma verificação pontual e imediata da
234 precisão de uma conversão global.  Outro recurso é que @code{convert} irá permitir a um
235 utilizador fazer um Base de Conversões Dimensionais mesmo se o ambiente global for escolhido para
236 simplificar par uma Dimensão Derivada.
238 @example
239 (%i2) kg*m/s^2;
240                                      kg m
241 (%o2)                                ----
242                                        2
243                                       s
244 (%i3) convert(kg*m/s^2,[g,km,s]);
245                                      g km
246 (%o3)                                ----
247                                        2
248                                       s
249 (%i4) convert(kg*m/s^2,[g,inch,minute]);
251 `rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
252                               18000000000   %in g
253 (%o4)                        (-----------) (-----)
254                                   127           2
255                                             %min
256 (%i5) convert(kg*m/s^2,[N]);
257 (%o5)                                  N
258 (%i6) convert(kg*m^2/s^2,[N]);
259 (%o6)                                 m N
260 (%i7) setunits([N,J]);
261 (%o7)                                done
262 (%i8) convert(kg*m^2/s^2,[N]);
263 (%o8)                                 m N
264 (%i9) convert(kg*m^2/s^2,[N,inch]);
266 `rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
267                                  5000
268 (%o9)                           (----) (%in N)
269                                  127
270 (%i10) convert(kg*m^2/s^2,[J]);
271 (%o10)                                 J
272 (%i11) kg*m^2/s^2;
273 (%o11)                                 J
274 (%i12) setunits([g,inch,s]);
275 (%o12)                               done
276 (%i13) kg*m/s^2;
277 (%o13)                                 N
278 (%i14) uforget(N);
279 (%o14)                               false
280 (%i15) kg*m/s^2;
281                                 5000000   %in g
282 (%o15)                         (-------) (-----)
283                                   127       2
284                                            s
285 (%i16) convert(kg*m/s^2,[g,inch,s]);
287 `rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
288                                 5000000   %in g
289 (%o16)                         (-------) (-----)
290                                   127       2
291                                            s
292 @end example
294 Veja também @code{setunits} e @code{uforget}. Para usar essa função primeiramente escreva @code{load("unit")}.
295 @end deffn
298 @defvr {Variável de opção} usersetunits
299 Valor por omissão: none
301 Se um utilizador desejar ter um comportamento padrão de unidade diferente daquele descrito,
302 ele pode fazer uso de @emph{maxima-init.mac} e da variável
303 @emph{usersetunits}.  O pacote @emph{unit} irá verificar o ficheiro @emph{maxima-init.mac} na inicialização para ver se a essa variável 
304 foi atribuído uma lista.  Se isso aconteceu, o pacote @emph{unit} irá usar @code{setunits} sobre aquela lista e pegar 
305 as unidades lá colocadas para serem as padrões.  @code{uforget} irá reverter para o comportamento
306 definido por @code{usersetunits} sobrescrevendo seus próprios padrões.  Por exemplo, Se tivermos um ficheiro
307 @emph{maxima-init.mac} contendo:
308 @example
309 usersetunits : [N,J];
310 @end example
311 nós poderemos ver o seguinte comportamento:
312 @example
313 (%i1) load("unit")$
314 ******************************************************************* 
315 *                       Units version 0.50                        * 
316 *          Definitions based on the NIST Reference on             * 
317 *              Constants, Units, and Uncertainty                  * 
318 *       Conversion factors from various sources including         * 
319 *                   NIST and the GNU units package                * 
320 ******************************************************************* 
322 Redefining necessary functions... 
323 WARNING: DEFUN/DEFMACRO: redefining function TOPLEVEL-MACSYMA-EVAL ...
324 WARNING: DEFUN/DEFMACRO: redefining function MSETCHK ...
325 WARNING: DEFUN/DEFMACRO: redefining function KILL1 ...
326 WARNING: DEFUN/DEFMACRO: redefining function NFORMAT ...
327 Initializing unit arrays... 
328 Done. 
329 User defaults found... 
330 User defaults initialized.
331 (%i2) kg*m/s^2;
332 (%o2)                                  N
333 (%i3) kg*m^2/s^2;
334 (%o3)                                  J
335 (%i4) kg*m^3/s^2;
336 (%o4)                                 J m
337 (%i5) kg*m*km/s^2;
338 (%o5)                             (1000) (J)
339 (%i6) setunits([dyn,eV]);
340 (%o6)                                done
341 (%i7) kg*m/s^2;
342 (%o7)                           (100000) (dyn)
343 (%i8) kg*m^2/s^2;
344 (%o8)                     (6241509596477042688) (eV)
345 (%i9) kg*m^3/s^2;
346 (%o9)                    (6241509596477042688) (eV m)
347 (%i10) kg*m*km/s^2;
348 (%o10)                   (6241509596477042688000) (eV)
349 (%i11) uforget([dyn,eV]);  
350 (%o11)                           [false, false]
351 (%i12) kg*m/s^2;
352 (%o12)                                 N
353 (%i13) kg*m^2/s^2;
354 (%o13)                                 J
355 (%i14) kg*m^3/s^2;
356 (%o14)                                J m
357 (%i15) kg*m*km/s^2;
358 (%o15)                            (1000) (J)
359 @end example
360 Sem @code{usersetunits}, as entradas iniciais poderiam ter sido convertidas
361 para o sistema de unidades MKS, e @code{uforget} poderia ter resultado em um retorno para as regras do MKS.  Em vez disso,
362 as preferências do utilizador foram respeitadas em ambos os casos.  Note que esse podem ainda
363 serem sobrescritos se for desejado.  Para eliminar completamente essa simplificação - i.e.
364 ter as preferências de utilizador escolhidas para os padrões de unidade do Maxima - o comando
365 @code{dontusedimension} pode ser usado.  @code{uforget} pode restabelecer as preferências de utilizador novamente, mas
366 somente se @code{usedimension} liberar isso para uso.  Alternativamente,
367 @code{kill(usersetunits)} irá remover completametne todo o conhecimento dessas escolhas de utilizador
368 da sessão actual.  Aqui está alguns exemplos de como esssas várias opções trabalham.
369 @example
370 (%i2) kg*m/s^2;
371 (%o2)                                  N
372 (%i3) kg*m^2/s^2;
373 (%o3)                                  J
374 (%i4) setunits([dyn,eV]);
375 (%o4)                                done
376 (%i5) kg*m/s^2;
377 (%o5)                           (100000) (dyn)
378 (%i6) kg*m^2/s^2;
379 (%o6)                     (6241509596477042688) (eV)
380 (%i7) uforget([dyn,eV]);
381 (%o7)                          [false, false]
382 (%i8) kg*m/s^2;
383 (%o8)                                  N
384 (%i9) kg*m^2/s^2;
385 (%o9)                                  J
386 (%i10) dontusedimension(N);
387 (%o10)                             [%force]
388 (%i11) dontusedimension(J);
389 (%o11)                         [%energy, %force]
390 (%i12) kg*m/s^2;
391                                      kg m
392 (%o12)                               ----
393                                        2
394                                       s
395 (%i13) kg*m^2/s^2;
396                                          2
397                                      kg m
398 (%o13)                               -----
399                                        2
400                                       s
401 (%i14) setunits([dyn,eV]);
402 (%o14)                               done
403 (%i15) kg*m/s^2;
404                                      kg m
405 (%o15)                               ----
406                                        2
407                                       s
408 (%i16) kg*m^2/s^2;
409                                          2
410                                      kg m
411 (%o16)                               -----
412                                        2
413                                       s
414 (%i17) uforget([dyn,eV]);
415 (%o17)                         [false, false]
416 (%i18) kg*m/s^2;
417                                      kg m
418 (%o18)                               ----
419                                        2
420                                       s
421 (%i19) kg*m^2/s^2;
422                                          2
423                                      kg m
424 (%o19)                               -----
425                                        2
426                                       s
427 (%i20) usedimension(N);
428 Done.  To have Maxima simplify to this dimension, use setunits([unit]) 
429 to select a unit. 
430 (%o20)                               true
431 (%i21) usedimension(J);
432 Done.  To have Maxima simplify to this dimension, use setunits([unit]) 
433 to select a unit. 
434 (%o21)                               true
435 (%i22) kg*m/s^2;
436                                      kg m
437 (%o22)                               ----
438                                        2
439                                       s
440 (%i23) kg*m^2/s^2;
441                                          2
442                                      kg m
443 (%o23)                               -----
444                                        2
445                                       s
446 (%i24) setunits([dyn,eV]);
447 (%o24)                               done
448 (%i25) kg*m/s^2;
449 (%o25)                          (100000) (dyn)
450 (%i26) kg*m^2/s^2;
451 (%o26)                    (6241509596477042688) (eV)
452 (%i27) uforget([dyn,eV]);
453 (%o27)                           [false, false]
454 (%i28) kg*m/s^2;
455 (%o28)                                 N
456 (%i29) kg*m^2/s^2;
457 (%o29)                                 J
458 (%i30) kill(usersetunits);
459 (%o30)                               done
460 (%i31) uforget([dyn,eV]);
461 (%o31)                          [false, false]
462 (%i32) kg*m/s^2;
463                                      kg m
464 (%o32)                               ----
465                                        2
466                                       s
467 (%i33) kg*m^2/s^2;
468                                          2
469                                      kg m
470 (%o33)                               -----
471                                        2
472                                       s
473 @end example
474 Desafortunadamente essa ampla variedade de opções é um pouco confus no início,
475 mas uma vez que o utilizador cultiva o uso delas o utilizador perceberá que elas permitem completo
476 controle sobre seu ambiente de trabalho.
478 @c One other significant customization option available is the @code{setunitprefix}
479 @c command.  Normally, abbreviations used in this package are as close to those
480 @c used in standard texts as possible.  Some people, however, prefer to use those
481 @c symbols for normal work and have units labeled in some other fasion. 
482 @c @code{setunitprefix} is provided for this case.  Here is an example of its use:
484 @end defvr
487 @deffn {Função} metricexpandall (@var{x})
488 Reconstrói listas de unidades globais automaticamente criando todas as unidades métricas desejadas.
489 @var{x} é um argumento numérico que é usado para especificar quantos prefixos
490 métricos o utilizador deseja que seja definido.  Os argumentos são os seguintes, com cada
491 maior número definindo todos os menores números de unidade:
492 @example
493            0 - none. Only base units
494            1 - kilo, centi, milli
495 (default)  2 - giga, mega, kilo, hecto, deka, deci, centi, milli,
496                micro, nano
497            3 - peta, tera, giga, mega, kilo, hecto, deka, deci,
498                centi, milli, micro, nano, pico, femto
499            4 - all
500 @end example
501 Normalmente, Maxima não irá definir a expansão completa desses resultados em uma
502 grande número de unidades, mas @code{metricexpandall} pode ser usada para
503 reconstruir a lista em um estilo mais ou menos completo. A variável relevante
504 no ficheiro @emph{unit.mac} é @var{%unitexpand}.
505 @c This should be made configurable as a maxima-init.mac controllable option.
506 @end deffn
508 @defvr {Variável} %unitexpand
509 Valor por omissão: @code{2}
511 Ess é o valor fornecido a @code{metricexpandall} durante a inicialização
512 de @emph{unit}.
514 @end defvr
517 @c @deffn {Função} functionname (@var{arg1}, @var{arg2}, ..., @var{argn})
518 @c @end deffn
520 @c @defvr {Variável de opção} variablename
521 @c Default value: @code{true}
522 @c @end defvr