@c Language: Brazilian Portuguese, Encoding: iso-8859-1
@c /unit.texi/1.3/Sat Jun  2 00:13:35 2007//
@menu
* Introdu@value{cedilha}@~{a}o a Units::       
* Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para Units::       
@end menu

@node Introdu@value{cedilha}@~{a}o a Units, Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para Units, unit, unit
@section Introdu@value{cedilha}@~{a}o a Units

O pacote @emph{unit} torna o usu@'{a}rio apto a converter entre unidades
arbitr@'{a}rias e trabalhar com dimens@~{o}es em equa@value{cedilha}@~{o}es. O funcionamento desse pacote
@'{e} radicalmente diferente do pacote original units do Maxima - apesar de
o original conter uma lista b@'{a}sica de defini@value{cedilha}@~{o}es, o pacote atual usa um conjunto de regras para permitir
ao usu@'{a}rio escolher, sobre uma base dimensional, qual a resposta fianl de unidade pode ser
convertida.  Isso ir@'{a} separar unidades em lugar de mistur@'{a}-las na tela,
permitindo ao usu@'{a}rio durante a leitura identificar as unidades associadas com uma resposta em
particular.  Isso permitir@'{a} ao usu@'{a}rio simplificar uma express@~{a}o em sua Base fundamental
de Unidades, bem como fornecer ajuste fino sobre a simplifica@value{cedilha}@~{a}o de unidades derivadas.
An@'{a}lise dimensional @'{e} poss@'{i}vel, e uma variedade de ferramentas est@'{a} dispon@'{i}vel para 
gerenciar a convers@~{a}o e tamb@'{e}m uma variedade de op@value{cedilha}@~{o}es de simplifica@value{cedilha}@~{a}o. Adicionalmente para personalizar
convers@~{a}o autom@'{a}tica, @emph{units} tamb@'{e}m fornede um manual tradicional 
de op@value{cedilha}@~{o}es de convers@~{a}o.  

Nota -quando convers@~{o}es de unidade forem n@~{a}o exatas Maxima ir@'{a} fazer aproxima@value{cedilha}@~{o}es resultando 
em fra@value{cedilha}@~{o}es. Esso @'{e} uma conceq@"{u}@^{e}ncia das t@'{e}cnicas usadas para simplificar unidades.
A mensagem de alerta desse tipo de substitui@value{cedilha}@~{a}o est@'{a} desabilitada por padr@~{a}o no
caso de inidades (normalmente essas mensagens est@~{a}o habilitadas) uma vez que essa situa@value{cedilha}@~{a}o de iemiss@~{a}o de mensagens de alerta ocorre freq@"{u}@^{e}ntemente
e os alertas confundem a sa@'{i}da.  (O estado atual de @code{ratprint} @'{e} restabelecido
ap@'{o}s uma convers@~{a}o de unidades, de forma que modifica@value{cedilha}@~{o}es de usu@'{a}rio para aquela configura@value{cedilha}@~{a}o ir@~{a}o ser preservadas 
de outra forma.)  Se o usu@'{a}rio precisar dessa informa@value{cedilha}@~{a}o para @code{units}, ele pode escolher
@emph{unitverbose:on} para reativar a impress@~{a}o de mensagens de alerta do
processo de convers@~{a}o.

@emph{unit} est@'{a} incl@'{i}do no Maxima no diret@'{o}rio share/contrib/unit directory. Isso segue
aos pacotes normais do Maxima conforme conven@value{cedilha}@~{o}es:

@example
(%i1) load("unit")$
******************************************************************* 
*                       Units version 0.50                        * 
*          Definitions based on the NIST Reference on             * 
*              Constants, Units, and Uncertainty                  * 
*       Conversion factors from various sources including         * 
*                   NIST and the GNU units package                * 
******************************************************************* 
 
