Fix bug #1848: taytorat leaks internal gensyms from multivar expansions
[maxima.git] / doc / info / es / unit.texi
blob4fa933a00f502c9caea965044390fe0baa3c521a
1 @c English version: 2008-12-31
2 @menu
3 * Introducción a units::       
4 * Funciones y variables para units::       
5 @end menu
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
21 tradicional.
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:
38 @example
39 (%i1) load("unit")$
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... 
55 Done. 
56 @end example
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.
80 @example
81 @group
82 (%i2) N;
83                                      kg m
84 (%o2)                                ----
85                                        2
86                                       s
87 @end group
88 @group
89 (%i3) dyn;
90                                    1      kg m
91 (%o3)                           (------) (----)
92                                  100000     2
93                                            s
94 @end group
95 @group
96 (%i4) g;
97                                     1
98 (%o4)                             (----) (kg)
99                                    1000
100 @end group
101 @group
102 (%i5) centigram*inch/minutes^2;
103                                   127        kg m
104 (%o5)                       (-------------) (----)
105                              1800000000000     2
106                                               s
107 @end group
108 @end example
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}:
113 @example
114 @group
115 (%i6) setunits([centigram,inch,minute]);
116 (%o6)                                done
117 @end group
118 @group
119 (%i7) N;
120                             1800000000000   %in cg
121 (%o7)                      (-------------) (------)
122                                  127            2
123                                             %min
124 @end group
125 @group
126 (%i8) dyn;
127                                18000000   %in cg
128 (%o8)                         (--------) (------)
129                                  127          2
130                                           %min
131 @end group
132 @group
133 (%i9) g;
134 (%o9)                             (100) (cg)
135 @end group
136 @group
137 (%i10) centigram*inch/minutes^2;
138                                     %in cg
139 (%o10)                              ------
140                                         2
141                                     %min
142 @end group
143 @end example
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:
148 @example
149 @group
150 (%i11) setunits([kg,m,s]);
151 (%o11)                               done
152 @end group
153 @group
154 (%i12) centigram*inch/minutes^2;
155                                   127        kg m
156 (%o12)                      (-------------) (----)
157                              1800000000000     2
158                                               s
159 @end group
160 @end example
162 Las unidades derivadas también se controlan con esta misma instrucción:
163 @example
164 @group
165 (%i17) setunits(N);
166 (%o17)                               done
167 @end group
168 @group
169 (%i18) N;
170 (%o18)                                 N
171 @end group
172 @group
173 (%i19) dyn;
174                                     1
175 (%o19)                           (------) (N)
176                                   100000
177 @end group
178 @group
179 (%i20) kg*m/s^2;
180 (%o20)                                 N
181 @end group
182 @group
183 (%i21) centigram*inch/minutes^2;
184                                     127
185 (%o21)                        (-------------) (N)
186                                1800000000000
187 @end group
188 @end example
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:
195 @example
196 @group
197 (%i22) setunits(dyn);
198 (%o22)                               done
199 @end group
200 @group
201 (%i23) kg*m/s^2;
202 (%o23)                          (100000) (dyn)
203 @end group
204 @group
205 (%i24) centigram*inch/minutes^2;
206                                   127
207 (%o24)                         (--------) (dyn)
208                                 18000000
209 @end group
210 @end example
212 Para desactivar una unidad se utiliza la instrucción @code{uforget}:
213 @example
214 @group
215 (%i26) uforget(dyn);
216 (%o26)                               false
217 @end group
218 @group
219 (%i27) kg*m/s^2;
220                                      kg m
221 (%o27)                               ----
222                                        2
223                                       s
224 @end group
225 @group
226 (%i28) centigram*inch/minutes^2;
227                                   127        kg m
228 (%o28)                      (-------------) (----)
229                              1800000000000     2
230                                               s
231 @end group
232 @end example
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")}.
238 @end deffn
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}:
247 @example
248 @group
249 (%i13) setunits([centigram,inch,minute]);
250 (%o13)                               done
251 @end group
252 @group
253 (%i14) centigram*inch/minutes^2;
254                                     %in cg
255 (%o14)                              ------
256                                         2
257                                     %min
258 @end group
259 @group
260 (%i15) uforget([cg,%in,%min]);
261 (%o15)                      [false, false, false]
262 @end group
263 @group
264 (%i16) centigram*inch/minutes^2;
265                                   127        kg m
266 (%o16)                      (-------------) (----)
267                              1800000000000     2
268                                               s
269 @end group
270 @end example
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")}.
278 @end deffn
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
292 derivada.
293 @example
294 @group
295 (%i2) kg*m/s^2;
296                                      kg m
297 (%o2)                                ----
298                                        2
299                                       s
300 @end group
301 @group
302 (%i3) convert(kg*m/s^2,[g,km,s]);
303                                      g km
304 (%o3)                                ----
305                                        2
306                                       s
307 @end group
308 @group
309 (%i4) convert(kg*m/s^2,[g,inch,minute]);
311 `rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
312                               18000000000   %in g
313 (%o4)                        (-----------) (-----)
314                                   127           2
315                                             %min
316 @end group
317 @group
318 (%i5) convert(kg*m/s^2,[N]);
319 (%o5)                                  N
320 @end group
321 @group
322 (%i6) convert(kg*m^2/s^2,[N]);
323 (%o6)                                 m N
324 @end group
325 @group
326 (%i7) setunits([N,J]);
327 (%o7)                                done
328 @end group
329 @group
330 (%i8) convert(kg*m^2/s^2,[N]);
331 (%o8)                                 m N
332 @end group
333 @group
334 (%i9) convert(kg*m^2/s^2,[N,inch]);
336 `rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
337                                  5000
338 (%o9)                           (----) (%in N)
339                                  127
340 @end group
341 @group
342 (%i10) convert(kg*m^2/s^2,[J]);
343 (%o10)                                 J
344 @end group
345 @group
346 (%i11) kg*m^2/s^2;
347 (%o11)                                 J
348 @end group
349 @group
350 (%i12) setunits([g,inch,s]);
351 (%o12)                               done
352 @end group
353 @group
354 (%i13) kg*m/s^2;
355 (%o13)                                 N
356 @end group
357 @group
358 (%i14) uforget(N);
359 (%o14)                               false
360 @end group
361 @group
362 (%i15) kg*m/s^2;
363                                 5000000   %in g
364 (%o15)                         (-------) (-----)
365                                   127       2
366                                            s
367 @end group
368 @group
369 (%i16) convert(kg*m/s^2,[g,inch,s]);
371 `rat' replaced 39.37007874015748 by 5000/127 = 39.37007874015748
372                                 5000000   %in g
373 (%o16)                         (-------) (-----)
374                                   127       2
375                                            s
376 @end group
377 @end example
379 Véanse también @code{setunits} y @code{uforget}.
380 Para hacer uso de esta función ejecútese @code{load("unit")}.
381 @end deffn
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:
396 @example
397 usersetunits : [N,J];
398 @end example
400 observaríamos el siguiente comportamiento:
401 @example
402 @group
403 (%i1) load("unit")$
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...
419 Done.
420 User defaults found...
421 User defaults initialized.
422 @end group
423 @group
424 (%i2) kg*m/s^2;
425 (%o2)                                  N
426 @end group
427 @group
428 (%i3) kg*m^2/s^2;
429 (%o3)                                  J
430 @end group
431 @group
432 (%i4) kg*m^3/s^2;
433 (%o4)                                 J m
434 @end group
435 @group
436 (%i5) kg*m*km/s^2;
437 (%o5)                             (1000) (J)
438 @end group
439 @group
440 (%i6) setunits([dyn,eV]);
441 (%o6)                                done
442 @end group
443 @group
444 (%i7) kg*m/s^2;
445 (%o7)                           (100000) (dyn)
446 @end group
447 @group
448 (%i8) kg*m^2/s^2;
449 (%o8)                     (6241509596477042688) (eV)
450 @end group
451 @group
452 (%i9) kg*m^3/s^2;
453 (%o9)                    (6241509596477042688) (eV m)
454 @end group
455 @group
456 (%i10) kg*m*km/s^2;
457 (%o10)                   (6241509596477042688000) (eV)
458 @end group
459 @group
460 (%i11) uforget([dyn,eV]);
461 (%o11)                           [false, false]
462 @end group
463 @group
464 (%i12) kg*m/s^2;
465 (%o12)                                 N
466 @end group
467 @group
468 (%i13) kg*m^2/s^2;
469 (%o13)                                 J
470 @end group
471 @group
472 (%i14) kg*m^3/s^2;
473 (%o14)                                J m
474 @end group
475 @group
476 (%i15) kg*m*km/s^2;
477 (%o15)                            (1000) (J)
478 @end group
479 @end example
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:
492 @example
493 @group
494 (%i2) kg*m/s^2;
495 (%o2)                                  N
496 @end group
497 @group
498 (%i3) kg*m^2/s^2;
499 (%o3)                                  J
500 @end group
501 @group
502 (%i4) setunits([dyn,eV]);
503 (%o4)                                done
504 @end group
505 @group
506 (%i5) kg*m/s^2;
507 (%o5)                           (100000) (dyn)
508 @end group
509 @group
510 (%i6) kg*m^2/s^2;
511 (%o6)                     (6241509596477042688) (eV)
512 @end group
513 @group
514 (%i7) uforget([dyn,eV]);
515 (%o7)                          [false, false]
516 @end group
517 @group
518 (%i8) kg*m/s^2;
519 (%o8)                                  N
520 @end group
521 @group
522 (%i9) kg*m^2/s^2;
523 (%o9)                                  J
524 @end group
525 @group
526 (%i10) dontusedimension(N);
527 (%o10)                             [%force]
528 @end group
529 @group
530 (%i11) dontusedimension(J);
531 (%o11)                         [%energy, %force]
532 @end group
533 @group
534 (%i12) kg*m/s^2;
535                                      kg m
536 (%o12)                               ----
537                                        2
538                                       s
539 @end group
540 @group
541 (%i13) kg*m^2/s^2;
542                                          2
543                                      kg m
544 (%o13)                               -----
545                                        2
546                                       s
547 @end group
548 @group
549 (%i14) setunits([dyn,eV]);
550 (%o14)                               done
551 @end group
552 @group
553 (%i15) kg*m/s^2;
554                                      kg m
555 (%o15)                               ----
556                                        2
557                                       s
558 @end group
559 @group
560 (%i16) kg*m^2/s^2;
561                                          2
562                                      kg m
563 (%o16)                               -----
564                                        2
565                                       s
566 @end group
567 @group
568 (%i17) uforget([dyn,eV]);
569 (%o17)                         [false, false]
570 @end group
571 @group
572 (%i18) kg*m/s^2;
573                                      kg m
574 (%o18)                               ----
575                                        2
576                                       s
577 @end group
578 @group
579 (%i19) kg*m^2/s^2;
580                                          2
581                                      kg m
582 (%o19)                               -----
583                                        2
584                                       s
585 @end group
586 @group
587 (%i20) usedimension(N);
588 Done.  To have Maxima simplify to this dimension, use
589 setunits([unit]) to select a unit.
590 (%o20)                               true
591 @end group
592 @group
593 (%i21) usedimension(J);
594 Done.  To have Maxima simplify to this dimension, use
595 setunits([unit]) to select a unit.
596 (%o21)                               true
597 @end group
598 @group
599 (%i22) kg*m/s^2;
600                                      kg m
601 (%o22)                               ----
602                                        2
603                                       s
604 @end group
605 @group
606 (%i23) kg*m^2/s^2;
607                                          2
608                                      kg m
609 (%o23)                               -----
610                                        2
611                                       s
612 @end group
613 @group
614 (%i24) setunits([dyn,eV]);
615 (%o24)                               done
616 @end group
617 @group
618 (%i25) kg*m/s^2;
619 (%o25)                          (100000) (dyn)
620 @end group
621 @group
622 (%i26) kg*m^2/s^2;
623 (%o26)                    (6241509596477042688) (eV)
624 @end group
625 @group
626 (%i27) uforget([dyn,eV]);
627 (%o27)                           [false, false]
628 @end group
629 @group
630 (%i28) kg*m/s^2;
631 (%o28)                                 N
632 @end group
633 @group
634 (%i29) kg*m^2/s^2;
635 (%o29)                                 J
636 @end group
637 @group
638 (%i30) kill(usersetunits);
639 (%o30)                               done
640 @end group
641 @group
642 (%i31) uforget([dyn,eV]);
643 (%o31)                          [false, false]
644 @end group
645 @group
646 (%i32) kg*m/s^2;
647                                      kg m
648 (%o32)                               ----
649                                        2
650                                       s
651 @end group
652 @group
653 (%i33) kg*m^2/s^2;
654                                          2
655                                      kg m
656 (%o33)                               -----
657                                        2
658                                       s
659 @end group
660 @end example
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:
675 @end defvr
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:
683 @example
684 @group
685                0 - none. Only base units
686                1 - kilo, centi, milli
687 (por defecto)  2 - giga, mega, kilo, hecto, deka, deci, centi,
688                    milli, micro, nano
689                3 - peta, tera, giga, mega, kilo, hecto, deka,
690                    deci, centi, milli, micro, nano, pico, 
691                    femto
692                4 - todos
693 @end group
694 @end example
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}.
700 @end deffn
702 @defvr {Variable opcional} %unitexpand
703 Valor por defecto: @code{2}
705 Es el valor suministrado a @code{metricexpandall} durante la carga del
706 paquete @code{unit}.
707 @end defvr
710 @c @deffn {Function} functionname (@var{arg1}, @var{arg2}, ..., @var{argn})
711 @c @end deffn
713 @c @defvr {Variable} variablename
714 @c Default value: @code{true}
715 @c @end defvr