1 @c English version: 2008-12-31
3 * Introducción a units::
4 * Funciones y variables para units::
7 @node Introducción a units, Funciones y variables para units, unit, unit
8 @section Introducción a units
10 El paquete @code{unit} permite al usuario hacer cambios de unidades y
11 llevar a cabo el análisis dimensional de las ecuaciones. La forma de operar de
12 este paquete es radicalmente diferente de la del paquete original de Maxima;
13 mientras que en el paquete original era tan solo una lista de definiciones,
14 aquí se utiliza un conjunto de reglas que permiten seleccionar al usuario
15 en qué unidades debe devolverse la expresión final.
17 Junto con el análisis dimensional, el paquete aporta una serie de
18 herramientas para controlar las opciones de conversión y simplificación.
19 Además de la conversión automática adaptable a las necesidades del
20 usuario, el paquete @code{unit} permite hacer conversiones a la manera
23 Nota: Cuando los factores de conversión no son exactos, Maxima los
24 transformará a fracciones como consecuencia de la metodología
25 utilizada para simplificar las unidades. Los mensajes de aviso concernientes a
26 estas transformaciones están desactivados por defecto en el caso de las
27 unidades (lo habitual es que estén activados en otros contextos) debido a
28 que al ser una operación muy frecuente, serían un estorbo.
29 El estado previo de la variable @code{ratprint} queda restaurado tras la
30 conversión de las unidades, de manera que se mantendrá la opción
31 seleccionada por el usuario; en caso de que éste necesite ver dichos
32 avisos, podrá hacer la asignación @code{unitverbose:on} para
33 reactivarlos desde el proceso de conversión de unidades.
35 El paquete @code{unit} se aloja en el directorio @code{share/contrib/unit}
36 y se ajusta a las convenciones de Maxima para la carga de paquetes:
40 *******************************************************************
41 * Units version 0.50 *
42 * Definitions based on the NIST Reference on *
43 * Constants, Units, and Uncertainty *
44 * Conversion factors from various sources including *
45 * NIST and the GNU units package *
46 *******************************************************************
48 Redefining necessary functions...
49 WARNING: DEFUN/DEFMACRO:
50 redefining function TOPLEVEL-MACSYMA-EVAL ...
51 WARNING: DEFUN/DEFMACRO: redefining function MSETCHK ...
52 WARNING: DEFUN/DEFMACRO: redefining function KILL1 ...
53 WARNING: DEFUN/DEFMACRO: redefining function NFORMAT ...
54 Initializing unit arrays...
58 Los avisos del tipo @code{WARNING} son normales y no deben interpretarse
59 como errores; tan solo indican que el paquete @code{unit} está redefiniendo
60 funciones que ya estaban definidas en Maxima. Esto es necesario para que las
61 unidades se gestionen de forma correcta. El usuario debe tener en cuenta que si
62 otros paquetes han cambiado las definiciones de estas funciones, tales cambios serán
63 ignorados por el proceso de carga de @code{unit}.
65 El paquete @code{unit} también carga el fichero de Lisp @code{unit-functions.lisp},
66 el cual contiene las funciones Lisp necesarias.
68 El autor principal de este paquete es Clifford Yapp, quien ha recibido ayuda
69 y asistencia, entre otros, de Barton Willis y Robert Dodier.
71 @node Funciones y variables para units, , Introducción a units, unit
72 @section Funciones y variables para units
75 @deffn {Función} setunits (@var{list})
77 El paquete @code{unit} no utiliza por defecto dimensiones derivadas, pero convierte
78 todas las unidades a las siete fundamentales en unidades MKS.
102 (%i5) centigram*inch/minutes^2;
104 (%o5) (-------------) (----)
110 Este es el comportamiento que se desea en ciertos casos. Si
111 el usuario necesita utilizar otras unidades, habrá de utilizar la
112 instrucción @code{setunits}:
115 (%i6) setunits([centigram,inch,minute]);
121 (%o7) (-------------) (------)
128 (%o8) (--------) (------)
137 (%i10) centigram*inch/minutes^2;
145 La especificación de las variables es relativamente flexible.
146 Por ejemplo, si se quiere volver a utilizar kilogramos, metros y
147 segundos como unidades por defecto, podemos hacer:
150 (%i11) setunits([kg,m,s]);
154 (%i12) centigram*inch/minutes^2;
156 (%o12) (-------------) (----)
162 Las unidades derivadas también se controlan con esta misma instrucción:
183 (%i21) centigram*inch/minutes^2;
185 (%o21) (-------------) (N)
190 Téngase en cuenta que el paquete @code{unit} reconoce que la
191 combinación de masa, longitud e inversa del cuadrado del tiempo da
192 lugar a una fuerza, convirtiéndola a newtons. Esta es la forma
193 general en la que trabaja Maxima. Si el usuario prefiere dinas a newtons,
194 tan solo tendrá que hacer lo siguiente:
197 (%i22) setunits(dyn);
202 (%o23) (100000) (dyn)
205 (%i24) centigram*inch/minutes^2;
207 (%o24) (--------) (dyn)
212 Para desactivar una unidad se utiliza la instrucción @code{uforget}:
226 (%i28) centigram*inch/minutes^2;
228 (%o28) (-------------) (----)
233 Esto también hubiese funcionado con @code{uforget(N)} o
234 @code{uforget(%force)}.
237 Véase también @code{uforget}. Para hacer uso de esta función ejecútese @code{load("unit")}.
241 @deffn {Función} uforget (@var{list})
242 Por defecto, el paquete @code{unit} convierte todas las unidades a las
243 siete fundamentales del sistema MKS. Este comportamiento puede alterarse
244 mediante la instrucción @code{setunits}. Después, si el usuario quiere
245 restaurar el comportamiento por defecto podrá hacerlo para una dimensión
246 determinada haciendo uso de la instrucción @code{uforget}:
249 (%i13) setunits([centigram,inch,minute]);
253 (%i14) centigram*inch/minutes^2;
260 (%i15) uforget([cg,%in,%min]);
261 (%o15) [false, false, false]
264 (%i16) centigram*inch/minutes^2;
266 (%o16) (-------------) (----)
272 La instrucción @code{uforget} opera
273 sobre dimensiones, no sobre unidades, de modo que valdrá para
274 cualquier unidad de una dimensión concreta. La propia dimensión
275 es una argumento válido para esta función.
277 Véase también @code{setunits}. Para hacer uso de esta función ejecútese @code{load("unit")}.
281 @deffn {Función} convert (@var{expr}, @var{list})
282 La función @code{convert} permite conversiones de una sola vez sin
283 alterar el entorno global de ejecución. Acepta tanto un único argumento
284 como una lista de unidades a utilizar en las conversiones. Cuando se realiza
285 una llamada a @code{convert} se ignora el sistema global de evaluación, con
286 el fin de evitar que el resultado deseado sea nuevamente transformado.
287 Como consecuencia de esto, en los cálculos con decimales, los avisos de
288 tipo @code{rat} se harán visibles si la variable global @code{ratprint}
289 vale @code{true}. Otra propiedad de @code{convert} es que permite al
290 usuario hacer conversiones al sistema fundamental de dimensiones incluso
291 cuando el entorno ha sido ajustado para simplificar a una dimensión
302 (%i3) convert(kg*m/s^2,[g,km,s]);
309 (%i4) convert(kg*m/s^2,[g,inch,minute]);
311 `rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
313 (%o4) (-----------) (-----)
318 (%i5) convert(kg*m/s^2,[N]);
322 (%i6) convert(kg*m^2/s^2,[N]);
326 (%i7) setunits([N,J]);
330 (%i8) convert(kg*m^2/s^2,[N]);
334 (%i9) convert(kg*m^2/s^2,[N,inch]);
336 `rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
342 (%i10) convert(kg*m^2/s^2,[J]);
350 (%i12) setunits([g,inch,s]);
364 (%o15) (-------) (-----)
369 (%i16) convert(kg*m/s^2,[g,inch,s]);
371 `rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
373 (%o16) (-------) (-----)
379 Véanse también @code{setunits} y @code{uforget}.
380 Para hacer uso de esta función ejecútese @code{load("unit")}.
384 @defvr {Variable opcional} usersetunits
385 Valor por defecto: ninguno
387 En caso de que el usuario desee que el comportamiento por defecto del
388 paquete @code{unit} sea distinto del descrito, puede hacer uso del
389 fichero @code{maxima-init.mac} y de la variable global @code{usersetunits}.
390 El paquete @code{unit} comprobará al ser cargado si se le ha dado a esta
391 variable una lista de unidades; en caso afirmativo, aplicará @code{setunits}
392 a las unidades de esta lista y las utilizará por defecto. Una llamada a la
393 función @code{uforget} permitirá retornar al comportamiento establecido
394 por defecto por el usuario. Por ejemplo, si en el archivo @code{maxima-init.mac}
395 se tiene el siguiente código:
397 usersetunits : [N,J];
400 observaríamos el siguiente comportamiento:
404 *******************************************************************
405 * Units version 0.50 *
406 * Definitions based on the NIST Reference on *
407 * Constants, Units, and Uncertainty *
408 * Conversion factors from various sources including *
409 * NIST and the GNU units package *
410 *******************************************************************
412 Redefining necessary functions...
413 WARNING: DEFUN/DEFMACRO: redefining function
414 TOPLEVEL-MACSYMA-EVAL ...
415 WARNING: DEFUN/DEFMACRO: redefining function MSETCHK ...
416 WARNING: DEFUN/DEFMACRO: redefining function KILL1 ...
417 WARNING: DEFUN/DEFMACRO: redefining function NFORMAT ...
418 Initializing unit arrays...
420 User defaults found...
421 User defaults initialized.
440 (%i6) setunits([dyn,eV]);
449 (%o8) (6241509596477042688) (eV)
453 (%o9) (6241509596477042688) (eV m)
457 (%o10) (6241509596477042688000) (eV)
460 (%i11) uforget([dyn,eV]);
461 (%o11) [false, false]
481 De no haber hecho uso de @code{usersetunits}, las entradas iniciales hubiesen
482 sido convertidas a unidades MKS y cualquier llamada a @code{uforget} hubiese
483 retornado también a MKS. Sin embargo, las preferencias establecidas por el
484 usuario se respetan en ambos casos. Para eliminar las preferencias del usuario
485 y volver a utilizar las establecidas por defecto por el paquete @code{unit},
486 debe utilizarse la instrucción @code{dontusedimension}. La función
487 @code{uforget} puede restaurar nuevamente las preferencias del usuario, pero
488 sólo si @code{usedimension} mantiene su valor. Alternativamente,
489 @code{kill(usersetunits)} eliminará completamente cualquier vestigio de las
490 preferencias del usuario durante la sesión actual. Véanse a continuación
491 algunos ejemplos de aplicación de estas opciones:
502 (%i4) setunits([dyn,eV]);
511 (%o6) (6241509596477042688) (eV)
514 (%i7) uforget([dyn,eV]);
526 (%i10) dontusedimension(N);
530 (%i11) dontusedimension(J);
531 (%o11) [%energy, %force]
549 (%i14) setunits([dyn,eV]);
568 (%i17) uforget([dyn,eV]);
569 (%o17) [false, false]
587 (%i20) usedimension(N);
588 Done. To have Maxima simplify to this dimension, use
589 setunits([unit]) to select a unit.
593 (%i21) usedimension(J);
594 Done. To have Maxima simplify to this dimension, use
595 setunits([unit]) to select a unit.
614 (%i24) setunits([dyn,eV]);
619 (%o25) (100000) (dyn)
623 (%o26) (6241509596477042688) (eV)
626 (%i27) uforget([dyn,eV]);
627 (%o27) [false, false]
638 (%i30) kill(usersetunits);
642 (%i31) uforget([dyn,eV]);
643 (%o31) [false, false]
662 Desafortunadamente, esta amplia variedad de opciones puede resultar
663 confusa en un primer momento, pero una vez se practica un poco con
664 ellas, el usuario comprobará que tiene un control absoluto sobre
665 su entorno de trabajo.
669 @c One other significant customization option available is the @code{setunitprefix}
670 @c command. Normally, abbreviations used in this package are as close to those
671 @c used in standard texts as possible. Some people, however, prefer to use those
672 @c symbols for normal work and have units labeled in some other fasion.
673 @c @code{setunitprefix} is provided for this case. Here is an example of its use:
677 @deffn {Función} metricexpandall (@var{x})
679 Reconstruye automáticamente las listas globales de unidades creando todas
680 los múltiplos y submúltiplos métricos necesarios. El argumento numérico
681 @var{x} se utiliza para especificar cuántos prefijos numéricos quiere
682 utilizar el usuario. Los argumentos son los siguientes:
685 0 - none. Only base units
686 1 - kilo, centi, milli
687 (por defecto) 2 - giga, mega, kilo, hecto, deka, deci, centi,
689 3 - peta, tera, giga, mega, kilo, hecto, deka,
690 deci, centi, milli, micro, nano, pico,
696 Normalmente, Maxima no definirá el juego completo de múltiplos y
697 submúltiplos, lo que implica un número muy grande de unidades, pero
698 @code{metricexpandall} puede utilizarse para reconstruir la lista. La
699 variable fundamental del paquete @code{unit} es @code{%unitexpand}.
702 @defvr {Variable opcional} %unitexpand
703 Valor por defecto: @code{2}
705 Es el valor suministrado a @code{metricexpandall} durante la carga del
710 @c @deffn {Function} functionname (@var{arg1}, @var{arg2}, ..., @var{argn})
713 @c @defvr {Variable} variablename
714 @c Default value: @code{true}