Redefining necessary functions... 
WARNING: DEFUN/DEFMACRO: redefining function TOPLEVEL-MACSYMA-EVAL ...
WARNING: DEFUN/DEFMACRO: redefining function MSETCHK ...
WARNING: DEFUN/DEFMACRO: redefining function KILL1 ...
WARNING: DEFUN/DEFMACRO: redefining function NFORMAT ...
Initializing unit arrays... 
Done.
@end example

As mensagens WARNING (DE ALERTA) s@~{a}o esperadas n @~{a}o uma causa de preocupa@value{cedilha}@~{a}o - elas indicam
que o pacote @emph{unit} est@'{a} redefinindo fun@value{cedilha}@~{o}es anteriormente definidas no local adequado do Maxima.  
Essa redefini@value{cedilha}@~{a}o @'{e} necess@'{a}ria com o bojetivo de manusear adequadamente as unidades.  O usu@'{a}rio
pode estar consciente que se outras modifica@value{cedilha}@~{o}es tiverem sido feitas para essas fun@value{cedilha}@~{o}es por outros
pacotes essas novas mudan@value{cedilha}as ir@~{a}o ser sobrescritas por meio desse processo de disponibiliza@value{cedilha}@~{a}o do pacote @code{unit}.

O arquivo @emph{unit.mac} tamb@'{e}m chama um arquivo lisp, a saber @emph{unit-functions.lisp}, que
cont@'{e}m as fun@value{cedilha}@~{a}oes lisp necess@'{a}rias ao pacote.

Clifford Yapp @'{e} o autor prim@'{a}rio.  Ele recebeu grande contribui@value{cedilha}@~{a}o de
Barton Willis da University of Nebraska at Kearney (UNK), Robert Dodier, e
da intr@'{e}pida tribo da lista de mensagens do Maxima.

Existem provavelmente muitos erros.  Diga-me quais.  @code{float} e @code{numer}
n@~{a}o fazem o que @'{e} esperado.

PORFAZER : funcionalidade de dimens@~{a}o, manuseio de temperatura, 
a fun@value{cedilha}@~{a}o @code{showabbr} e Cia. Ltda.  Mostrar exemplos com adi@value{cedilha}@~{a}o de quantidades contendo
unidades.


@node Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para Units,  , Introdu@value{cedilha}@~{a}o a Units, unit
@section Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para Units

@deffn {Fun@value{cedilha}@~{a}o} setunits (@var{list})
Por padr@~{a}o, o pacote @emph{unit} n@~{a}o usa qualquer dimens@~{o}es derivadas, mas ir@'{a}
converter todas as unidades nas sete fundamentais do sistema MKS.
@example
(%i2) N;
                                     kg m
(%o2)                                ----
                                       2
                                      s
(%i3) dyn;
                                   1      kg m
(%o3)                           (------) (----)
                                 100000     2
                                           s
(%i4) g;
                                    1
(%o4)                             (----) (kg)
                                   1000
(%i5) centigram*inch/minutes^2;
                                  127        kg m
(%o5)                       (-------------) (----)
                             1800000000000     2
                                              s
@end example

Em alguns casos esse @'{e} o comportamento desejado.  Se o usu@'{a}rio desejar usar outras
unidades, isso @'{e} conseguido com o comando @code{setunits}:
@example
(%i6) setunits([centigram,inch,minute]);
(%o6)                                done
(%i7) N;
                            1800000000000   %in cg
(%o7)                      (-------------) (------)
                                 127            2
                                            %min
(%i8) dyn;
                               18000000   %in cg
(%o8)                         (--------) (------)
                                 127          2
                                          %min
(%i9) g;
(%o9)                             (100) (cg)
(%i10) centigram*inch/minutes^2;
                                    %in cg
(%o10)                              ------
                                        2
                                    %min
@end example

A escolha de unidades @'{e} completamente flex@'{i}vel.  Por exemplo, se quisermos
voltar para quiilogramas, metros, e segundos como padr@~{a}o para essas
dimens@~{a}o n@'{o}s podemos fazer:
@example
(%i11) setunits([kg,m,s]);
(%o11)                               done
(%i12) centigram*inch/minutes^2;
                                  127        kg m
(%o12)                      (-------------) (----)
                             1800000000000     2
                                              s
@end example

Unidade derivadas s@~{a}o tamb@'{e}m manuse@'{a}veis por meio desse comando:
@example
(%i17) setunits(N);
(%o17)                               done
(%i18) N;
(%o18)                                 N
(%i19) dyn; 
                                    1
(%o19)                           (------) (N)
                                  100000
(%i20) kg*m/s^2;
(%o20)                                 N
(%i21) centigram*inch/minutes^2;
                                    127
(%o21)                        (-------------) (N)
                               1800000000000
@end example

Note que o pacote @emph{unit} reconhece a combina@value{cedilha}@~{a}o n@~{a}o MKS
de massa, comprimento, e tempo inverso elevado ao quadrado como uma for@value{cedilha}a, e converte isso
para Newtons.  @'{E} dessa forma que Maxima trabalha geralmente.  Se, por exemplo, n@'{o}s
preferirmos dinas em lugar de Newtons, simplesmente fazemos o seguinte:
@example
(%i22) setunits(dyn);
(%o22)                               done
(%i23) kg*m/s^2;
(%o23)                          (100000) (dyn)
(%i24) centigram*inch/minutes^2;
                                  127
(%o24)                         (--------) (dyn)
                                18000000
@end example

Para descontinuar simplificando para qualquer unidade de for@value{cedilha}a, usamos o comando @code{uforget}:
@example
(%i26) uforget(dyn);
(%o26)                               false
(%i27) kg*m/s^2;
                                     kg m
(%o27)                               ----
                                       2
                                      s
(%i28) centigram*inch/minutes^2;
                                  127        kg m
(%o28)                      (-------------) (----)
                             1800000000000     2
                                              s
@end example
Isso pode trabalhar igualmente bem com @code{uforget(N)} ou
@code{uforget(%force)}.

Veja tamb@'{e}m @code{uforget}. Para usar essa fun@value{cedilha}@~{a}o escreva primeiro @code{load("unit")}.
@end deffn

@deffn {Fun@value{cedilha}@~{a}o} uforget (@var{list})
Por padr@~{a}o, o pacote @emph{unit} converte todas as unidades para as
sete unidaes fundamentais do sitema MKS de unidades. Ess comportamento pode
ser mudado com o comando @code{setunits}. Ap@'{o}s o qual, o
usu@'{a}rio pode restabelecer o comportamento padr@~{a}o para uma dimens@~{a}o em particular
mediante o comando @code{uforget}:
@example
(%i13) setunits([centigram,inch,minute]);
(%o13)                               done
(%i14) centigram*inch/minutes^2;
                                    %in cg
(%o14)                              ------
                                        2
                                    %min
(%i15) uforget([cg,%in,%min]);
(%o15)                      [false, false, false]
(%i16) centigram*inch/minutes^2;
                                  127        kg m
(%o16)                      (-------------) (----)
                             1800000000000     2
                                              s
@end example

@code{uforget} opera sobre dimens@~{o}es,
n@~{a}o sobre unidades, de forma que qualquer unidade de uma dimens@~{a}o em particular ir@'{a} trabalhar.  A
pr@'{o}pia dimens@~{a}o @'{e} tamb@'{e}m um argumento legal.

Veja tamb@'{e}m @code{setunits}. To use this function write first @code{load("unit")}.
@end deffn

@deffn {Fun@value{cedilha}@~{a}o} convert (@var{expr}, @var{list})
Quando do restabelecimento dos valores padr@~{a}o o ambiente global @'{e} destru@'{i}do, existe o comando
@code{convert}, que permite convers@~{o}es imediatas.  @code{convert} pode aceitar  um argumetno
simples ou uma lista de unidades a serem usadas na convers@~{a}o.  Quando uma opera@value{cedilha}@~{a}o de convers@~{a}o for
conclu@'{i}da, o sistema normal de avalia@value{cedilha}@~{a}o global @'{e} contornado, com o objetivo de evitar que
o resultado desejado seja convertido novamente.  Como conseq@"{u}@^{e}ncia, em c@'{a}lculos aproximados
alertas de "rat" ir@~{a}o ser vis@'{i}veis se o ambiente global que controla esse comportamento
(@code{ratprint}) for @code{true}.  @code{convert} tamb@'{e}m @'{e} @'{u}til para uma verifica@value{cedilha}@~{a}o pontual e imediata da
precis@~{a}o de uma convers@~{a}o global.  Outro recurso @'{e} que @code{convert} ir@'{a} permitir a um
usu@'{a}rio fazer um Base de Convers@~{o}es Dimensionais mesmo se o ambiente global for escolhido para
simplificar par uma Dimens@~{a}o Derivada.

@example
(%i2) kg*m/s^2;
                                     kg m
(%o2)                                ----
                                       2
                                      s
(%i3) convert(kg*m/s^2,[g,km,s]);
                                     g km
(%o3)                                ----
                                       2
                                      s
(%i4) convert(kg*m/s^2,[g,inch,minute]);

`rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
                              18000000000   %in g
(%o4)                        (-----------) (-----)
                                  127           2
                                            %min
(%i5) convert(kg*m/s^2,[N]);
(%o5)                                  N
(%i6) convert(kg*m^2/s^2,[N]);
(%o6)                                 m N
(%i7) setunits([N,J]);
(%o7)                                done
(%i8) convert(kg*m^2/s^2,[N]);
(%o8)                                 m N
(%i9) convert(kg*m^2/s^2,[N,inch]);

`rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
                                 5000
(%o9)                           (----) (%in N)
                                 127
(%i10) convert(kg*m^2/s^2,[J]);
(%o10)                                 J
(%i11) kg*m^2/s^2;
(%o11)                                 J
(%i12) setunits([g,inch,s]);
(%o12)                               done
(%i13) kg*m/s^2;
(%o13)                                 N
(%i14) uforget(N);
(%o14)                               false
(%i15) kg*m/s^2;
                                5000000   %in g
(%o15)                         (-------) (-----)
                                  127       2
                                           s
(%i16) convert(kg*m/s^2,[g,inch,s]);

`rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
                                5000000   %in g
(%o16)                         (-------) (-----)
                                  127       2
                                           s
@end example

Veja tamb@'{e}m @code{setunits} e @code{uforget}. Para usar essa fun@value{cedilha}@~{a}o primeiramente escreva @code{load("unit")}.
@end deffn


@defvr {Vari@'{a}vel de op@value{cedilha}@~{a}o} usersetunits
Valor padr@~{a}o: none

Se um usu@'{a}rio desejar ter um comportamento padr@~{a}o de unidade diferente daquele descrito,
ele pode fazer uso de @emph{maxima-init.mac} e da vari@'{a}vel
@emph{usersetunits}.  O pacote @emph{unit} ir@'{a} verificar o arquivo @emph{maxima-init.mac} na inicializa@value{cedilha}@~{a}o para ver se a essa vari@'{a}vel 
foi atribu@'{i}do uma lista.  Se isso aconteceu, o pacote @emph{unit} ir@'{a} usar @code{setunits} sobre aquela lista e pegar 
as unidades l@'{a} colocadas para serem as padr@~{o}es.  @code{uforget} ir@'{a} reverter para o comportamento
definido por @code{usersetunits} sobrescrevendo seus pr@'{o}prios padr@~{o}es.  Por exemplo, Se tivermos um arquivo
@emph{maxima-init.mac} contendo:
@example
usersetunits : [N,J];
@end example
n@'{o}s poderemos ver o seguinte comportamento:
@example
(%i1) load("unit")$
******************************************************************* 
*                       Units version 0.50                        * 
*          Definitions based on the NIST Reference on             * 
*              Constants, Units, and Uncertainty                  * 
*       Conversion factors from various sources including         * 
*                   NIST and the GNU units package                * 
******************************************************************* 
 
Redefining necessary functions... 
WARNING: DEFUN/DEFMACRO: redefining function TOPLEVEL-MACSYMA-EVAL ...
WARNING: DEFUN/DEFMACRO: redefining function MSETCHK ...
WARNING: DEFUN/DEFMACRO: redefining function KILL1 ...
WARNING: DEFUN/DEFMACRO: redefining function NFORMAT ...
Initializing unit arrays... 
Done. 
User defaults found... 
User defaults initialized.
(%i2) kg*m/s^2;
(%o2)                                  N
(%i3) kg*m^2/s^2;
(%o3)                                  J
(%i4) kg*m^3/s^2;
(%o4)                                 J m
(%i5) kg*m*km/s^2;
(%o5)                             (1000) (J)
(%i6) setunits([dyn,eV]);
(%o6)                                done
(%i7) kg*m/s^2;
(%o7)                           (100000) (dyn)
(%i8) kg*m^2/s^2;
(%o8)                     (6241509596477042688) (eV)
(%i9) kg*m^3/s^2;
(%o9)                    (6241509596477042688) (eV m)
(%i10) kg*m*km/s^2;
(%o10)                   (6241509596477042688000) (eV)
(%i11) uforget([dyn,eV]);  
(%o11)                           [false, false]
(%i12) kg*m/s^2;
(%o12)                                 N
(%i13) kg*m^2/s^2;
(%o13)                                 J
(%i14) kg*m^3/s^2;
(%o14)                                J m
(%i15) kg*m*km/s^2;
(%o15)                            (1000) (J)
@end example
Sem @code{usersetunits}, as entradas iniciais poderiam ter sido convertidas
para o sistema de unidades MKS, e @code{uforget} poderia ter resultado em um retorno para as regras do MKS.  Em vez disso,
as prefer@^{e}ncias do usu@'{a}rio foram respeitadas em ambos os casos.  Note que esse podem ainda
serem sobrescritos se for desejado.  Para eliminar completamente essa simplifica@value{cedilha}@~{a}o - i.e.
ter as prefer@^{e}ncias de usu@'{a}rio escolhidas para os padr@~{o}es de unidade do Maxima - o comando
@code{dontusedimension} pode ser usado.  @code{uforget} pode restabelecer as prefer@^{e}ncias de usu@'{a}rio novamente, mas
somente se @code{usedimension} liberar isso para uso.  Alternativamente,
@code{kill(usersetunits)} ir@'{a} remover completametne todo o conhecimento dessas escolhas de usu@'{a}rio
da sess@~{a}o atual.  Aqui est@'{a} alguns exemplos de como esssas v@'{a}rias op@value{cedilha}@~{o}es trabalham.
@example
(%i2) kg*m/s^2;
(%o2)                                  N
(%i3) kg*m^2/s^2;
(%o3)                                  J
(%i4) setunits([dyn,eV]);
(%o4)                                done
(%i5) kg*m/s^2;
(%o5)                           (100000) (dyn)
(%i6) kg*m^2/s^2;
(%o6)                     (6241509596477042688) (eV)
(%i7) uforget([dyn,eV]);
(%o7)                          [false, false]
(%i8) kg*m/s^2;
(%o8)                                  N
(%i9) kg*m^2/s^2;
(%o9)                                  J
(%i10) dontusedimension(N);
(%o10)                             [%force]
(%i11) dontusedimension(J);
(%o11)                         [%energy, %force]
(%i12) kg*m/s^2;
                                     kg m
(%o12)                               ----
                                       2
                                      s
(%i13) kg*m^2/s^2;
                                         2
                                     kg m
(%o13)                               -----
                                       2
                                      s
(%i14) setunits([dyn,eV]);
(%o14)                               done
(%i15) kg*m/s^2;
                                     kg m
(%o15)                               ----
                                       2
                                      s
(%i16) kg*m^2/s^2;
                                         2
                                     kg m
(%o16)                               -----
                                       2
                                      s
(%i17) uforget([dyn,eV]);
(%o17)                         [false, false]
(%i18) kg*m/s^2;
                                     kg m
(%o18)                               ----
                                       2
                                      s
(%i19) kg*m^2/s^2;
                                         2
                                     kg m
(%o19)                               -----
                                       2
                                      s
(%i20) usedimension(N);
Done.  To have Maxima simplify to this dimension, use setunits([unit]) 
to select a unit. 
(%o20)                               true
(%i21) usedimension(J);
Done.  To have Maxima simplify to this dimension, use setunits([unit]) 
to select a unit. 
(%o21)                               true
(%i22) kg*m/s^2;
                                     kg m
(%o22)                               ----
                                       2
                                      s
(%i23) kg*m^2/s^2;
                                         2
                                     kg m
(%o23)                               -----
                                       2
                                      s
(%i24) setunits([dyn,eV]);
(%o24)                               done
(%i25) kg*m/s^2;
(%o25)                          (100000) (dyn)
(%i26) kg*m^2/s^2;
(%o26)                    (6241509596477042688) (eV)
(%i27) uforget([dyn,eV]);
(%o27)                           [false, false]
(%i28) kg*m/s^2;
(%o28)                                 N
(%i29) kg*m^2/s^2;
(%o29)                                 J
(%i30) kill(usersetunits);
(%o30)                               done
(%i31) uforget([dyn,eV]);
(%o31)                          [false, false]
(%i32) kg*m/s^2;
                                     kg m
(%o32)                               ----
                                       2
                                      s
(%i33) kg*m^2/s^2;
                                         2
                                     kg m
(%o33)                               -----
                                       2
                                      s
@end example
Desafortunadamente essa ampla variedade de op@value{cedilha}@~{o}es @'{e} um pouco confus no in@'{i}cio,
mas uma vez que o usu@'{a}rio cultiva o uso delas o usu@'{a}rio perceber@'{a} que elas permitem completo
controle sobre seu ambiente de trabalho.

@c One other significant customization option available is the @code{setunitprefix}
@c command.  Normally, abbreviations used in this package are as close to those
@c used in standard texts as possible.  Some people, however, prefer to use those
@c symbols for normal work and have units labeled in some other fasion. 
@c @code{setunitprefix} is provided for this case.  Here is an example of its use:

@end defvr


@deffn {Fun@value{cedilha}@~{a}o} metricexpandall (@var{x})
Reconstr@'{o}i listas de unidades globais automaticamente criando todas as unidades m@'{e}tricas desejadas.
@var{x} @'{e} um argumento num@'{e}rico que @'{e} usado para especificar quantos prefixos
m@'{e}tricos o usu@'{a}rio deseja que seja definido.  Os argumentos s@~{a}o os seguintes, com cada
maior n@'{u}mero definindo todos os menores n@'{u}meros de unidade:
@example
           0 - none. Only base units
           1 - kilo, centi, milli
(default)  2 - giga, mega, kilo, hecto, deka, deci, centi, milli,
               micro, nano
           3 - peta, tera, giga, mega, kilo, hecto, deka, deci,
               centi, milli, micro, nano, pico, femto
           4 - all
@end example
Normalmente, Maxima n@~{a}o ir@'{a} definir a expans@~{a}o completa desses resultados em uma
grande n@'{u}mero de unidades, mas @code{metricexpandall} pode ser usada para
reconstruir a lista em um estilo mais ou menos completo. A vari@'{a}vel relevante
no arquivo @emph{unit.mac} @'{e} @var{%unitexpand}.
@c This should be made configurable as a maxima-init.mac controllable option.
@end deffn

@defvr {Vari@'{a}vel} %unitexpand
Valor padr@~{a}o: @code{2}

Ess @'{e} o valor fornecido a @code{metricexpandall} durante a inicializa@value{cedilha}@~{a}o
de @emph{unit}.

@end defvr


@c @deffn {Fun@value{cedilha}@~{a}o} functionname (@var{arg1}, @var{arg2}, ..., @var{argn})
@c @end deffn

@c @defvr {Vari@'{a}vel de op@value{cedilha}@~{a}o} variablename
@c Default value: @code{true}
@c @end defvr

