1This is maxima.info, produced by makeinfo version 6.6 from maxima.texi.
2
3Este es el Manual de Maxima en versi�n Texinfo
4
5Copyright 1994, 2001 William F. Schelter
6
7START-INFO-DIR-ENTRY
8* Maxima: (maxima).  Un sistema de c�lculo simb�lico
9END-INFO-DIR-ENTRY
10
11
12File: maxima.info,  Node: Funciones y variables para itensor,  Prev: Introducci�n a itensor,  Up: itensor
13
1425.2 Funciones y variables para itensor
15=======================================
16
1725.2.1 Trabajando con objetos indexados
18---------------------------------------
19
20 -- Funci�n: dispcon (<tensor_1>, <tensor_2>, ...)
21 -- Funci�n: dispcon (all)
22
23     Muestra las propiedades contractivas de sus argumentos tal como
24     fueron asignadas por 'defcon'.  La llamada 'dispcon (all)' muestra
25     todas propiedades contractivas que fueron definidas.
26
27 -- Funci�n: entertensor (<nombre>)
28
29     Permite crear un objeto indexado llamado <nombre>, con cualquier
30     n�mero de �ndices tensoriales y de derivadas.  Se admiten desde un
31     �nico �ndice hasta una lista de �ndices.  V�ase el ejemplo en la
32     descripci�n de 'covdiff'.
33
34 -- Funci�n: changename (<anterior>, <nuevo>, <expr>)
35
36     Cambia el nombre de todos los objetos indexados llamados <anterior>
37     a <new> en <expr>.  El argumento <anterior> puede ser un s�mbolo o
38     una lista de la forma '[<nombre>, <m>, <n>]', en cuyo caso s�lo los
39     objetos indexados de llamados <nombre> con <m> �ndices covariantes
40     y <n> contravariantes se renombrar�n como <nuevo>.
41
42 -- Funci�n: listoftens
43
44     Hace un listado de todos los tensores y sus �ndices en una
45     expresi�n tensorial.  Por ejemplo,
46
47
48          (%i6) ishow(a([i,j],[k])*b([u],[],v)+c([x,y],[])*d([],[])*e)$
49                                                   k
50          (%t6)                        d e c    + a    b
51                                            x y    i j  u,v
52          (%i7) ishow(listoftens(%))$
53                                         k
54          (%t7)                        [a   , b   , c   , d]
55                                         i j   u,v   x y
56
57
58 -- Funci�n: ishow (<expr>)
59
60     Muestra <expr> con todos los objetos indexados que contiene, junto
61     con los correspondientes �ndices covariantes (como sub�ndices) y
62     contravariantes (como super�ndices).  Los �ndices de derivadas se
63     muestran como sub�ndices, separados de los covariantes por una
64     coma; v�anse los m�ltiples ejemplos de este documento.
65
66 -- Funci�n: indices (<expr>)
67
68     Devuelve una lista con dos elementos.  El primer elemento es una
69     lista con los �ndices libres, aquellos que aparecen una sola vez.
70     El segundo elemento es una lista con los �ndices mudos en <expr>,
71     aquellos que aparecen exactamente dos veces.  Por ejemplo,
72
73
74          (%i1) load(itensor);
75          (%o1)      /share/tensor/itensor.lisp
76          (%i2) ishow(a([i,j],[k,l],m,n)*b([k,o],[j,m,p],q,r))$
77                                          k l      j m p
78          (%t2)                          a        b
79                                          i j,m n  k o,q r
80          (%i3) indices(%);
81          (%o3)                 [[l, p, i, n, o, q, r], [k, j, m]]
82
83
84     Un producto tensorial que contenga el mismo �ndice m�s de dos veces
85     es sint�cticamente incorrecto.  La funci�n 'indices' intenta tratar
86     estas expresiones de una forma razonable; sin embargo, cuando se la
87     obliga a manipular una expresi�n incorrecta puede tener un
88     comportamiento imprevisto.
89
90 -- Funci�n: rename (<expr>)
91 -- Funci�n: rename (<expr>, <count>)
92
93     Devuelve una expresi�n equivalente a <expr> pero con los �ndices
94     mudos de cada t�rmino elegidos del conjunto '[%1, %2,...]' si el
95     segundo argumento opcional se omite.  En otro caso, los �ndices
96     mudos son indexados empezando con el valor <count>.  Cada �ndice
97     mudo en un producto ser� diferente.  En el caso de las sumas, la
98     funci�n 'rename' operar� sobre cada t�rmino de la suma
99     reinicializando el contador con cada t�rmino.  De esta manera
100     'rename' puede servir como simplificador tensorial.  Adem�s, los
101     �ndices se ordenar�n alfanum�ricamente, si la variable 'allsym'
102     vale 'true', respecto de los �ndices covariantes y contravariantes
103     dependiendo del valor de 'flipflag'.  Si 'flipflag' vale 'false',
104     entonces los �ndices se renombrar�n de acuerdo con el orden de los
105     �ndices contravariantes.  Si 'flipflag' vale 'true', entonces los
106     �ndices se renombrar�n de acuerdo con el orden de los �ndices
107     covariantes.  Suele acontecer que el efecto combinado de los dos
108     cambios de nombre reduzcan la expresi�n m�s de lo que que pueda
109     reducir cualquiera de ellas por separado.
110
111
112          (%i1) load(itensor);
113          (%o1)      /share/tensor/itensor.lisp
114          (%i2) allsym:true;
115          (%o2)                                true
116          (%i3) g([],[%4,%5])*g([],[%6,%7])*ichr2([%1,%4],[%3])*
117          ichr2([%2,%3],[u])*ichr2([%5,%6],[%1])*ichr2([%7,r],[%2])-
118          g([],[%4,%5])*g([],[%6,%7])*ichr2([%1,%2],[u])*
119          ichr2([%3,%5],[%1])*ichr2([%4,%6],[%3])*ichr2([%7,r],[%2]),noeval$
120          (%i4) expr:ishow(%)$
121
122                 %4 %5  %6 %7      %3         u          %1         %2
123          (%t4) g      g      ichr2      ichr2      ichr2      ichr2
124                                   %1 %4      %2 %3      %5 %6      %7 r
125
126                  %4 %5  %6 %7      u          %1         %3         %2
127               - g      g      ichr2      ichr2      ichr2      ichr2
128                                    %1 %2      %3 %5      %4 %6      %7 r
129          (%i5) flipflag:true;
130          (%o5)                                true
131          (%i6) ishow(rename(expr))$
132                 %2 %5  %6 %7      %4         u          %1         %3
133          (%t6) g      g      ichr2      ichr2      ichr2      ichr2
134                                   %1 %2      %3 %4      %5 %6      %7 r
135
136                  %4 %5  %6 %7      u          %1         %3         %2
137               - g      g      ichr2      ichr2      ichr2      ichr2
138                                    %1 %2      %3 %4      %5 %6      %7 r
139          (%i7) flipflag:false;
140          (%o7)                                false
141          (%i8) rename(%th(2));
142          (%o8)                                  0
143          (%i9) ishow(rename(expr))$
144                 %1 %2  %3 %4      %5         %6         %7        u
145          (%t9) g      g      ichr2      ichr2      ichr2     ichr2
146                                   %1 %6      %2 %3      %4 r      %5 %7
147
148                  %1 %2  %3 %4      %6         %5         %7        u
149               - g      g      ichr2      ichr2      ichr2     ichr2
150                                    %1 %3      %2 %6      %4 r      %5 %7
151
152 -- Funci�n: show (<expr>)
153     Muestra 'expr' con sus objetos indexados que tengan �ndices
154     covariantes como sub�ndices y los contravariantes como
155     super�ndices.  Los �ndices derivados se muestran como sub�ndices,
156     separados por una coma de los covariantes.
157
158 -- Variable opcional: flipflag
159     Valor por defecto: 'false'
160
161     Si vale 'false' los �ndices se renombrar�n de acuerdo con el orden
162     de los �ndices covariantes, si 'true' se renombrar�n de acuerdo con
163     el orden de los �ndices covariantes.
164
165     Si 'flipflag' vale 'false', entonces 'rename' construye una lista
166     con los �ndices contravariantes seg�n van apareciendo de izquierda
167     a derecha; si vale 'true', entonces va formando la lista con los
168     covariantes.  Al primer �ndice mudo se le da el nombre '%1', al
169     siguiente '%2', etc.  Finalmente se hace la ordenaci�n.  V�ase el
170     ejemplo en la descripci�n de la funci�n 'rename'.
171
172 -- Funci�n: defcon (<tensor_1>)
173 -- Funci�n: defcon (<tensor_1>, <tensor_2>, <tensor_3>)
174
175     Le asigna a gives <tensor_1> la propiedad de que la contracci�n de
176     un producto de <tensor_1> por <tensor_2> da como resultado un
177     <tensor_3> con los �ndices apropiados.  Si s�lo se aporta un
178     argumento, <tensor_1>, entonces la contracci�n del producto de
179     <tensor_1> por cualquier otro objeto indexado que tenga los �ndices
180     apropiados, por ejemplo 'my_tensor', dar� como resultado un objeto
181     indexado con ese nombre, 'my_tensor', y con un nuevo conjunto de
182     �ndices que reflejen las contracciones realizadas.  Por ejemplo, si
183     'imetric:g', entonces 'defcon(g)' implementar� el aumento o
184     disminuci�n de los �ndices a trav�s de la contracci�n con el tensor
185     m�trico.  Se puede dar m�s de un 'defcon' para el mismo objeto
186     indexado, aplic�ndose el �ltimo.  La variable 'contractions' es una
187     lista con aquellos objetos indexados a los que se le han dado
188     propiedades de contracci�n con 'defcon'.
189
190 -- Funci�n: remcon (<tensor_1>, ..., <tensor_n>)
191 -- Funci�n: remcon (all)
192
193     Borra todas las propiedades de contracci�n de <tensor_1>, ...,
194     <tensor_n>).  La llamada 'remcon(all)' borra todas las propiedades
195     de contracci�n de todos los objetos indexados.
196
197 -- Funci�n: contract (<expr>)
198
199     Lleva a cabo las contracciones tensoriales en <expr>, la cual puede
200     ser cualquier combinaci�n de sumas y productos.  Esta funci�n
201     utiliza la informaci�n dada a la funci�n 'defcon'.  Para obtener
202     mejores resultados, 'expr' deber�a estar completamente expandida.
203     La funci�n 'ratexpand' es la forma m�s r�pida de expandir productos
204     y potencias de sumas si no hay variables en los denominadores de
205     los t�rminos.
206
207 -- Funci�n: indexed_tensor (<tensor>)
208
209     Debe ejecutarse antes de asignarle componentes a un <tensor> para
210     el que ya existe un valor, como 'ichr1', 'ichr2' o 'icurvature'.
211     V�ase el ejemplo de la descripci�n de 'icurvature'.
212
213 -- Funci�n: components (<tensor>, <expr>)
214
215     Permite asignar un valor indexado a la expresi�n <expr> dando los
216     valores de las componentes de <tensor>.  El tensor debe ser de la
217     forma 't([...],[...])', donde cualquiera de las listas puede estar
218     vac�a.  La expresi�n <expr> puede ser cualquier objeto indexado que
219     tenga otros objetos con los mismos �ndices libres que <tensor>.
220     Cuando se utiliza para asignar valores al tensor m�trico en el que
221     las componentes contengan �ndices mudos, se debe tener cuidado en
222     no generar �ndices mudos m�ltiples.  Se pueden borrar estas
223     asignaciones con la funci�n 'remcomps'.
224
225     Es importante tener en cuenta que 'components' controla la valencia
226     del tensor, no el orden de los �ndices.  As�, asignando componentes
227     de la forma 'x([i,-j],[])', 'x([-j,i],[])' o 'x([i],[j])' todos
228     ellos producen el mismo resultado, la asignaci�n de componentes a
229     un tensor de nombre 'x' con valencia '(1,1)'.
230
231     Las componentes se pueden asignar a una expresi�n indexada de
232     cuatro maneras, dos de las cuales implican el uso de la instrucci�n
233     'components':
234
235     1) Como una expresi�n indexada.  Por ejemplo:
236
237
238          (%i2) components(g([],[i,j]),e([],[i])*p([],[j]))$
239          (%i3) ishow(g([],[i,j]))$
240                                                i  j
241          (%t3)                                e  p
242
243
244     2) Como una matriz:
245
246          (%i5) lg:-ident(4)$lg[1,1]:1$lg;
247                                      [ 1   0    0    0  ]
248                                      [                  ]
249                                      [ 0  - 1   0    0  ]
250          (%o5)                       [                  ]
251                                      [ 0   0   - 1   0  ]
252                                      [                  ]
253                                      [ 0   0    0   - 1 ]
254
255          (%i6) components(g([i,j],[]),lg);
256          (%o6)                                done
257          (%i7) ishow(g([i,j],[]))$
258          (%t7)                                g
259                                                i j
260          (%i8) g([1,1],[]);
261          (%o8)                                  1
262          (%i9) g([4,4],[]);
263          (%o9)                                 - 1
264
265
266     3) Como una funci�n.  Se puede utilizar una funci�n de Maxima para
267     especificar las componentes de un tensor en base a sus �ndices.
268     Por ejemplo, el c�digo siguiente asigna 'kdelta' a 'h' si 'h' tiene
269     el mismo n�mero de �ndices covariantes y contravariantes y no tiene
270     �ndices de derivadas, asign�ndole 'g' en otro caso:
271
272
273          (%i4) h(l1,l2,[l3]):=if length(l1)=length(l2) and length(l3)=0
274            then kdelta(l1,l2) else apply(g,append([l1,l2], l3))$
275          (%i5) ishow(h([i],[j]))$
276                                                    j
277          (%t5)                               kdelta
278                                                    i
279          (%i6) ishow(h([i,j],[k],l))$
280                                               k
281          (%t6)                               g
282                                               i j,l
283
284
285     4) Utilizando los patrones de Maxima, en particular las funciones
286     'defrule' y 'applyb1':
287
288
289          (%i1) load(itensor);
290          (%o1)      /share/tensor/itensor.lisp
291          (%i2) matchdeclare(l1,listp);
292          (%o2)                                done
293          (%i3) defrule(r1,m(l1,[]),(i1:idummy(),
294                g([l1[1],l1[2]],[])*q([i1],[])*e([],[i1])))$
295
296          (%i4) defrule(r2,m([],l1),(i1:idummy(),
297                w([],[l1[1],l1[2]])*e([i1],[])*q([],[i1])))$
298
299          (%i5) ishow(m([i,n],[])*m([],[i,m]))$
300                                              i m
301          (%t5)                              m    m
302                                                   i n
303          (%i6) ishow(rename(applyb1(%,r1,r2)))$
304                                     %1  %2  %3 m
305          (%t6)                     e   q   w     q   e   g
306                                                   %1  %2  %3 n
307
308
309
310 -- Funci�n: remcomps (<tensor>)
311
312     Borra todos los valores de <tensor> que han sido asignados con la
313     funci�n 'components'.
314
315 -- Funci�n: showcomps (<tensor>)
316
317     Muestra las componentes de un tensor definidas con la instrucci�n
318     'components'.  Por ejemplo:
319
320
321          (%i1) load(ctensor);
322          (%o1)       /share/tensor/ctensor.mac
323          (%i2) load(itensor);
324          (%o2)      /share/tensor/itensor.lisp
325          (%i3) lg:matrix([sqrt(r/(r-2*m)),0,0,0],[0,r,0,0],
326                          [0,0,sin(theta)*r,0],[0,0,0,sqrt((r-2*m)/r)]);
327                         [         r                                     ]
328                         [ sqrt(-------)  0       0              0       ]
329                         [      r - 2 m                                  ]
330                         [                                               ]
331                         [       0        r       0              0       ]
332          (%o3)          [                                               ]
333                         [       0        0  r sin(theta)        0       ]
334                         [                                               ]
335                         [                                      r - 2 m  ]
336                         [       0        0       0        sqrt(-------) ]
337                         [                                         r     ]
338          (%i4) components(g([i,j],[]),lg);
339          (%o4)                                done
340          (%i5) showcomps(g([i,j],[]));
341                            [         r                                     ]
342                            [ sqrt(-------)  0       0              0       ]
343                            [      r - 2 m                                  ]
344                            [                                               ]
345                            [       0        r       0              0       ]
346          (%t5)      g    = [                                               ]
347                      i j   [       0        0  r sin(theta)        0       ]
348                            [                                               ]
349                            [                                      r - 2 m  ]
350                            [       0        0       0        sqrt(-------) ]
351                            [                                         r     ]
352          (%o5)                                false
353
354
355     La funci�n 'showcomps' tambi�n puede mostrar las componentes de
356     tensores de rango mayor de 2.
357
358 -- Funci�n: idummy ()
359
360     Incrementa 'icounter' y devuelve un �ndice de la forma '%n' siendo
361     'n' un entero positivo.  Esto garantiza que �ndices mudos que sean
362     necesarios para formar expresiones no entren en conflico con
363     �ndices que ya est�n en uso.  V�ase el ejemplo de la descripci�n de
364     'indices'.
365
366 -- Variable opcional: idummyx
367     Valor por defecto: '%'
368
369     Es el prefijo de los �ndices mudos.  V�ase 'indices'.
370
371 -- Variable opcional: icounter
372     Valor por defecto: '1'
373
374     Determina el sufijo num�rico a ser utilizado en la generaci�n del
375     siguiente �ndice mudo.  El prefijo se determina con la opci�n
376     'idummy' (por defecto: %).
377
378 -- Funci�n: kdelta (<L1>, <L2>)
379
380     Es la funci�n delta generalizada de Kronecker definida en el
381     paquete 'itensor' siendo <L1> la lista de �ndices covariantes y
382     <L2> la lista de �ndices contravariantes.  La funci�n
383     'kdelta([i],[j])' devuelve el valor de la delta ordinaria de
384     Kronecker.  La instrucci�n 'ev(<expr>,kdelta)' provoca la
385     evaluaci�n de una expresi�n que contenga 'kdelta([],[])'.
386
387     En un abuso de la notaci�n, 'itensor' tambi�n permite a 'kdelta'
388     tener 2 �ndices covariantes y ninguno contravariante, o 2
389     contravariantes y ninguno covariante.  Esto es una funcionalidad
390     del paquete, loque no implica que 'kdelta([i,j],[])' sea un objeto
391     tensorial de pleno derecho.
392
393 -- Funci�n: kdels (<L1>, <L2>)
394
395     Funci�n delta de Kronecker simetrizada, utilizada en algunos
396     c�lculos.  Por ejemplo:
397
398
399          (%i1) load(itensor);
400          (%o1)      /share/tensor/itensor.lisp
401          (%i2) kdelta([1,2],[2,1]);
402          (%o2)                                 - 1
403          (%i3) kdels([1,2],[2,1]);
404          (%o3)                                  1
405          (%i4) ishow(kdelta([a,b],[c,d]))$
406                                       c       d         d       c
407          (%t4)                  kdelta  kdelta  - kdelta  kdelta
408                                       a       b         a       b
409          (%i4) ishow(kdels([a,b],[c,d]))$
410                                       c       d         d       c
411          (%t4)                  kdelta  kdelta  + kdelta  kdelta
412                                       a       b         a       b
413
414
415 -- Funci�n: levi_civita (<L>)
416
417     Es el tensor de permutaci�n de Levi-Civita, el cual devuelve 1 si
418     la lista <L> con una permutaci�n par de enteros, -1 si es en una
419     permutaci�n impar y 0 si algunos de los �ndices de <L> est�n
420     repetidos.
421
422 -- Funci�n: lc2kdt (<expr>)
423
424     Simplifica expresiones que contengan el s�mbolo de Levi-Civita,
425     convirti�ndolas en expresiones con la delta de Kronecker siempre
426     que sea posible.  La diferencia principal entre esta funci�n y la
427     simple evaluaci�n del s�mbolo de Levi-Civita consiste en que de
428     esta �ltima forma se obtienen expresiones de Kronecker con �ndices
429     num�ricos, lo que impide simplificaciones ulteriores.  La funci�n
430     'lc2kdt' evita este problema, dando resultados con son m�s f�ciles
431     de simplificar con 'rename' o 'contract'.
432
433
434          (%i1) load(itensor);
435          (%o1)      /share/tensor/itensor.lisp
436          (%i2) expr:ishow('levi_civita([],[i,j])
437                           *'levi_civita([k,l],[])*a([j],[k]))$
438                                            i j  k
439          (%t2)                  levi_civita    a  levi_civita
440                                                 j            k l
441          (%i3) ishow(ev(expr,levi_civita))$
442                                            i j  k       1 2
443          (%t3)                       kdelta    a  kdelta
444                                            1 2  j       k l
445          (%i4) ishow(ev(%,kdelta))$
446                       i       j         j       i   k
447          (%t4) (kdelta  kdelta  - kdelta  kdelta ) a
448                       1       2         1       2   j
449
450                                         1       2         2       1
451                                  (kdelta  kdelta  - kdelta  kdelta )
452                                         k       l         k       l
453          (%i5) ishow(lc2kdt(expr))$
454                               k       i       j    k       j       i
455          (%t5)               a  kdelta  kdelta  - a  kdelta  kdelta
456                               j       k       l    j       k       l
457          (%i6) ishow(contract(expand(%)))$
458                                           i           i
459          (%t6)                           a  - a kdelta
460                                           l           l
461
462
463     La funci�n 'lc2kdt' en ocasiones hace uso del tensor m�trico.  Si
464     el tensor m�trico no fue previamente definido con 'imetric', se
465     obtiene un mensaje de error.
466
467
468          (%i7) expr:ishow('levi_civita([],[i,j])
469                           *'levi_civita([],[k,l])*a([j,k],[]))$
470                                           i j            k l
471          (%t7)                 levi_civita    levi_civita    a
472                                                               j k
473          (%i8) ishow(lc2kdt(expr))$
474          Maxima encountered a Lisp error:
475
476           Error in $IMETRIC [or a callee]:
477           $IMETRIC [or a callee] requires less than two arguments.
478
479          Automatically continuing.
480          To reenable the Lisp debugger set *debugger-hook* to nil.
481          (%i9) imetric(g);
482          (%o9)                                done
483          (%i10) ishow(lc2kdt(expr))$
484                   %3 i       k   %4 j       l     %3 i       l   %4 j
485          (%t10) (g     kdelta   g     kdelta   - g     kdelta   g
486                              %3             %4               %3
487                        k
488                  kdelta  ) a
489                        %4   j k
490          (%i11) ishow(contract(expand(%)))$
491                                            l i    l i  j
492          (%t11)                           a    - g    a
493                                                        j
494
495
496 -- Funci�n: lc_l
497
498     Regla de simplificaci�n utilizada en expresiones que contienen el
499     s�mbolo de 'levi_civita' sin evaluar.  Junto con 'lc_u', puede
500     utilizarse para simplificar muchas expresiones de forma m�s
501     eficiente que la evaluaci�n de 'levi_civita'.  Por ejemplo:
502
503
504          (%i1) load(itensor);
505          (%o1)      /share/tensor/itensor.lisp
506          (%i2)  el1:ishow('levi_civita([i,j,k],[])*a([],[i])*a([],[j]))$
507                                       i  j
508          (%t2)                       a  a  levi_civita
509                                                       i j k
510          (%i3) el2:ishow('levi_civita([],[i,j,k])*a([i])*a([j]))$
511                                                 i j k
512          (%t3)                       levi_civita      a  a
513                                                        i  j
514          (%i4) canform(contract(expand(applyb1(el1,lc_l,lc_u))));
515          (%t4)                                  0
516          (%i5) canform(contract(expand(applyb1(el2,lc_l,lc_u))));
517          (%t5)                                  0
518
519
520 -- Funci�n: lc_u
521
522     Regla de simplificaci�n utilizada en expresiones que contienen el
523     s�mbolo de 'levi_civita' sin evaluar.  Junto con 'lc_l', puede
524     utilizarse para simplificar muchas expresiones de forma m�s
525     eficiente que la evaluaci�n de 'levi_civita'.  V�ase 'lc_l'.
526
527 -- Funci�n: canten (<expr>)
528
529     Simplifica <expr> renombrando (v�ase 'rename') y permutando �ndices
530     mudos.  La funci�n 'rename' se restringe a sumas de productos de
531     tensores en los cuales no hay derivadas, por lo que est� limitada y
532     s�lo deber�a utilizarse si 'canform' no es capaz de de llevar a
533     cabo la simplificaci�n requerida.
534
535     La funci�n 'canten' devuelve un resultado matem�ticamente correcto
536     s�lo si su argumento es una expresi�n completamente sim�trica
537     respecto de sus �ndices.  Por esta raz�n, 'canten' devuelve un
538     error si 'allsym' no vale 'true'.
539
540 -- Funci�n: concan (<expr>)
541
542     Similar a 'canten' pero tambi�n realiza la contracci�n de los
543     �ndices.
544
54525.2.2 Simetr�as de tensores
546----------------------------
547
548 -- Variable opcional: allsym
549     Valor por defecto: 'false'
550
551     Si vale 'true' entonces todos los objetos indexados se consideran
552     sim�tricos respecto de todos sus �ndices covariantes y
553     contravariantes.  Si vale 'false' entonces no se tienen en cuenta
554     ning�n tipo de simetr�a para estos �ndices.  Los �ndices de
555     derivadas se consideran siempre sim�tricos, a menos que la variable
556     'iframe_flag' valga 'true'.
557
558 -- Funci�n: decsym (<tensor>, <m>, <n>, [<cov_1>, <cov_2>, ...],
559          [<contr_1>, <contr_2>, ...])
560
561     Declara propiedades de simetr�a para el <tensor> de <m> �ndices
562     covariantes y <n> contravariantes.  Los <cov_i> y <contr_i> son
563     seudofunciones que expresan relaciones de simetr�a entre los
564     �ndices covariantes y contravariantes, respectivamente.  �stos son
565     de la forma 'symoper(<index_1>, <index_2>,...)' donde 'symoper' es
566     uno de 'sym', 'anti' o 'cyc' y los <index_i> son enteros que
567     indican la posici�n del �ndice en el <tensor>.  Esto declarar� a
568     <tensor> sim�trico, antisim�trico o c�clico respecto de <index_i>.
569     La llamada 'symoper(all)' indica que todos los �ndices cumplen la
570     condici�n de simetr�a.  Por ejemplo, dado un objeto 'b' con 5
571     �ndices covariantes,
572     'decsym(b,5,3,[sym(1,2),anti(3,4)],[cyc(all)])' declara 'b'
573     sim�trico en el primer y segundo �ndices covariantes, antisim�trico
574     en su tercer y cuarto �ndices tambi�n covariantes y c�clico en
575     todos sus �ndices contravariantes.  Cualquiera de las listas de
576     declaraci�n de simetr�as puede ser nula.  La funci�n que realiza
577     las simplificaciones es 'canform', como se ilustra en el siguiente
578     ejemplo,
579
580
581          (%i1) load(itensor);
582          (%o1)      /share/tensor/itensor.lisp
583          (%i2) expr:contract(expand(a([i1,j1,k1],[])
584                      *kdels([i,j,k],[i1,j1,k1])))$
585          (%i3) ishow(expr)$
586          (%t3)         a      + a      + a      + a      + a      + a
587                         k j i    k i j    j k i    j i k    i k j    i j k
588          (%i4) decsym(a,3,0,[sym(all)],[]);
589          (%o4)                                done
590          (%i5) ishow(canform(expr))$
591          (%t5)                              6 a
592                                                i j k
593          (%i6) remsym(a,3,0);
594          (%o6)                                done
595          (%i7) decsym(a,3,0,[anti(all)],[]);
596          (%o7)                                done
597          (%i8) ishow(canform(expr))$
598          (%t8)                                  0
599          (%i9) remsym(a,3,0);
600          (%o9)                                done
601          (%i10) decsym(a,3,0,[cyc(all)],[]);
602          (%o10)                               done
603          (%i11) ishow(canform(expr))$
604          (%t11)                        3 a      + 3 a
605                                           i k j      i j k
606          (%i12) dispsym(a,3,0);
607          (%o12)                     [[cyc, [[1, 2, 3]], []]]
608
609
610 -- Funci�n: remsym (<tensor>, <m>, <n>)
611
612     Borra todas las propiedades de simetr�a del <tensor> que tiene <m>
613     �ndices covariantes y <n> contravariantes.
614
615 -- Funci�n: canform (<expr>)
616 -- Funci�n: canform (<expr>, <rename>)
617
618     Simplifica <expr> renombrando �ndices mudos y reordenando todos los
619     �ndices seg�n las condiciones de simetr�a que se le hayan impuesto.
620     Si 'allsym' vale 'true' entonces todos los �ndices se consideran
621     sim�tricos, en otro caso se utilizar� la informaci�n sobre
622     simetr�as suministrada por 'decsym'.  Los �ndices mudos se
623     renombran de la misma manera que en la funci�n 'rename'.  Cuando
624     'canform' se aplica a una expresi�n grande el c�lculo puede llevar
625     mucho tiempo.  Este tiempo se puede acortar llamando primero a
626     'rename'.  V�ase tambi�n el ejemplo de la descripci�n de 'decsym'.
627     La funci�n 'canform' puede que no reduzca completamente una
628     expresi�n a su forma m�s sencilla, pero en todo caso devolver� un
629     resultado matem�ticamente correcto.
630
631     Si al par�metro opcional <rename> se le asigna el valor 'false', no
632     se renombrar�n los �ndices mudos.
633
63425.2.3 C�lculo tensorial indexado
635---------------------------------
636
637 -- Funci�n: diff (<expr>, <v_1>, [<n_1>, [<v_2>, <n_2>] ...])
638
639     Se trata de la funci�n de Maxima para la diferenciaci�n, ampliada
640     para las necesidades del paquete 'itensor'.  Calcula la derivada de
641     <expr> respecto de <v_1> <n_1> veces, respecto de <v_2> <n_2>
642     veces, etc.  Para el paquete de tensores,la funci�n ha sido
643     modificada de manera que <v_i> puedan ser enteros desde 1 hasta el
644     valor que tome la variable 'dim'.  Esto permite que la derivaci�n
645     se pueda realizar con respecto del <v_i>-�simo miembro de la lista
646     'vect_coords'.  Si 'vect_coords' guarda una variable at�mica,
647     entonces esa variable ser� la que se utilice en la derivaci�n.  Con
648     esto se hace posible la utilizaci�n de una lista con nombres de
649     coordenadas subindicadas, como 'x[1]', 'x[2]', ...
650
651     El paquete sobre tensores ampl�a las capacidades de 'diff' con el
652     fin de poder calcular derivadas respecto de variables indexadas.
653     En particular, es posible derivar expresiones que contengan
654     combinaciones del tensor m�trico y sus derivadas respecto del
655     tensor m�trico y su primera y segunda derivadas.  Estos m�todos son
656     particularmente �tiles cuando se consideran los formalismos
657     lagrangianos de la teor�a gravitatoria, permitiendo obtener el
658     tensor de Einstein y las ecuaciones de campo a partir del principio
659     de acci�n.
660
661 -- Funci�n: idiff (<expr>, <v_1>, [<n_1>, [<v_2>, <n_2>] ...])
662     Diferenciaci�n inicial.  Al contrario que 'diff', que deriva
663     respecto de una variable independiente, 'idiff' puede usarse para
664     derivar respecto de una coordenada.
665
666     La funci�n 'idiff' tambi�n puede derivar el determinante del tensor
667     m�trico.  As�, si 'imetric' toma el valor 'G' entonces
668     'idiff(determinant(g),k)' devolver�
669     '2*determinant(g)*ichr2([%i,k],[%i])' donde la �ndice mudo '%i' se
670     escoge de forma apropiada.
671
672 -- Funci�n: liediff (<v>, <ten>)
673
674     Calcula la derivada de Lie de la expresi�n tensorial <ten> respecto
675     de campo vectorial <v>.  La expresi�n <ten> debe ser cualquier
676     tensor indexado; <v> debe ser el nombre (sin �ndices) de un campo
677     vectorial.  Por ejemplo:
678
679
680          (%i1) load(itensor);
681          (%o1)      /share/tensor/itensor.lisp
682          (%i2) ishow(liediff(v,a([i,j],[])*b([],[k],l)))$
683                 k    %2            %2          %2
684          (%t2) b   (v   a       + v   a     + v   a    )
685                 ,l       i j,%2    ,j  i %2    ,i  %2 j
686
687                                    %1  k        %1  k      %1  k
688                                + (v   b      - b   v    + v   b   ) a
689                                        ,%1 l    ,l  ,%1    ,l  ,%1   i j
690
691
692 -- Funci�n: rediff (<ten>)
693
694     Calcula todas las instrucciones 'idiff' que aparezcan en la
695     expresi�n tensorial <ten>.
696
697 -- Funci�n: undiff (<expr>)
698
699     Devuelve una expresi�n equivalente a <expr> pero con todas las
700     derivadas de los objetos indexados reemplazadas por la forma
701     nominal de la funci�n 'idiff'.
702
703 -- Funci�n: evundiff (<expr>)
704
705     Equivale a 'undiff' seguido de 'ev' y 'rediff'.
706
707     La raz�n de esta operaci�n es evaluar de forma sencilla expresiones
708     que no pueden ser directamente evaluadas en su forma derivada.  Por
709     ejemplo, lo siguiente provoca un error:
710
711          (%i1) load(itensor);
712          (%o1)      /share/tensor/itensor.lisp
713          (%i2) icurvature([i,j,k],[l],m);
714          Maxima encountered a Lisp error:
715
716           Error in $ICURVATURE [or a callee]:
717           $ICURVATURE [or a callee] requires less than three arguments.
718
719          Automatically continuing.
720          To reenable the Lisp debugger set *debugger-hook* to nil.
721
722     Sin embargo, si 'icurvature' se da en forma nominal, puede ser
723     evaluada utilizando 'evundiff':
724
725          (%i3) ishow('icurvature([i,j,k],[l],m))$
726                                                   l
727          (%t3)                          icurvature
728                                                   i j k,m
729          (%i4) ishow(evundiff(%))$
730                       l              l         %1           l           %1
731          (%t4) - ichr2        - ichr2     ichr2      - ichr2       ichr2
732                       i k,j m        %1 j      i k,m        %1 j,m      i k
733
734                       l              l         %1           l           %1
735                + ichr2        + ichr2     ichr2      + ichr2       ichr2
736                       i j,k m        %1 k      i j,m        %1 k,m      i j
737
738     Nota: en versiones antiguas de Maxima, las formas derivadas de los
739     s�mbolos de Christoffel no se pod�an evaluar.  Este fallo ha sido
740     subsanado, de manera que 'evundiff' ya no se necesita en
741     expresiones como esta:
742
743          (%i5) imetric(g);
744          (%o5)                                done
745          (%i6) ishow(ichr2([i,j],[k],l))$
746                 k %3
747                g     (g         - g         + g        )
748                        j %3,i l    i j,%3 l    i %3,j l
749          (%t6) -----------------------------------------
750                                    2
751
752                                   k %3
753                                  g     (g       - g       + g      )
754                                   ,l     j %3,i    i j,%3    i %3,j
755                                + -----------------------------------
756                                                   2
757
758 -- Funci�n: flush (<expr>, <tensor_1>, <tensor_2>, ...)
759
760     Iguala a cero en la expresi�n <expr> todas las apariciones de
761     <tensor_i> que no tengan �ndices de derivadas.
762
763 -- Funci�n: flushd (<expr>, <tensor_1>, <tensor_2>, ...)
764
765     Iguala a cero en la expresi�n <expr> todas las apariciones de
766     <tensor_i> que tengan �ndices de derivadas
767
768 -- Funci�n: flushnd (<expr>, <tensor>, <n>)
769
770     Iguala a cero en <expr> todas las apariciones del objeto
771     diferenciado <tensor> que tenga <n> o m�s �ndices de derivadas,
772     como demuestra el siguiente ejemplo:
773
774
775          (%i1) load(itensor);
776          (%o1)      /share/tensor/itensor.lisp
777          (%i2) ishow(a([i],[J,r],k,r)+a([i],[j,r,s],k,r,s))$
778                                          J r      j r s
779          (%t2)                          a      + a
780                                          i,k r    i,k r s
781          (%i3) ishow(flushnd(%,a,3))$
782                                               J r
783          (%t3)                               a
784                                               i,k r
785
786 -- Funci�n: coord (<tensor_1>, <tensor_2>, ...)
787
788     Le da a <tensor_i> la propiedad de diferenciaci�n coordenada, que
789     la derivada del vector contravariante cuyo nombre es uno de los
790     <tensor_i> es igual a la delta de Kronecker.  Por ejemplo, si se ha
791     hecho 'coord(x)' entonces 'idiff(x([],[i]),j)' da
792     'kdelta([i],[j])'.  La llamada 'coord' devuelve una lista de todos
793     los objetos indexados con esta propiedad.
794
795 -- Funci�n: remcoord (<tensor_1>, <tensor_2>, ...)
796 -- Funci�n: remcoord (all)
797
798     Borra todas las propiedades de diferenciaci�n coordenada de
799     'tensor_i' que hayan sido establecidas por la funci�n 'coord'.  La
800     llamada 'remcoord(all)' borra esta propiedad de todos los objetos
801     indexados.
802
803 -- Funci�n: makebox (<expr>)
804     Muestra <expr> de la misma manera que lo hace 'show'; sin embargo,
805     cualquier tensor de d'Alembert que aparezca en <expr> estar�
806     indicado por '[]'.  Por ejemplo, '[]p([m],[n])' representa
807     'g([],[i,j])*p([m],[n],i,j)'.
808
809 -- Funci�n: conmetderiv (<expr>, <tensor>)
810
811     Simplifica expresiones que contengan derivadas ordinarias tanto de
812     las formas covariantes como contravariantes del tensor m�trico.
813     Por ejemplo, 'conmetderiv' puede relacionar la derivada del tensor
814     m�trico contravariante con los s�mbolos de Christoffel, como se ve
815     en el ejemplo:
816
817
818          (%i1) load(itensor);
819          (%o1)      /share/tensor/itensor.lisp
820          (%i2) ishow(g([],[a,b],c))$
821                                                a b
822          (%t2)                                g
823                                                ,c
824          (%i3) ishow(conmetderiv(%,g))$
825                                   %1 b      a       %1 a      b
826          (%t3)                 - g     ichr2     - g     ichr2
827                                             %1 c              %1 c
828
829 -- Funci�n: simpmetderiv (<expr>)
830 -- Funci�n: simpmetderiv (<expr>[, <stop>])
831
832     Simplifica expresiones que contienen productos de las derivadas del
833     tensor m�trico.  La funci�n 'simpmetderiv' reconoce dos
834     identidades:
835
836
837             ab        ab           ab                 a
838            g   g   + g   g     = (g   g  )   = (kdelta )   = 0
839             ,d  bc        bc,d         bc ,d          c ,d
840
841
842     de donde
843
844
845             ab          ab
846            g   g   = - g   g
847             ,d  bc          bc,d
848
849     y
850
851
852            ab          ab
853           g   g     = g   g
854            ,j  ab,i    ,i  ab,j
855
856
857     que se deduce de las simetr�as de los s�mbolos de Christoffel.
858
859     La funci�n 'simpmetderiv' tiene un argumento opcional, el cual
860     detiene la funci�n despu�s de la primera sustituci�n exitosa en un
861     expresi�n producto.  La funci�n 'simpmetderiv' tambi�n hace uso de
862     la variable global <flipflag> que determina c�mo aplicar una
863     ordenaci�n "can�nica" a los �ndices de los productos.
864
865     Todo esto se puede utilizar para conseguir buenas simplificaciones
866     que ser�an dif�ciles o imposibles de conseguir, lo que se demuestra
867     en el siguiente ejemplo, que utiliza expl�citamente las
868     simplificaciones parciales de 'simpmetderiv':
869
870
871          (%i1) load(itensor);
872          (%o1)      /share/tensor/itensor.lisp
873          (%i2) imetric(g);
874          (%o2)                                done
875          (%i3) ishow(g([],[a,b])*g([],[b,c])*g([a,b],[],d)*g([b,c],[],e))$
876                                       a b  b c
877          (%t3)                       g    g    g      g
878                                                 a b,d  b c,e
879          (%i4) ishow(canform(%))$
880
881          errexp1 has improper indices
882           -- an error.  Quitting.  To debug this try debugmode(true);
883          (%i5) ishow(simpmetderiv(%))$
884                                       a b  b c
885          (%t5)                       g    g    g      g
886                                                 a b,d  b c,e
887          (%i6) flipflag:not flipflag;
888          (%o6)                                true
889          (%i7) ishow(simpmetderiv(%th(2)))$
890                                         a b  b c
891          (%t7)                         g    g    g    g
892                                         ,d   ,e   a b  b c
893          (%i8) flipflag:not flipflag;
894          (%o8)                                false
895          (%i9) ishow(simpmetderiv(%th(2),stop))$
896                                         a b  b c
897          (%t9)                       - g    g    g      g
898                                              ,e   a b,d  b c
899          (%i10) ishow(contract(%))$
900                                              b c
901          (%t10)                           - g    g
902                                              ,e   c b,d
903
904
905     V�ase tambi�n 'weyl.dem' para un ejemplo que utiliza 'simpmetderiv'
906     y 'conmetderiv' para simplificar contracciones del tensor de Weyl.
907
908 -- Funci�n: flush1deriv (<expr>, <tensor>)
909
910     Iguala a cero en 'expr' todas las apariciones de 'tensor' que
911     tengan exactamente un �ndice derivado.
912
91325.2.4 Tensores en espacios curvos
914----------------------------------
915
916 -- Funci�n: imetric (<g>)
917 -- Variable de sistema: imetric
918     Especifica la m�trica haciendo la asignaci�n de la variable
919     'imetric:<g>', adem�s las propiedades de contracci�n de la m�trica
920     <g> se fijan ejecutando las instrucciones 'defcon(<g>),
921     defcon(<g>,<g>,kdelta)'.  La variable 'imetric', a la que no se le
922     asigna ning�n valor por defecto, tiene el valor de la m�trica que
923     se le haya asignado con la instrucci�n 'imetric(<g>)'.
924
925 -- Funci�n: idim (<n>)
926     Establece las dimensiones de la m�trica.  Tambi�n inicializa las
927     propiedades de antisimetr�a de los s�mbolos de Levi-Civita para la
928     dimensi�n dada.
929
930 -- Funci�n: ichr1 ([<i>, <j>, <k>])
931     Devuelve el s�mbolo de Christoffel de primera especie dado por la
932     definici�n
933                 (g      + g      - g     )/2 .
934                   ik,j     jk,i     ij,k
935
936     Para evaluar los s�mbolos de Christoffel de una m�trica
937     determinada, a la variable 'imetric' hay que asignarle un nombre
938     como en el ejemplo de la descripci�n de 'chr2'.
939
940 -- Funci�n: ichr2 ([<i>, <j>], [<k>])
941     Devuelve el s�mbolo de Christoffel de segunda especie dado por la
942     definici�n
943                                 ks
944             ichr2([i,j],[k]) = g    (g      + g      - g     )/2
945                                       is,j     js,i     ij,s
946
947 -- Funci�n: icurvature ([<i>, <j>, <k>], [<h>])
948     Devuelve el tensor de curvatura de Riemann en t�rminos de los
949     s�mbolos de Christoffel de segunda especie ('ichr2').  Se utiliza
950     la siguiente notaci�n:
951                         h             h            h         %1         h
952               icurvature     = - ichr2      - ichr2     ichr2    + ichr2
953                         i j k         i k,j        %1 j      i k        i j,k
954                                         h          %1
955                                  + ichr2      ichr2
956                                         %1 k       i j
957
958 -- Funci�n: covdiff (<expr>, <v_1>, <v_2>, ...)
959     Devuelve la derivada covariante de <expr> respecto de las variables
960     <v_i> en t�rminos de los s�mbolos de Christoffel de segunda especie
961     ('ichr2').  Para evaluarlos debe hacerse 'ev(<expr>,ichr2)'.
962
963
964          (%i1) load(itensor);
965          (%o1)      /share/tensor/itensor.lisp
966          (%i2) entertensor()$
967          Enter tensor name: a;
968          Enter a list of the covariant indices: [i,j];
969          Enter a list of the contravariant indices: [k];
970          Enter a list of the derivative indices: [];
971                                                k
972          (%t2)                                a
973                                                i j
974          (%i3) ishow(covdiff(%,s))$
975                       k         %1     k         %1     k
976          (%t3)     - a     ichr2    - a     ichr2    + a
977                       i %1      j s    %1 j      i s    i j,s
978
979                       k     %1
980                + ichr2     a
981                       %1 s  i j
982          (%i4) imetric:g;
983          (%o4)                                  g
984          (%i5) ishow(ev(%th(2),ichr2))$
985                   %1 %4  k
986                  g      a     (g       - g       + g      )
987                          i %1   s %4,j    j s,%4    j %4,s
988          (%t5) - ------------------------------------------
989                                      2
990              %1 %3  k
991             g      a     (g       - g       + g      )
992                     %1 j   s %3,i    i s,%3    i %3,s
993           - ------------------------------------------
994                                 2
995              k %2  %1
996             g     a    (g        - g        + g       )
997                    i j   s %2,%1    %1 s,%2    %1 %2,s     k
998           + ------------------------------------------- + a
999                                  2                         i j,s
1000
1001
1002 -- Funci�n: lorentz_gauge (<expr>)
1003     Impone la condici�n de Lorentz sustituyendo por 0 todos los objetos
1004     indexados de <expr> que tengan un �ndice derivado id�ntico a un
1005     �ndice contravariante.
1006
1007 -- Funci�n: igeodesic_coords (<expr>, <nombre>)
1008
1009     Elimina los s�mbolos no diferenciados de Christoffel y las primeras
1010     derivadas del tensor m�trico de <expr>.  El argumento <nombre> de
1011     la funci�n 'igeodesic_coords' se refiere a la m�trica <nombre> si
1012     aparece en <expr>, mientras que los coeficientes de conexi�n deben
1013     tener los nombres 'ichr1' y/o 'ichr2'.  El siguiente ejemplo hace
1014     la verificaci�n de la identidad c�clica satisfecha por el tensor de
1015     curvatura de Riemann haciendo uso de la funci�n 'igeodesic_coords'.
1016
1017
1018          (%i1) load(itensor);
1019          (%o1)      /share/tensor/itensor.lisp
1020          (%i2) ishow(icurvature([r,s,t],[u]))$
1021                       u            u         %1         u
1022          (%t2) - ichr2      - ichr2     ichr2    + ichr2
1023                       r t,s        %1 s      r t        r s,t
1024
1025                                                        u         %1
1026                                                 + ichr2     ichr2
1027                                                        %1 t      r s
1028          (%i3) ishow(igeodesic_coords(%,ichr2))$
1029                                           u            u
1030          (%t3)                       ichr2      - ichr2
1031                                           r s,t        r t,s
1032          (%i4) ishow(igeodesic_coords(icurvature([r,s,t],[u]),ichr2)+
1033                      igeodesic_coords(icurvature([s,t,r],[u]),ichr2)+
1034                      igeodesic_coords(icurvature([t,r,s],[u]),ichr2))$
1035                       u            u            u            u
1036          (%t4) - ichr2      + ichr2      + ichr2      - ichr2
1037                       t s,r        t r,s        s t,r        s r,t
1038
1039                                                       u            u
1040                                                - ichr2      + ichr2
1041                                                       r t,s        r s,t
1042          (%i5) canform(%);
1043          (%o5)                                  0
1044
1045
104625.2.5 Sistemas de referencia m�viles
1047-------------------------------------
1048
1049Maxima puede hacer c�lculos utilizando sistemas de referencia m�viles,
1050los cuales pueden ser ortonormales o cualesquiera otros.
1051
1052Para utilizar sistemas de referencia, primero se debe asignar a la
1053variable 'iframe_flag' el valor 'true'.  Con esto se hace que los
1054s�mbolos de Christoffel, 'ichr1' y 'ichr2', sean reemplazados por los
1055coeficientes 'icc1' y 'icc2' en los c�lculos, cambiando as� el
1056comportamiento de 'covdiff' y 'icurvature'.
1057
1058El sistema de referencia se define con dos tensores: el campo del
1059sistema de referencia inverso ('ifri', la base dual tetrad) y la m�trica
1060del sistema de referencia 'ifg'.  La m�trica del sistema de referencia
1061es la matriz identidad en los sistemas de referencia ortonormales, o la
1062m�trica de Lorentz en sistemas de referencia ortonormales en el
1063espacio-tiempo de Minkowski.  El campo del sistema de referencia inverso
1064define la base del sistema de referencia con vectores unitarios.  Las
1065propiedades contractivas se definen para el campo y la m�trica del
1066sistema de referencia.
1067
1068Si 'iframe_flag' vale 'true', muchas expresiones de 'itensor' utilizan
1069la m�trica 'ifg' en lugar de la m�trica definida por 'imetric' para
1070incrementar y reducir �ndices.
1071
1072IMPORTANTE: Asignando a la variable 'iframe_flag' el valor 'true' NO
1073deshace las propiedades contractivas de una m�trica establecidas con una
1074llamada a 'defcon' o a 'imetric'.  Si se utiliza el campo del sistema de
1075referencia, es mejor definir la m�trica asignando su nombre a la
1076variable 'imetric' y NO hacer una llamada a la funci�n 'imetric'.
1077
1078Maxima utiliza estos dos tensores para definir los coeficientes del
1079sistema de referencia: 'ifc1' y and 'ifc2', los cuales forman parte de
1080los coeficientes de conexi�n 'icc1' y 'icc2', tal como demuestra el
1081siguiente ejemplo:
1082
1083
1084     (%i1) load(itensor);
1085     (%o1)      /share/tensor/itensor.lisp
1086     (%i2) iframe_flag:true;
1087     (%o2)                                true
1088     (%i3) ishow(covdiff(v([],[i]),j))$
1089                                    i        i     %1
1090     (%t3)                         v   + icc2     v
1091                                    ,j       %1 j
1092     (%i4) ishow(ev(%,icc2))$
1093                                    %1     i       i
1094     (%t4)                         v   ifc2     + v
1095                                           %1 j    ,j
1096     (%i5) ishow(ev(%,ifc2))$
1097                               %1    i %2                i
1098     (%t5)                    v   ifg     ifc1        + v
1099                                              %1 j %2    ,j
1100     (%i6) ishow(ev(%,ifc1))$
1101                 %1    i %2
1102                v   ifg     (ifb        - ifb        + ifb       )
1103                                j %2 %1      %2 %1 j      %1 j %2     i
1104     (%t6)      -------------------------------------------------- + v
1105                                        2                             ,j
1106     (%i7) ishow(ifb([a,b,c]))$
1107                                                        %3    %4
1108     (%t7)               (ifri        - ifri       ) ifr   ifr
1109                              a %3,%4       a %4,%3     b     c
1110
1111
1112Se utiliza un m�todo alternativo para calcular el sistema de referencia
1113'ifb' si la variable 'iframe_bracket_form' vale 'false':
1114
1115
1116     (%i8) block([iframe_bracket_form:false],ishow(ifb([a,b,c])))$
1117                                     %6    %5        %5      %6
1118     (%t8)              ifri     (ifr   ifr     - ifr     ifr  )
1119                            a %5     b     c,%6      b,%6    c
1120
1121
1122 -- Variable: ifb
1123
1124     Es el sistema de referencia soporte.  La contribuci�n de la m�trica
1125     del campo a los coeficientes de conexi�n se expresa utilizando:
1126
1127
1128                    - ifb      + ifb      + ifb
1129                         c a b      b c a      a b c
1130          ifc1    = --------------------------------
1131              abc                  2
1132
1133
1134     El sistema de referencia soporte se define en t�rminos del campo y
1135     la m�trica del sistema de referencia.  Se utilizan dos m�todos
1136     alternativos dependiendo del valor de 'frame_bracket_form'.  Si
1137     vale 'true' (que es el valor por defecto) o si 'itorsion_flag' vale
1138     'true':
1139
1140
1141                    d      e                                      f
1142          ifb =  ifr    ifr   (ifri      - ifri      - ifri    itr   )
1143             abc    b      c       a d,e       a e,d       a f    d e
1144
1145
1146
1147     En otro caso:
1148
1149
1150                       e      d        d      e
1151          ifb    = (ifr    ifr    - ifr    ifr   ) ifri
1152             abc       b      c,e      b,e    c        a d
1153
1154
1155 -- Variable: icc1
1156
1157     Coeficientes de conexi�n de primera especie.  Se definen en
1158     'itensor' como
1159
1160
1161          icc1    = ichr1    - ikt1    - inmc1
1162              abc        abc       abc        abc
1163
1164
1165     En esta expresi�n, si 'iframe_flag' vale 'true', el s�mbolo de
1166     Christoffel 'ichr1' se reemplaza por el coeficiente de conexi�n del
1167     sistema de referencia 'ifc1'.  Si 'itorsion_flag' vale 'false',
1168     'ikt1' ser� omitido.  Tambi�n se omite si se utiliza una base, ya
1169     que la torsi�n ya est� calculada como parte del sistema de
1170     referencia.
1171
1172 -- Variable: icc2
1173
1174     Coeficientes de conexi�n de segunda especie.  Se definen en
1175     'itensor' como
1176
1177
1178              c         c        c         c
1179          icc2   = ichr2   - ikt2   - inmc2
1180              ab        ab       ab        ab
1181
1182
1183     En esta expresi�n, si la variable 'iframe_flag' vale 'true', el
1184     s�mbolo de Christoffel 'ichr2' se reemplaza por el coeficiente de
1185     conexi�n del sistema de referencia 'ifc2'.  Si 'itorsion_flag' vale
1186     'false', 'ikt2' se omite.  Tambi�n se omite si se utiliza una base
1187     de referncia.  Por �ltimo, si 'inonmet_flag' vale 'false', se omite
1188     'inmc2'.
1189
1190 -- Variable: ifc1
1191
1192     Coeficiente del sistema de referencia de primera especie, tambi�n
1193     conocido como coeficientes de rotaci�n de Ricci.  Este tensor
1194     represnta la contribuci�n de la m�trica del sistema de referencia
1195     al coeficiente de conexi�n de primera especie, definido como
1196
1197
1198                    - ifb      + ifb      + ifb
1199                         c a b      b c a      a b c
1200          ifc1    = --------------------------------
1201              abc                   2
1202
1203
1204
1205 -- Variable: ifc2
1206
1207     Coeficiente del sistema de referencia de segunda especie.  Este
1208     tensor representa la contribuci�n de la m�trica del sistema de
1209     referencia al coeficiente de conexi�n de segunda especie, definido
1210     como
1211
1212
1213              c       cd
1214          ifc2   = ifg   ifc1
1215              ab             abd
1216
1217
1218 -- Variable: ifr
1219
1220     El campo del sistema de referencia.  Se contrae con el campo
1221     inverso 'ifri' para formar la m�trica del sistema de referencia,
1222     'ifg'.
1223
1224 -- Variable: ifri
1225
1226     Campo inverso del sistema de referencia.  Especifica la base del
1227     sistema de referencia (vectores de la base dual).
1228
1229 -- Variable: ifg
1230
1231     La m�trica del sistema de referencia.  Su valor por defecto es
1232     'kdelta', pero puede cambiarse utilizando 'components'.
1233
1234 -- Variable: ifgi
1235
1236     La m�trica inversa del sistema de referencia.  Se contrae con la
1237     m�trica 'ifg' para dar 'kdelta'.
1238
1239 -- Variable opcional: iframe_bracket_form
1240     Valor por defecto: 'true'
1241
1242     Especifica c�mo se calcula 'ifb'.
1243
124425.2.6 Torsi�n y no metricidad
1245------------------------------
1246
1247Maxima trabaja con conceptos como la torsi�n y la no metricidad.  Cuando
1248la variable 'itorsion_flag' vale 'true', la contribuci�n de la torsi�n
1249se a�ade a los coeficientes de conexi�n.  Tambi�n se a�aden las
1250componentes de no metricidad cuando 'inonmet_flag' vale 'true'.
1251
1252 -- Variable: inm
1253
1254     Vector de no metricidad.  La no metricidad conforme se define a
1255     partir de la derivada covariante del tensor m�trico.  La derivada
1256     covariante del tensor m�trico, que normalmente es nula, se calcula,
1257     cuando 'inonmet_flag' vale 'true', como
1258
1259          g     =- g  inm
1260           ij;k     ij   k
1261
1262 -- Variable: inmc1
1263
1264     Permutaci�n covariante de las componentes del vector de no
1265     metricidad.  Se define como
1266
1267
1268                     g   inm  - inm  g   - g   inm
1269                      ab    c      a  bc    ac    b
1270          inmc1    = ------------------------------
1271               abc                 2
1272
1273
1274     (Sustit�yase 'g' por 'ifg' si se utiliza una m�trica para el
1275     sistema de referencia.)
1276
1277 -- Variable: inmc2
1278
1279     Permutaci�n contravariante de las componentes del vector de no
1280     metricidad.  Se utiliza en los coeficientes de conexi�n si
1281     'inonmet_flag' vale 'true'.  Se define como
1282
1283
1284                                c         c         cd
1285                    -inm  kdelta  - kdelta  inm  + g   inm  g
1286               c        a       b         a    b          d  ab
1287          inmc2   = -------------------------------------------
1288               ab                        2
1289
1290
1291     (Sustit�yase 'g' por 'ifg' si se utiliza una m�trica para el
1292     sistema de referencia.)
1293
1294 -- Variable: ikt1
1295
1296     Permutaci�n covariante del tensor de permutaci�n, tambi�n conocido
1297     como contorsi�n.  Se define como
1298
1299
1300                            d           d       d
1301                    -g   itr  - g    itr   - itr   g
1302                      ad    cb    bd    ca      ab  cd
1303          ikt1    = ----------------------------------
1304              abc                   2
1305
1306
1307     (Sustit�yase 'g' por 'ifg' si se utiliza una m�trica para el
1308     sistema de referencia.)
1309
1310 -- Variable: ikt2
1311
1312     Permutaci�n contravariante del tensor de permutaci�n, tambi�n
1313     conocido como contorsi�n.  Se define como
1314
1315
1316              c     cd
1317          ikt2   = g   ikt1
1318              ab           abd
1319
1320
1321     (Sustit�yase 'g' por 'ifg' si se utiliza una m�trica para el
1322     sistema de referencia.)
1323
1324 -- Variable: itr
1325
1326     Tensor de torsi�n.  Para una m�trica con torsi�n, la diferenciaci�n
1327     covariante iterada de una funci�n escalar no conmuta, tal como
1328     demuestra el siguiente ejemplo:
1329
1330
1331          (%i1) load(itensor);
1332          (%o1)      /share/tensor/itensor.lisp
1333          (%i2) imetric:g;
1334          (%o2)                                  g
1335          (%i3) covdiff(covdiff(f([],[]),i),j)
1336                   -covdiff(covdiff(f([],[]),j),i)$
1337          (%i4) ishow(%)$
1338                                             %4              %2
1339          (%t4)                    f    ichr2    - f    ichr2
1340                                    ,%4      j i    ,%2      i j
1341          (%i5) canform(%);
1342          (%o5)                                  0
1343          (%i6) itorsion_flag:true;
1344          (%o6)                                true
1345          (%i7) covdiff(covdiff(f([],[]),i),j)
1346                  -covdiff(covdiff(f([],[]),j),i)$
1347          (%i8) ishow(%)$
1348                                     %8             %6
1349          (%t8)             f    icc2    - f    icc2    - f     + f
1350                             ,%8     j i    ,%6     i j    ,j i    ,i j
1351          (%i9) ishow(canform(%))$
1352                                             %1             %1
1353          (%t9)                     f    icc2    - f    icc2
1354                                     ,%1     j i    ,%1     i j
1355          (%i10) ishow(canform(ev(%,icc2)))$
1356                                             %1             %1
1357          (%t10)                    f    ikt2    - f    ikt2
1358                                     ,%1     i j    ,%1     j i
1359          (%i11) ishow(canform(ev(%,ikt2)))$
1360                                %2 %1                    %2 %1
1361          (%t11)          f    g      ikt1       - f    g      ikt1
1362                           ,%2            i j %1    ,%2            j i %1
1363          (%i12) ishow(factor(canform(rename(expand(ev(%,ikt1))))))$
1364                                     %3 %2            %1       %1
1365                               f    g      g      (itr    - itr   )
1366                                ,%3         %2 %1     j i      i j
1367          (%t12)               ------------------------------------
1368                                                2
1369          (%i13) decsym(itr,2,1,[anti(all)],[]);
1370          (%o13)                               done
1371          (%i14) defcon(g,g,kdelta);
1372          (%o14)                               done
1373          (%i15) subst(g,nounify(g),%th(3))$
1374          (%i16) ishow(canform(contract(%)))$
1375                                                     %1
1376          (%t16)                           - f    itr
1377                                              ,%1    i j
1378
1379
138025.2.7 �lgebra exterior
1381-----------------------
1382
1383Con el paquete 'itensor' se pueden realizar operaciones en campos
1384tensoriales covariantes antisim�tricos.  Un campo tensorial totalmente
1385antisim�trrico de rango (0,L) se corresponde con una L-forma
1386diferencial.  Sobre estos objetos se define una operaci�n que se llama
1387producto exterior.
1388
1389Desafortunadamente no hay consenso entre los autores a la hora de
1390definir el producto exterior.  Algunos autores prefieren una definici�n
1391que se corresponde con la noci�n de antisimetrizaci�n, con lo que el
1392producto externo de dos campos vectoriales se definir�a como
1393
1394                 a a  - a a
1395                  i j    j i
1396      a  /\ a  = -----------
1397       i     j        2
1398
1399De forma m�s general, el producto de una p-forma por una q-forma se
1400definir�a como
1401
1402                            1     k1..kp l1..lq
1403     A       /\ B       = ------ D              A       B
1404      i1..ip     j1..jq   (p+q)!  i1..ip j1..jq  k1..kp  l1..lq
1405
1406donde 'D' es la delta de Kronecker.
1407
1408Otros autores, sin embargo, prefieren una definici�n "geom�trica" que se
1409corresponde con la noci�n del elemento de volumen,
1410
1411     a  /\ a  = a a  - a a
1412      i     j    i j    j i
1413
1414y, en el caso general,
1415
1416                            1    k1..kp l1..lq
1417     A       /\ B       = ----- D              A       B
1418      i1..ip     j1..jq   p! q!  i1..ip j1..jq  k1..kp  l1..lq
1419
1420Puesto que 'itensor' un paquete de �lgebra tensorial, la primera de
1421estas dos definiciones parece la m�s natural.  Sin embargo, muchas
1422aplicaciones hacen uso de la segunda definici�n.  Para resolver el
1423dilema, se define una variable que controla el comportamiento del
1424producto exteriort: si 'igeowedge_flag' vale 'false' (el valor por
1425defecto), se utiliza la primera definici�n, si vale 'true', la segunda.
1426
1427 -- Operador: ~
1428
1429     El operador del producto exterior se representa por el s�mbolo '~'.
1430     Este es un operador binario.  Sus argumentos deben ser expresiones
1431     que tengan escalares, tensores covariantes de rango uno o tensores
1432     covariantes de rango 'l' que hayan sido declarados antisim�tricos
1433     en todos los �ndices covariantes.
1434
1435     El comportamiento del operador del producto exterior se controla
1436     con la variable 'igeowedge_flag', como en el ejemplo siguiente:
1437
1438          (%i1) load(itensor);
1439          (%o1)      /share/tensor/itensor.lisp
1440          (%i2) ishow(a([i])~b([j]))$
1441                                           a  b  - b  a
1442                                            i  j    i  j
1443          (%t2)                            -------------
1444                                                 2
1445          (%i3) decsym(a,2,0,[anti(all)],[]);
1446          (%o3)                                done
1447          (%i4) ishow(a([i,j])~b([k]))$
1448                                    a    b  + b  a    - a    b
1449                                     i j  k    i  j k    i k  j
1450          (%t4)                     ---------------------------
1451                                                 3
1452          (%i5) igeowedge_flag:true;
1453          (%o5)                                true
1454          (%i6) ishow(a([i])~b([j]))$
1455          (%t6)                            a  b  - b  a
1456                                            i  j    i  j
1457          (%i7) ishow(a([i,j])~b([k]))$
1458          (%t7)                     a    b  + b  a    - a    b
1459                                     i j  k    i  j k    i k  j
1460
1461 -- Operador: |
1462
1463     La barra vertical '|' representa la operaci�n "contracci�n con un
1464     vector".  Cuando un tensor covariante totalmente antisim�trico se
1465     contrae con un vector contravariante, el resultado no depende del
1466     �ndice utilizado para la contracci�n.  As�, es posible definir la
1467     operaci�n de contracci�n de forma que no se haga referencia al
1468     �ndice.
1469
1470     En el paquete 'itensor' la contracci�n con un vector se realiza
1471     siempre respecto del primer �ndice de la ordenaci�n literal.
1472     Ejemplo:
1473
1474          (%i1) load(itensor);
1475          (%o1)      /share/tensor/itensor.lisp
1476          (%i2) decsym(a,2,0,[anti(all)],[]);
1477          (%o2)                                done
1478          (%i3) ishow(a([i,j],[])|v)$
1479                                              %1
1480          (%t3)                              v   a
1481                                                  %1 j
1482          (%i4) ishow(a([j,i],[])|v)$
1483                                               %1
1484          (%t4)                             - v   a
1485                                                   %1 j
1486
1487     N�tese que es primordial que los tensores utilizados junto con el
1488     operador '|' se declaren totalmente antisim�tricos en sus �ndices
1489     covariantes.  De no ser as�, se pueden obtener resultados
1490     incorrectos.
1491
1492 -- Funci�n: extdiff (<expr>, <i>)
1493
1494     Calcula la derivada exterior de <expr> con respecto del �ndice <i>.
1495     La derivada exterior se define formalmente como el producto
1496     exterior del operador de la derivada parcial y una forma
1497     diferencial.  Por lo tanto, esta operaci�n tambi�n se ve afectada
1498     por el valor que tome la variable 'igeowedge_flag'.  Ejemplo:
1499
1500          (%i1) load(itensor);
1501          (%o1)      /share/tensor/itensor.lisp
1502          (%i2) ishow(extdiff(v([i]),j))$
1503                                            v    - v
1504                                             j,i    i,j
1505          (%t2)                             -----------
1506                                                 2
1507          (%i3) decsym(a,2,0,[anti(all)],[]);
1508          (%o3)                                done
1509          (%i4) ishow(extdiff(a([i,j]),k))$
1510                                     a      - a      + a
1511                                      j k,i    i k,j    i j,k
1512          (%t4)                      ------------------------
1513                                                3
1514          (%i5) igeowedge_flag:true;
1515          (%o5)                                true
1516          (%i6) ishow(extdiff(v([i]),j))$
1517          (%t6)                             v    - v
1518                                             j,i    i,j
1519          (%i7) ishow(extdiff(a([i,j]),k))$
1520          (%t7)                    - (a      - a      + a     )
1521                                       k j,i    k i,j    j i,k
1522
1523
1524 -- Funci�n: hodge (<expr>)
1525
1526     Calcula el dual de Hodge <expr>.  Por ejemplo:
1527
1528
1529          (%i1) load(itensor);
1530          (%o1)      /share/tensor/itensor.lisp
1531          (%i2) imetric(g);
1532          (%o2)                            done
1533          (%i3) idim(4);
1534          (%o3)                            done
1535          (%i4) icounter:100;
1536          (%o4)                             100
1537          (%i5) decsym(A,3,0,[anti(all)],[])$
1538
1539          (%i6) ishow(A([i,j,k],[]))$
1540          (%t6)                           A
1541                                           i j k
1542          (%i7) ishow(canform(hodge(%)))$
1543                                    %1 %2 %3 %4
1544                         levi_civita            g        A
1545                                                 %1 %102  %2 %3 %4
1546          (%t7)          -----------------------------------------
1547                                             6
1548          (%i8) ishow(canform(hodge(%)))$
1549                           %1 %2 %3 %8            %4 %5 %6 %7
1550          (%t8) levi_civita            levi_civita            g
1551                                                               %1 %106
1552                                       g        g        g      A         /6
1553                                        %2 %107  %3 %108  %4 %8  %5 %6 %7
1554          (%i9) lc2kdt(%)$
1555
1556          (%i10) %,kdelta$
1557
1558          (%i11) ishow(canform(contract(expand(%))))$
1559          (%t11)                     - A
1560                                        %106 %107 %108
1561
1562
1563 -- Variable opcional: igeowedge_flag
1564     Valor por defecto: 'false'
1565
1566     Controla el comportamiento del producto exterior y de la derivada
1567     exterior.  Cuando vale 'false', la noci�n de formas diferenciales
1568     se corresponde con el de campo tensorial covariante totalmente
1569     antisim�trico.  Cuando vale 'true', las formas diferenciales se
1570     corresponden con la idea de elemento de volumen.
1571
157225.2.8 Exportando expresiones en TeX
1573------------------------------------
1574
1575El paquete 'itensor' dispone de soporte limitado para exportar
1576expresiones con tensores a TeX. Puesto que las expresiones de 'itensor'
1577son llamadas a funciones, puede que la instrucci�n habitual en Maxima,
1578'tex', no devuleva los resultados esperados.  Se puede utlizar el
1579comando 'tentex', que tratar� de traducir expresiones tensoriales a
1580objetos de TeX correctamente indexados.
1581
1582 -- Funci�n: tentex (<expr>)
1583
1584     Para utilizar la funci�n 'tentex', primero se debe cargar 'tentex',
1585     tal como muestra el siguiente ejemplo:
1586
1587
1588          (%i1) load(itensor);
1589          (%o1)      /share/tensor/itensor.lisp
1590          (%i2) load(tentex);
1591          (%o2)       /share/tensor/tentex.lisp
1592          (%i3) idummyx:m;
1593          (%o3)                                  m
1594          (%i4) ishow(icurvature([j,k,l],[i]))$
1595                      m1       i           m1       i           i
1596          (%t4)  ichr2    ichr2     - ichr2    ichr2     - ichr2
1597                      j k      m1 l        j l      m1 k        j l,k
1598
1599                                                                i
1600                                                         + ichr2
1601                                                                j k,l
1602          (%i5) tentex(%)$
1603          $$\Gamma_{j\,k}^{m_1}\,\Gamma_{l\,m_1}^{i}-\Gamma_{j\,l}^{m_1}\,
1604           \Gamma_{k\,m_1}^{i}-\Gamma_{j\,l,k}^{i}+\Gamma_{j\,k,l}^{i}$$
1605
1606
1607     N�tese la asignaci�n de la variable 'idummyx' para evitar la
1608     aparici�n del s�mbolo del porcentaje en la expresi�n en TeX, que
1609     puede dar errores de compilaci�n.
1610
1611     T�ngase en cuenta que esta versi�n de la funci�n 'tentex' es
1612     experimental.
1613
161425.2.9 Interactuando con ctensor
1615--------------------------------
1616
1617El paquete 'itensor' genera c�digo Maxima que luego puede ser ejecutado
1618en el contexto del paquete 'ctensor'.  La funci�n que se encarga de esta
1619tarea es 'ic_convert'.
1620
1621 -- Function: ic_convert (<eqn>)
1622
1623     Convierte la ecuaci�n <eqn> del entorno 'itensor' a una sentencia
1624     de asignaci�n de 'ctensor'.  Sumas impl�citas sobre �ndices mudos
1625     se hacen expl�citas mientras que objetos indexados se transforman
1626     en arreglos (los sub�ndices de los arreglos se ordenan poniendo
1627     primero los covariantes seguidos de los contravariantes.  La
1628     derivada de un objeto indexado se reemplazar� por por la forma
1629     nominal de 'diff' tomada con respecto a 'ct_coords' con el
1630     sub�ndice correspondiente al �ndice derivado.  Los s�mbolos de
1631     Christoffel 'ichr1' 'ichr2' se traducen a 'lcs' y 'mcs',
1632     respectivamente.  Adem�s, se a�aden bucles 'do' para la sumaci�n de
1633     todos los �ndices libres, de manera que la sentencia traducida
1634     pueda ser evaluada haciendo simplemente 'ev'.  Los siguientes
1635     ejemplos muestran las funcionalidades de esta funci�n.
1636
1637          (%i1) load(itensor);
1638          (%o1)      /share/tensor/itensor.lisp
1639          (%i2) eqn:ishow(t([i,j],[k])=f([],[])*g([l,m],[])*a([],[m],j)
1640                *b([i],[l,k]))$
1641                                       k        m   l k
1642          (%t2)                       t    = f a   b    g
1643                                       i j      ,j  i    l m
1644          (%i3) ic_convert(eqn);
1645          (%o3) for i thru dim do (for j thru dim do (
1646                 for k thru dim do
1647                  t        : f sum(sum(diff(a , ct_coords ) b
1648                   i, j, k                   m           j   i, l, k
1649
1650           g    , l, 1, dim), m, 1, dim)))
1651            l, m
1652          (%i4) imetric(g);
1653          (%o4)                                done
1654          (%i5) metricconvert:true;
1655          (%o5)                                true
1656          (%i6) ic_convert(eqn);
1657          (%o6) for i thru dim do (for j thru dim do (
1658                 for k thru dim do
1659                  t        : f sum(sum(diff(a , ct_coords ) b
1660                   i, j, k                   m           j   i, l, k
1661
1662           lg    , l, 1, dim), m, 1, dim)))
1663             l, m
1664
166525.2.10 Palabras reservadas
1666---------------------------
1667
1668Las siguientes palabras son utilizadas por el paquete 'itensor'
1669internamente, por lo que no deber�an ser modificadas por el usuario:
1670
1671       Palabra    Comentarios
1672       ------------------------------------------
1673       indices2() Versi�n interna de indices()
1674       conti      Lista los �ndices contravariantes
1675       covi       Lista los �ndices covariantes
1676       deri       Lista los �ndices de derivadas
1677       name       Devuelve el nombre de un objeto indexado
1678       concan
1679       irpmon
1680       lc0
1681       _lc2kdt0
1682       _lcprod
1683       _extlc
1684
1685
1686File: maxima.info,  Node: ctensor,  Next: atensor,  Prev: itensor,  Up: Top
1687
168826 ctensor
1689**********
1690
1691* Menu:
1692
1693* Introducci�n a ctensor::
1694* Funciones y variables para ctensor::
1695
1696
1697File: maxima.info,  Node: Introducci�n a ctensor,  Next: Funciones y variables para ctensor,  Prev: ctensor,  Up: ctensor
1698
169926.1 Introducci�n a ctensor
1700===========================
1701
1702El paquete 'ctensor' dispone de herramientas para manipular componentes
1703de tensores.  Para poder hacer uso de 'ctensor' es necesario cargarlo
1704previamente en memoria ejecutando 'load(ctensor)'.  Para comenzar una
1705sesi�n interactiva con 'ctensor', ejecutar la funci�n 'csetup()'.
1706Primero se le pregunta al usuario la dimensi�n de la variedad.  Si la
1707dimensi�n es 2, 3 o 4, entonces la lista de coordenadas ser� por defecto
1708'[x,y]', '[x,y,z]' o '[x,y,z,t]', respectivamente.  Estos nombres pueden
1709cambiarse asignando una nueva lista de coordenadas a la variable
1710'ct_coords' (que se describe m�s abajo), siendo el usuario advertido
1711sobre este particular.  Se debe tener cuidado en evitar que los nombres
1712de las coordenadas entren en conflicto con los nombres de otros objetos
1713en Maxima.
1714
1715A continuaci�n, el usuario introduce la m�trica, bien directamente, o
1716desde un fichero especificando su posici�n ordinal.  La m�trica se
1717almacena en la matriz 'lg'.  Por �ltimo, la m�trica inversa se obtiene y
1718almacena en la matriz 'ug'.  Tambi�n se dispone de la opci�n de efectuar
1719todos los c�lculos en serie de potencias.
1720
1721Se desarrolla a continuaci�n un ejemplo para la m�trica est�tica,
1722esf�rica y sim�trica, en coordenadas est�ndar, que se aplicar�
1723posteriormente al problema de derivar las ecuaciones de vac�o de
1724Einstein (de las que se obtiene la soluci�n de Schwarzschild).  Muchas
1725de las funciones de 'ctensor' se mostrar�n en los ejemplos para la
1726m�trica est�ndar.
1727
1728     (%i1) load(ctensor);
1729     (%o1)      /share/tensor/ctensor.mac
1730     (%i2) csetup();
1731     Enter the dimension of the coordinate system:
1732     4;
1733     Do you wish to change the coordinate names?
1734     n;
1735     Do you want to
1736     1. Enter a new metric?
1737
1738     2. Enter a metric from a file?
1739
1740     3. Approximate a metric with a Taylor series?
1741     1;
1742
1743     Is the matrix  1. Diagonal  2. Symmetric  3. Antisymmetric  4. General
1744     Answer 1, 2, 3 or 4
1745     1;
1746     Row 1 Column 1:
1747     a;
1748     Row 2 Column 2:
1749     x^2;
1750     Row 3 Column 3:
1751     x^2*sin(y)^2;
1752     Row 4 Column 4:
1753     -d;
1754
1755     Matrix entered.
1756     Enter functional dependencies with the DEPENDS function or 'N' if none
1757     depends([a,d],x);
1758     Do you wish to see the metric?
1759     y;
1760                               [ a  0       0        0  ]
1761                               [                        ]
1762                               [     2                  ]
1763                               [ 0  x       0        0  ]
1764                               [                        ]
1765                               [         2    2         ]
1766                               [ 0  0   x  sin (y)   0  ]
1767                               [                        ]
1768                               [ 0  0       0       - d ]
1769     (%o2)                                done
1770     (%i3) christof(mcs);
1771                                                 a
1772                                                  x
1773     (%t3)                          mcs        = ---
1774                                       1, 1, 1   2 a
1775
1776                                                  1
1777     (%t4)                           mcs        = -
1778                                        1, 2, 2   x
1779
1780                                                  1
1781     (%t5)                           mcs        = -
1782                                        1, 3, 3   x
1783
1784                                                 d
1785                                                  x
1786     (%t6)                          mcs        = ---
1787                                       1, 4, 4   2 d
1788
1789                                                   x
1790     (%t7)                          mcs        = - -
1791                                       2, 2, 1     a
1792
1793                                                cos(y)
1794     (%t8)                         mcs        = ------
1795                                      2, 3, 3   sin(y)
1796
1797                                                    2
1798                                               x sin (y)
1799     (%t9)                      mcs        = - ---------
1800                                   3, 3, 1         a
1801
1802     (%t10)                   mcs        = - cos(y) sin(y)
1803                                 3, 3, 2
1804
1805                                                 d
1806                                                  x
1807     (%t11)                         mcs        = ---
1808                                       4, 4, 1   2 a
1809     (%o11)                               done
1810
1811
1812
1813File: maxima.info,  Node: Funciones y variables para ctensor,  Prev: Introducci�n a ctensor,  Up: ctensor
1814
181526.2 Funciones y variables para ctensor
1816=======================================
1817
181826.2.1 Inicializaci�n y preparaci�n
1819-----------------------------------
1820
1821 -- Funci�n: csetup ()
1822     Es la funci�n del paquete 'ctensor' que inicializa el paquete y
1823     permite al usuario introducir una m�trica de forma interactiva.
1824     V�ase 'ctensor' para m�s detalles.
1825
1826 -- Funci�n: cmetric (<dis>)
1827 -- Funci�n: cmetric ()
1828     Es la funci�n del paquete 'ctensor' que calcula la m�trica inversa
1829     y prepara el paquete para c�lculos ulteriores.
1830
1831     Si 'cframe_flag' vale 'false', la funci�n calcula la m�trica
1832     inversa 'ug' a partir de la matriz 'lg' definida por el usuario.
1833     Se calcula tambi�n la m�trica determinante y se almacena en la
1834     variable 'gdet'.  Adem�s, el paquete determina si la m�trica es
1835     diagonal y ajusta el valor de 'diagmetric' de la forma apropiada.
1836     Si el argumento opcional <dis> est� presente y no es igual a
1837     'false', el usuario podr� ver la m�trica inversa.
1838
1839     Si 'cframe_flag' vale 'true', la funci�n espera que los valores de
1840     'fri' (la matriz del sistema de referencia inverso) y 'lfg' (la
1841     matriz del sistema de referencia) est�n definidos.  A partir de
1842     ellos, se calculan la matriz del sistema de referencia 'fr' y su
1843     m�trica 'ufg'.
1844
1845 -- Funci�n: ct_coordsys (<sistema_coordenadas>, <extra_arg>)
1846 -- Funci�n: ct_coordsys (<sistema_coordenadas>)
1847
1848     Prepara un sistema de coordenadas predefinido y una m�trica.  El
1849     argumento <sistema_coordenadas> puede ser cualquiera de los
1850     siguientes s�mbolos:
1851
1852
1853            S�mbolo              Dim Coordenadas       Descripci�n/comentarios
1854            --------------------------------------------------------------------------------
1855            cartesian2d           2  [x,y]             Sistema de coordenadas cartesianas en 2D
1856            polar                 2  [r,phi]           Sistema de coordenadas polares
1857            elliptic              2  [u,v]             Sistema de coordenadas el�pticas
1858            confocalelliptic      2  [u,v]             Coordenadas el�pticas confocales
1859            bipolar               2  [u,v]             Sistema de coordenas bipolares
1860            parabolic             2  [u,v]             Sistema de coordenadas parab�licas
1861            cartesian3d           3  [x,y,z]           Sistema de coordenadas cartesianas en 3D
1862            polarcylindrical      3  [r,theta,z]       Polares en 2D con cil�ndrica z
1863            ellipticcylindrical   3  [u,v,z]           El�pticas en 2D con cil�ndrica z
1864            confocalellipsoidal   3  [u,v,w]           Elipsoidales confocales
1865            bipolarcylindrical    3  [u,v,z]           Bipolares en 2D con cil�ndrica z
1866            paraboliccylindrical  3  [u,v,z]           Parab�licas en 2D con cil�ndrica z
1867            paraboloidal          3  [u,v,phi]         Coordenadas paraboloidales
1868            conical               3  [u,v,w]           Coordenadas c�nicas
1869            toroidal              3  [u,v,phi]         Coordenadas toroidales
1870            spherical             3  [r,theta,phi]     Sistema de coordenadas esf�ricas
1871            oblatespheroidal      3  [u,v,phi]         Coordenadas esferoidales obleadas
1872            oblatespheroidalsqrt  3  [u,v,phi]
1873            prolatespheroidal     3  [u,v,phi]         Coordenadas esferoidales prolatas
1874            prolatespheroidalsqrt 3  [u,v,phi]
1875            ellipsoidal           3  [r,theta,phi]     Coordenadas elipsoidales
1876            cartesian4d           4  [x,y,z,t]         Sistema de coordenadas cartesianas en 4D
1877            spherical4d           4  [r,theta,eta,phi] Sistema de coordenadas esf�ricas en 4D
1878            exteriorschwarzschild 4  [t,r,theta,phi]   M�trica de Schwarzschild
1879            interiorschwarzschild 4  [t,z,u,v]         M�trica interior de Schwarzschild
1880            kerr_newman           4  [t,r,theta,phi]   M�trica sim�trica con carga axial
1881
1882
1883     El argumento 'sistema_coordenadas' puede ser tambi�n una lista de
1884     funciones de transformaci�n, seguida de una lista que contenga los
1885     nombres de las coordenadas.  Por ejemplo, se puede especificar una
1886     m�trica esf�rica como se indica a continuaci�n:
1887
1888
1889          (%i1) load(ctensor);
1890          (%o1)       /share/tensor/ctensor.mac
1891          (%i2) ct_coordsys([r*cos(theta)*cos(phi),r*cos(theta)*sin(phi),
1892                r*sin(theta),[r,theta,phi]]);
1893          (%o2)                                done
1894          (%i3) lg:trigsimp(lg);
1895                                     [ 1  0         0        ]
1896                                     [                       ]
1897                                     [     2                 ]
1898          (%o3)                      [ 0  r         0        ]
1899                                     [                       ]
1900                                     [         2    2        ]
1901                                     [ 0  0   r  cos (theta) ]
1902          (%i4) ct_coords;
1903          (%o4)                           [r, theta, phi]
1904          (%i5) dim;
1905          (%o5)                                  3
1906
1907
1908     Las funciones de transformaci�n se pueden utilizar tambi�n si
1909     'cframe_flag' vale 'true':
1910
1911
1912          (%i1) load(ctensor);
1913          (%o1)       /share/tensor/ctensor.mac
1914          (%i2) cframe_flag:true;
1915          (%o2)                                true
1916          (%i3) ct_coordsys([r*cos(theta)*cos(phi),r*cos(theta)*sin(phi),
1917                r*sin(theta),[r,theta,phi]]);
1918          (%o3)                                done
1919          (%i4) fri;
1920                [ cos(phi) cos(theta)  - cos(phi) r sin(theta)  - sin(phi) r cos(theta) ]
1921                [                                                                       ]
1922          (%o4) [ sin(phi) cos(theta)  - sin(phi) r sin(theta)   cos(phi) r cos(theta)  ]
1923                [                                                                       ]
1924                [     sin(theta)            r cos(theta)                   0            ]
1925          (%i5) cmetric();
1926          (%o5)                                false
1927          (%i6) lg:trigsimp(lg);
1928                                     [ 1  0         0        ]
1929                                     [                       ]
1930                                     [     2                 ]
1931          (%o6)                      [ 0  r         0        ]
1932                                     [                       ]
1933                                     [         2    2        ]
1934                                     [ 0  0   r  cos (theta) ]
1935
1936
1937     El argumento opcional <extra_arg> puede ser cualquiera de los
1938     siguientes:
1939
1940     'cylindrical' indica a 'ct_coordsys' que a�ada una coordenada
1941     cil�ndrica m�s.
1942
1943     'minkowski' indica a 'ct_coordsys' que a�ada una coordenada m�s con
1944     signatura m�trica negativa.
1945
1946     'all' indica a 'ct_coordsys' que llame a 'cmetric' y a
1947     'christof(false)' tras activar la m�trica.
1948
1949     Si la variable global 'verbose' vale 'true', 'ct_coordsys' muestra
1950     los valores de 'dim', 'ct_coords', junto con 'lg' o 'lfg' y 'fri',
1951     dependiendo del valor de 'cframe_flag'.
1952
1953 -- Funci�n: init_ctensor ()
1954     Inicializa el paquete 'ctensor'.
1955
1956     La funci�n 'init_ctensor' reinicializa el paquete 'ctensor'.  Borra
1957     todos los arreglos ("arrays") y matrices utilizados por 'ctensor' y
1958     reinicializa todas las variables, asignando a 'dim' el valor 4 y la
1959     m�trica del sistema de referencia a la de Lorentz.
1960
196126.2.2 Los tensores del espacio curvo
1962-------------------------------------
1963
1964El prop�sito principal del paquete 'ctensor' es calcular los tensores
1965del espacio (-tiempo) curvo, en especial los tensores utilizados en
1966relatividad general.
1967
1968Cuando se utiliza una m�trica, 'ctensor' puede calcular los siguientes
1969tensores:
1970
1971
1972      lg  -- ug
1973        \      \
1974         lcs -- mcs -- ric -- uric
1975                   \      \       \
1976                    \      tracer - ein -- lein
1977                     \
1978                      riem -- lriem -- weyl
1979                          \
1980                           uriem
1981
1982
1983
1984El paquete 'ctensor' tambi�n puede trabajar con sistemas de referencia
1985m�viles.  Si 'cframe_flag' vale 'true', se pueden calcular los
1986siguientes tensores:
1987
1988
1989      lfg -- ufg
1990          \
1991      fri -- fr -- lcs -- mcs -- lriem -- ric -- uric
1992           \                       |  \      \       \
1993            lg -- ug               |   weyl   tracer - ein -- lein
1994                                   |\
1995                                   | riem
1996                                   |
1997                                   \uriem
1998
1999
2000 -- Funci�n: christof (<dis>)
2001     Es una funci�n del paquete 'ctensor'.  Calcula los s�mbolos de
2002     Christoffel de ambos tipos.  El argumento <dis> determina qu�
2003     resultados se mostrar�n de forma inmediata.  Los s�mbolos de
2004     Christoffel de primer y segundo tipo se almacenan en los arreglos
2005     'lcs[i,j,k]' y 'mcs[i,j,k]', respectivamente, y se definen
2006     sim�tricos en sus dos primeros �ndices.  Si el argumento de
2007     'christof' es 'lcs' o 'mcs' entonces ser�n mostrados �nicamente los
2008     valores no nulos de 'lcs[i,j,k]' o 'mcs[i,j,k]', respectivamente.
2009     Si el argumento es 'all' entonces se mostrar�n los valores no nulos
2010     de 'lcs[i,j,k]' y 'mcs[i,j,k]'.  Si el argumento vale 'false'
2011     entonces no se mostrar�n los elementos.  El arreglo 'mcs[i,j,k]'
2012     est� definido de tal modo que el �ltimo �ndice es contravariante.
2013
2014 -- Funci�n: ricci (<dis>)
2015     Es una funci�n del paquete 'ctensor'.  La funci�n 'ricci' calcula
2016     las componentes covariantes (sim�tricas) 'ric[i,j]' del tensor de
2017     Ricci.  Si el argumento <dis> vale 'true', entonces se muestran las
2018     componentes no nulas.
2019
2020 -- Funci�n: uricci (<dis>)
2021     Esta funci�n calcula en primer lugar las componentes covariantes
2022     'ric[i,j]' del tensor de Ricci.  Despu�s se calcula el tensor de
2023     Ricci utilizando la m�trica contravariante.  Si el valor del
2024     argumento <dis> vale 'true', entonces se mostrar�n directamente las
2025     componentes 'uric[i,j]' (el �ndice <i> es covariante y el <j>
2026     contravariante).  En otro caso, 'ricci(false)' simplemente
2027     calcular� las entradas del arreglo 'uric[i,j]' sin mostrar los
2028     resultados.
2029
2030 -- Funci�n: scurvature ()
2031
2032     Devuelve la curvatura escalar (obtenida por contracci�n del tensor
2033     de Ricci) de la variedad de Riemannian con la m�trica dada.
2034
2035 -- Funci�n: einstein (<dis>)
2036     Es una funci�n del paquete 'ctensor'.  La funci�n 'einstein'
2037     calcula el tensor de Einstein despu�s de que los s�mbolos de
2038     Christoffel y el tensor de Ricci hayan sido calculados (con las
2039     funciones 'christof' y 'ricci').  Si el argumento <dis> vale
2040     'true', entonces se mostrar�n los valores no nulos del tensor de
2041     Einstein 'ein[i,j]', donde 'j' es el �ndice contravariante.  La
2042     variable 'rateinstein' causar� la simplificaci�n racional de estas
2043     componentes.  Si 'ratfac' vale 'true' entonces las componentes
2044     tambi�n se factorizar�n.
2045
2046 -- Funci�n: leinstein (<dis>)
2047     Es el tensor covariante de Einstein.  La funci�n 'leinstein'
2048     almacena los valores del tensor covariante de Einstein en el
2049     arreglo 'lein'.  El tensor covariante de Einstein se calcula a
2050     partir del tensor de Einstein 'ein' multiplic�ndolo por el tensor
2051     m�trico.  Si el argumento <dis> vale 'true', entonces se mostrar�n
2052     los valores no nulos del tensor covariante de Einstein.
2053
2054 -- Funci�n: riemann (<dis>)
2055     Es una funci�n del paquete 'ctensor'.  La funci�n 'riemann' calcula
2056     el tensor de curvatura de Riemann a partir de la m�trica dada y de
2057     los s�mbolos de Christoffel correspondientes.  Se utiliza el
2058     siguiente convenio sobre los �ndices:
2059
2060                          l      _l       _l       _l   _m    _l   _m
2061           R[i,j,k,l] =  R    = |      - |      + |    |   - |    |
2062                          ijk     ij,k     ik,j     mk   ij    mj   ik
2063
2064     Esta notaci�n es consistente con la notaci�n utilizada por el
2065     paquete 'itensor' y su funci�n 'icurvature'.  Si el argumento
2066     opcional <dis> vale 'true', se muestran las componentes no nulas
2067     �nicas de 'riem[i,j,k,l]'.  Como en el caso del tensor de Einstein,
2068     ciertas variables permiten controlar al usuario la simplificaci�n
2069     de las componentes del tensor de Riemann.  Si 'ratriemann' vale
2070     'true', entonces se har� la simplificaci�n racional.  Si 'ratfac'
2071     vale 'true', entonces se factorizar�n todas las componentes.
2072
2073     Si la variable 'cframe_flag' vale 'false', el tensor de Riemann se
2074     calcula directamente a partir de los s�mbolos de Christoffel.  Si
2075     'cframe_flag' vale 'true', el tensor covariante de Riemann se
2076     calcula a partir de los coeficientes del campo.
2077
2078 -- Funci�n: lriemann (<dis>)
2079     Es el tensor covariante de Riemann ('lriem[]').
2080
2081     Calcula el tensor covariante de Riemann como un arreglo 'lriem'.
2082     Si el argumento <dis> vale 'true', s�lo se muestran los valores no
2083     nulos.
2084
2085     Si la variable 'cframe_flag' vale 'true', el tensor covariante de
2086     Riemann se calcula directamente de los coeficientes del campo.  En
2087     otro caso, el tensor de Riemann (3,1) se calcula en primer lugar.
2088
2089     Para m�s informaci�n sobre la ordenaci�n de los �ndices, v�ase
2090     'riemann'.
2091
2092 -- Funci�n: uriemann (<dis>)
2093     Calcula las componentes contravariantes del tensor de curvatura de
2094     Riemann como un arreglo 'uriem[i,j,k,l]'.  �stos se muestran si
2095     <dis> vale 'true'.
2096
2097 -- Funci�n: rinvariant ()
2098     Calcula la invariante de Kretchmann ('kinvariant') obtenida por
2099     contracci�n de los tensores.
2100
2101          lriem[i,j,k,l]*uriem[i,j,k,l].
2102
2103     Este objeto no se simplifica autom�ticamente al ser en ocasiones
2104     muy grande.
2105
2106 -- Funci�n: weyl (<dis>)
2107     Calcula el tensor conforme de Weyl.  Si el argumento <dis> vale
2108     'true', se le mostrar�n al usuario las componentes no nulas
2109     'weyl[i,j,k,l]'.  En otro caso, estas componentes ser�n �nicamente
2110     calculadas y almacenadas.  Si la variable 'ratweyl' vale 'true',
2111     entonces las componentes se simplifican racionalmente; si 'ratfac'
2112     vale 'true' los resultados tambi�n se simplificar�n.
2113
211426.2.3 Desarrollo de Taylor
2115---------------------------
2116
2117El paquete 'ctensor' puede truncar resultados e interpretarlos como
2118aproximaciones de Taylor.  Este comportamiento se controla con
2119lavariable 'ctayswitch'; cuando vale 'true', 'ctensor' utiliza
2120internamente la funci�n 'ctaylor' cuando simplifica resultados.
2121
2122La funci�n 'ctaylor' es llamada desde las siguientes funciones del
2123paquete 'ctensor':
2124
2125
2126         Funci�n      Comentarios
2127         ---------------------------------
2128         christof()   S�lo para mcs
2129         ricci()
2130         uricci()
2131         einstein()
2132         riemann()
2133         weyl()
2134         checkdiv()
2135
2136 -- Funci�n: ctaylor ()
2137
2138     La funci�n 'ctaylor' trunca su argumento convirti�ndolo en un
2139     desarrollo de Taylor por medio de la funci�n 'taylor' e invocando
2140     despu�s a 'ratdisrep'.  Esto tiene el efecto de eliminar t�rminos
2141     de orden alto en la variable de expansi�n 'ctayvar'.  El orden de
2142     los t�rminos que deben ser eliminados se define 'ctaypov'; el punto
2143     alrededor del cual se desarrolla la serie se especifica en
2144     'ctaypt'.
2145
2146     Como ejemplo, consid�rese una sencilla m�trica que es una
2147     perturbaci�n de la de Minkowski.  Sin a�adir restricciones, incluso
2148     una m�trica diagonal produce expansiones del tensor de Einstein que
2149     pueden llegar a ser muy complejas:
2150
2151
2152          (%i1) load(ctensor);
2153          (%o1)       /share/tensor/ctensor.mac
2154          (%i2) ratfac:true;
2155          (%o2)                                true
2156          (%i3) derivabbrev:true;
2157          (%o3)                                true
2158          (%i4) ct_coords:[t,r,theta,phi];
2159          (%o4)                         [t, r, theta, phi]
2160          (%i5) lg:matrix([-1,0,0,0],[0,1,0,0],[0,0,r^2,0],[0,0,0,r^2*sin(theta)^2]);
2161                                  [ - 1  0  0         0        ]
2162                                  [                            ]
2163                                  [  0   1  0         0        ]
2164                                  [                            ]
2165          (%o5)                   [          2                 ]
2166                                  [  0   0  r         0        ]
2167                                  [                            ]
2168                                  [              2    2        ]
2169                                  [  0   0  0   r  sin (theta) ]
2170          (%i6) h:matrix([h11,0,0,0],[0,h22,0,0],[0,0,h33,0],[0,0,0,h44]);
2171                                      [ h11   0    0    0  ]
2172                                      [                    ]
2173                                      [  0   h22   0    0  ]
2174          (%o6)                       [                    ]
2175                                      [  0    0   h33   0  ]
2176                                      [                    ]
2177                                      [  0    0    0   h44 ]
2178          (%i7) depends(l,r);
2179          (%o7)                               [l(r)]
2180          (%i8) lg:lg+l*h;
2181                   [ h11 l - 1      0          0                 0            ]
2182                   [                                                          ]
2183                   [     0      h22 l + 1      0                 0            ]
2184                   [                                                          ]
2185          (%o8)    [                        2                                 ]
2186                   [     0          0      r  + h33 l            0            ]
2187                   [                                                          ]
2188                   [                                    2    2                ]
2189                   [     0          0          0       r  sin (theta) + h44 l ]
2190          (%i9) cmetric(false);
2191          (%o9)                                done
2192          (%i10) einstein(false);
2193          (%o10)                               done
2194          (%i11) ntermst(ein);
2195          [[1, 1], 62]
2196          [[1, 2], 0]
2197          [[1, 3], 0]
2198          [[1, 4], 0]
2199          [[2, 1], 0]
2200          [[2, 2], 24]
2201          [[2, 3], 0]
2202          [[2, 4], 0]
2203          [[3, 1], 0]
2204          [[3, 2], 0]
2205          [[3, 3], 46]
2206          [[3, 4], 0]
2207          [[4, 1], 0]
2208          [[4, 2], 0]
2209          [[4, 3], 0]
2210          [[4, 4], 46]
2211          (%o12)                               done
2212
2213
2214     Sin embargo, si se recalcula este ejemplo como una aproximaci�n
2215     lineal en la variable 'l', se obtienen expresiones m�s sencillas:
2216
2217
2218          (%i14) ctayswitch:true;
2219          (%o14)                               true
2220          (%i15) ctayvar:l;
2221          (%o15)                                 l
2222          (%i16) ctaypov:1;
2223          (%o16)                                 1
2224          (%i17) ctaypt:0;
2225          (%o17)                                 0
2226          (%i18) christof(false);
2227          (%o18)                               done
2228          (%i19) ricci(false);
2229          (%o19)                               done
2230          (%i20) einstein(false);
2231          (%o20)                               done
2232          (%i21) ntermst(ein);
2233          [[1, 1], 6]
2234          [[1, 2], 0]
2235          [[1, 3], 0]
2236          [[1, 4], 0]
2237          [[2, 1], 0]
2238          [[2, 2], 13]
2239          [[2, 3], 2]
2240          [[2, 4], 0]
2241          [[3, 1], 0]
2242          [[3, 2], 2]
2243          [[3, 3], 9]
2244          [[3, 4], 0]
2245          [[4, 1], 0]
2246          [[4, 2], 0]
2247          [[4, 3], 0]
2248          [[4, 4], 9]
2249          (%o21)                               done
2250          (%i22) ratsimp(ein[1,1]);
2251                                   2      2  4               2     2
2252          (%o22) - (((h11 h22 - h11 ) (l )  r  - 2 h33 l    r ) sin (theta)
2253                                        r               r r
2254
2255                                          2               2      4    2
2256                            - 2 h44 l    r  - h33 h44 (l ) )/(4 r  sin (theta))
2257                                     r r                r
2258
2259
2260
2261
2262     Esta capacidad del paquete 'ctensor' puede ser muy �til; por
2263     ejemplo, cuando se trabaja en zonas del campo gravitatorio alejadas
2264     del origen de �ste.
2265
226626.2.4 Campos del sistema de referencia
2267---------------------------------------
2268
2269Cuando la variable 'cframe_flag' vale 'true', el paquete 'ctensor'
2270realiza sus c�lculos utilizando un sistema de referencia m�vil.
2271
2272 -- Funci�n: frame_bracket (<fr>, <fri>, <diagframe>)
2273     Es el sistema de referencia soporte ('fb[]').
2274
2275     Calcula el soporte del sistema de referencia de acuerdo con la
2276     siguiente definici�n:
2277
2278             c          c         c        d     e
2279          ifb   = ( ifri    - ifri    ) ifr   ifr
2280             ab         d,e       e,d      a     b
2281
228226.2.5 Clasificaci�n algebraica
2283-------------------------------
2284
2285Una nueva funcionalidad (Noviembre de 2004) de 'ctensor' es su capacidad
2286de obtener la clasificaci�n de Petrov de una m�trica espaciotemporal de
2287dimensi�n 4.  Para una demostraci�n de esto v�ase el fichero
2288'share/tensor/petrov.dem'.
2289
2290 -- Funci�n: nptetrad ()
2291     Calcula la cuaterna nula de Newman-Penrose ('np').  V�ase 'petrov'
2292     para un ejemplo.
2293
2294     La cuaterna nula se construye bajo la suposici�n de que se est�
2295     utilizando una m�trica tetradimensional ortonormal con signatura
2296     m�trica (-,+,+,+).  Los componentes de la cuaterna nula se
2297     relacionan con la inversa de la matriz del sistema de referencia de
2298     la siguiente manera:
2299
2300
2301          np  = (fri  + fri ) / sqrt(2)
2302            1       1      2
2303
2304          np  = (fri  - fri ) / sqrt(2)
2305            2       1      2
2306
2307          np  = (fri  + %i fri ) / sqrt(2)
2308            3       3         4
2309
2310          np  = (fri  - %i fri ) / sqrt(2)
2311            4       3         4
2312
2313
2314 -- Funci�n: psi (<dis>)
2315     Calcula los cinco coeficientes de Newman-Penrose
2316     'psi[0]'...'psi[4]'.  Si 'dis' vale 'true', se muestran estos
2317     coeficientes.  V�ase 'petrov' para un ejemplo.
2318
2319     Estos coeficientes se calculan a partir del tensor de Weyl.
2320
2321 -- Funci�n: petrov ()
2322     Calcula la clasificaci�n de Petrov de la m�trica caracterizada por
2323     'psi[0]'...'psi[4]'.
2324
2325     Por ejemplo, lo que sigue demuestra c�mo obtener la clasificaci�n
2326     de Petrov para la m�trica de Kerr:
2327
2328          (%i1) load(ctensor);
2329          (%o1)       /share/tensor/ctensor.mac
2330          (%i2) (cframe_flag:true,gcd:spmod,ctrgsimp:true,ratfac:true);
2331          (%o2)                                true
2332          (%i3) ct_coordsys(exteriorschwarzschild,all);
2333          (%o3)                                done
2334          (%i4) ug:invert(lg)$
2335          (%i5) weyl(false);
2336          (%o5)                                done
2337          (%i6) nptetrad(true);
2338          (%t6) np =
2339
2340                 [  sqrt(r - 2 m)           sqrt(r)                                     ]
2341                 [ ---------------   ---------------------      0             0         ]
2342                 [ sqrt(2) sqrt(r)   sqrt(2) sqrt(r - 2 m)                              ]
2343                 [                                                                      ]
2344                 [  sqrt(r - 2 m)            sqrt(r)                                    ]
2345                 [ ---------------  - ---------------------     0             0         ]
2346                 [ sqrt(2) sqrt(r)    sqrt(2) sqrt(r - 2 m)                             ]
2347                 [                                                                      ]
2348                 [                                              r      %i r sin(theta)  ]
2349                 [        0                    0             -------   ---------------  ]
2350                 [                                           sqrt(2)       sqrt(2)      ]
2351                 [                                                                      ]
2352                 [                                              r       %i r sin(theta) ]
2353                 [        0                    0             -------  - --------------- ]
2354                 [                                           sqrt(2)        sqrt(2)     ]
2355
2356                                       sqrt(r)          sqrt(r - 2 m)
2357          (%t7) npi = matrix([- ---------------------, ---------------, 0, 0],
2358                                sqrt(2) sqrt(r - 2 m)  sqrt(2) sqrt(r)
2359
2360                    sqrt(r)            sqrt(r - 2 m)
2361          [- ---------------------, - ---------------, 0, 0],
2362             sqrt(2) sqrt(r - 2 m)    sqrt(2) sqrt(r)
2363
2364                     1               %i
2365          [0, 0, ---------, --------------------],
2366                 sqrt(2) r  sqrt(2) r sin(theta)
2367
2368                     1                 %i
2369          [0, 0, ---------, - --------------------])
2370                 sqrt(2) r    sqrt(2) r sin(theta)
2371
2372          (%o7)                                done
2373          (%i7) psi(true);
2374          (%t8)                              psi  = 0
2375                                                0
2376
2377          (%t9)                              psi  = 0
2378                                                1
2379
2380                                                    m
2381          (%t10)                             psi  = --
2382                                                2    3
2383                                                    r
2384
2385          (%t11)                             psi  = 0
2386                                                3
2387
2388          (%t12)                             psi  = 0
2389                                                4
2390          (%o12)                               done
2391          (%i12) petrov();
2392          (%o12)                                 D
2393
2394
2395     La funci�n de clasificaci�n de Petrov se basa en el algoritmo
2396     publicado en "Classifying geometries in general relativity: III
2397     Classification in practice" de Pollney, Skea, and d'Inverno, Class.
2398     Quant.  Grav.  17 2885-2902 (2000).  Excepto para algunos ejemplos
2399     sencillos, esta implementaci�n no ha sido exhaustivamente probada,
2400     por lo que puede contener errores.
2401
240226.2.6 Torsi�n y no metricidad
2403------------------------------
2404
2405El paquete 'ctensor' es capaz de calcular e incluir coeficientes de
2406torsi�n y no metricidad en los coeficientes de conexi�n.
2407
2408Los coeficientes de torsi�n se calculan a partir de un tensor
2409suministrado por el usuario, 'tr', el cual debe ser de rango (2,1).  A
2410partir de ah�, los coeficientes de torsi�n 'kt' se calculan de acuerdo
2411con las siguientes f�rmulas:
2412
2413
2414                   m          m      m
2415            - g  tr   - g   tr   - tr   g
2416               im  kj    jm   ki     ij  km
2417     kt   = -------------------------------
2418       ijk                 2
2419
2420
2421       k     km
2422     kt   = g   kt
2423       ij         ijm
2424
2425
2426Los coeficientes de no metricidad se calculan a partir de un vector de
2427no metricidad, 'nm', suministrado por el usuario.  A partir de ah�, los
2428coeficientes de no metricidad, 'nmc', se calculan como se indica a
2429continuaci�n:
2430
2431
2432                  k    k        km
2433            -nm  D  - D  nm  + g   nm  g
2434        k      i  j    i   j         m  ij
2435     nmc  = ------------------------------
2436        ij                2
2437
2438
2439donde D es la delta de Kronecker.
2440
2441 -- Funci�n: contortion (<tr>)
2442
2443     Calcula los coeficientes (2,1) de contorsi�n del tensor de torsi�n
2444     <tr>.
2445
2446 -- Funci�n: nonmetricity (<nm>)
2447
2448     Calcula los coeficientes (2,1) de no metricidad del vector de no
2449     metricidad <nm>.
2450
245126.2.7 Otras funcionalidades
2452----------------------------
2453
2454 -- Funci�n: ctransform (<M>)
2455     Es una funci�n del paquete 'ctensor'.  Realiza una transformaci�n
2456     de coordenadas a partir de una matriz cuadrada sim�trica <M>
2457     arbitraria.  El usuario debe introducir las funciones que definen
2458     la transformaci�n.
2459
2460 -- Funci�n: findde (<A>, <n>)
2461
2462     Devuelve la lista de las ecuaciones diferenciales que corresponden
2463     a los elementos del arreglo cuadrado <n>-dimensional.  El argumento
2464     <n> puede ser 2 � 3; 'deindex' es una lista global que contiene los
2465     �ndices de <A> que corresponden a estas ecuaciones diferenciales.
2466     Para el tensor de Einstein ('ein'), que es un arreglo
2467     bidimensional, si se calcula para la m�trica del ejemplo de m�s
2468     abajo, 'findde' devuelve las siguientes ecuaciones diferenciales
2469     independientes:
2470
2471          (%i1) load(ctensor);
2472          (%o1)       /share/tensor/ctensor.mac
2473          (%i2) derivabbrev:true;
2474          (%o2)                                true
2475          (%i3) dim:4;
2476          (%o3)                                  4
2477          (%i4) lg:matrix([a,0,0,0],[0,x^2,0,0],[0,0,x^2*sin(y)^2,0],[0,0,0,-d]);
2478                                    [ a  0       0        0  ]
2479                                    [                        ]
2480                                    [     2                  ]
2481                                    [ 0  x       0        0  ]
2482          (%o4)                     [                        ]
2483                                    [         2    2         ]
2484                                    [ 0  0   x  sin (y)   0  ]
2485                                    [                        ]
2486                                    [ 0  0       0       - d ]
2487          (%i5) depends([a,d],x);
2488          (%o5)                            [a(x), d(x)]
2489          (%i6) ct_coords:[x,y,z,t];
2490          (%o6)                            [x, y, z, t]
2491          (%i7) cmetric();
2492          (%o7)                                done
2493          (%i8) einstein(false);
2494          (%o8)                                done
2495          (%i9) findde(ein,2);
2496                                                      2
2497          (%o9) [d  x - a d + d, 2 a d d    x - a (d )  x - a  d d  x + 2 a d d
2498                  x                     x x         x        x    x            x
2499
2500                                                                  2          2
2501                                                          - 2 a  d , a  x + a  - a]
2502                                                               x      x
2503          (%i10) deindex;
2504          (%o10)                     [[1, 1], [2, 2], [4, 4]]
2505
2506
2507 -- Funci�n: cograd ()
2508     Calcula el gradiente covariante de una funci�n escalar permitiendo
2509     al usuario elegir el nombre del vector correspondiente, tal como
2510     ilustra el ejemplo que acompa�a a la definici�n de la funci�n
2511     'contragrad'.
2512
2513 -- Function: contragrad ()
2514
2515     Calcula el gradiente contravariante de una funci�n escalar
2516     permitiendo al usuario elegir el nombre del vector correspondiente,
2517     tal como muestra el siguiente ejemplo para la m�trica de
2518     Schwarzschild:
2519
2520
2521          (%i1) load(ctensor);
2522          (%o1)       /share/tensor/ctensor.mac
2523          (%i2) derivabbrev:true;
2524          (%o2)                                true
2525          (%i3) ct_coordsys(exteriorschwarzschild,all);
2526          (%o3)                                done
2527          (%i4) depends(f,r);
2528          (%o4)                               [f(r)]
2529          (%i5) cograd(f,g1);
2530          (%o5)                                done
2531          (%i6) listarray(g1);
2532          (%o6)                            [0, f , 0, 0]
2533                                                r
2534          (%i7) contragrad(f,g2);
2535          (%o7)                                done
2536          (%i8) listarray(g2);
2537                                         f  r - 2 f  m
2538                                          r        r
2539          (%o8)                      [0, -------------, 0, 0]
2540                                               r
2541
2542
2543 -- Funci�n: dscalar ()
2544     Calcula el tensor de d'Alembertian de la funci�n escalar una vez se
2545     han declarado las dependencias.  Por ejemplo:
2546
2547          (%i1) load(ctensor);
2548          (%o1)       /share/tensor/ctensor.mac
2549          (%i2) derivabbrev:true;
2550          (%o2)                                true
2551          (%i3) ct_coordsys(exteriorschwarzschild,all);
2552          (%o3)                                done
2553          (%i4) depends(p,r);
2554          (%o4)                               [p(r)]
2555          (%i5) factor(dscalar(p));
2556                                    2
2557                              p    r  - 2 m p    r + 2 p  r - 2 m p
2558                               r r           r r        r          r
2559          (%o5)               --------------------------------------
2560                                                 2
2561                                                r
2562
2563 -- Funci�n: checkdiv ()
2564
2565     Calcula la divergencia covariante del tensor de segundo rango
2566     (mixed second rank tensor), cuyo primer �ndice debe ser covariante,
2567     devolviendo las 'n' componentes correspondientes del campo
2568     vectorial (la divergencia), siendo 'n = dim'.
2569
2570 -- Funci�n: cgeodesic (<dis>)
2571     Es una funci�n del paquete 'ctensor' que calcula las ecuaciones
2572     geod�sicas del movimiento para una m�trica dada, las cuales se
2573     almacenan en el arreglo 'geod[i]'.  Si el argumento <dis> vale
2574     'true' entonces se muestran estas ecuaciones.
2575
2576 -- Funci�n: bdvac (<f>)
2577
2578     Genera las componentes covariantes de las ecuaciones del campo
2579     vac�o de la teor�a gravitacional de Brans- Dicke gravitational.  El
2580     campo escalar se especifica con el argumento <f>, el cual debe ser
2581     el nombre de una funci�n no evaluada (precedida de ap�strofo) con
2582     dependencias funcionales, por ejemplo, ''p(x)'.
2583
2584     Las componentes del tensor covariante (second rank covariant field
2585     tensor) se almacenan en el arreglo 'bd'.
2586
2587 -- Funci�n: invariant1 ()
2588
2589     Genera el tensor de Euler-Lagrange (ecuaciones de campo) para la
2590     densidad invariante de R^2.  Las ecuaciones de campo son las
2591     componentes del arreglo 'inv1'.
2592
259326.2.8 Utilidades
2594-----------------
2595
2596 -- Funci�n: diagmatrixp (<M>)
2597
2598     Devuelve 'true' si <M> es una matriz diagonal o un arreglo
2599     bidimensional.
2600
2601 -- Funci�n: symmetricp (<M>)
2602
2603     Devuelve 'true' si <M> es una matriz sim�trica o un arreglo
2604     bidimensional.
2605
2606 -- Funci�n: ntermst (<f>)
2607     Permite hacerse una idea del tama�o del tensor <f>.
2608
2609 -- Funci�n: cdisplay (<ten>)
2610     Muestra todos los elementos del tensor <ten> como arreglo
2611     multidimensional.  Tensors de rango 0 y 1, as� como otros tipos de
2612     variables, se muestran como en 'ldisplay'.  Tensors de rango 2 se
2613     muestran como matrices bidimensionales, mientras que tensores de
2614     mayor rango se muestran como listas de matrices bidimensionales.
2615     Por ejemplo, el tensor de Riemann de la m�trica de Schwarzschild se
2616     puede ver como:
2617
2618          (%i1) load(ctensor);
2619          (%o1)       /share/tensor/ctensor.mac
2620          (%i2) ratfac:true;
2621          (%o2)                                true
2622          (%i3) ct_coordsys(exteriorschwarzschild,all);
2623          (%o3)                                done
2624          (%i4) riemann(false);
2625          (%o4)                                done
2626          (%i5) cdisplay(riem);
2627                         [ 0               0                    0            0      ]
2628                         [                                                          ]
2629                         [                              2                           ]
2630                         [      3 m (r - 2 m)   m    2 m                            ]
2631                         [ 0  - ------------- + -- - ----       0            0      ]
2632                         [            4          3     4                            ]
2633                         [           r          r     r                             ]
2634                         [                                                          ]
2635              riem     = [                                 m (r - 2 m)              ]
2636                  1, 1   [ 0               0               -----------       0      ]
2637                         [                                      4                   ]
2638                         [                                     r                    ]
2639                         [                                                          ]
2640                         [                                              m (r - 2 m) ]
2641                         [ 0               0                    0       ----------- ]
2642                         [                                                   4      ]
2643                         [                                                  r       ]
2644
2645                                          [    2 m (r - 2 m)       ]
2646                                          [ 0  -------------  0  0 ]
2647                                          [          4             ]
2648                                          [         r              ]
2649                               riem     = [                        ]
2650                                   1, 2   [ 0        0        0  0 ]
2651                                          [                        ]
2652                                          [ 0        0        0  0 ]
2653                                          [                        ]
2654                                          [ 0        0        0  0 ]
2655
2656                                          [         m (r - 2 m)    ]
2657                                          [ 0  0  - -----------  0 ]
2658                                          [              4         ]
2659                                          [             r          ]
2660                               riem     = [                        ]
2661                                   1, 3   [ 0  0        0        0 ]
2662                                          [                        ]
2663                                          [ 0  0        0        0 ]
2664                                          [                        ]
2665                                          [ 0  0        0        0 ]
2666
2667                                          [            m (r - 2 m) ]
2668                                          [ 0  0  0  - ----------- ]
2669                                          [                 4      ]
2670                                          [                r       ]
2671                               riem     = [                        ]
2672                                   1, 4   [ 0  0  0        0       ]
2673                                          [                        ]
2674                                          [ 0  0  0        0       ]
2675                                          [                        ]
2676                                          [ 0  0  0        0       ]
2677
2678                                         [       0         0  0  0 ]
2679                                         [                         ]
2680                                         [       2 m               ]
2681                                         [ - ------------  0  0  0 ]
2682                              riem     = [    2                    ]
2683                                  2, 1   [   r  (r - 2 m)          ]
2684                                         [                         ]
2685                                         [       0         0  0  0 ]
2686                                         [                         ]
2687                                         [       0         0  0  0 ]
2688
2689                             [     2 m                                         ]
2690                             [ ------------  0        0               0        ]
2691                             [  2                                              ]
2692                             [ r  (r - 2 m)                                    ]
2693                             [                                                 ]
2694                             [      0        0        0               0        ]
2695                             [                                                 ]
2696                  riem     = [                         m                       ]
2697                      2, 2   [      0        0  - ------------        0        ]
2698                             [                     2                           ]
2699                             [                    r  (r - 2 m)                 ]
2700                             [                                                 ]
2701                             [                                         m       ]
2702                             [      0        0        0         - ------------ ]
2703                             [                                     2           ]
2704                             [                                    r  (r - 2 m) ]
2705
2706                                          [ 0  0       0        0 ]
2707                                          [                       ]
2708                                          [            m          ]
2709                                          [ 0  0  ------------  0 ]
2710                               riem     = [        2              ]
2711                                   2, 3   [       r  (r - 2 m)    ]
2712                                          [                       ]
2713                                          [ 0  0       0        0 ]
2714                                          [                       ]
2715                                          [ 0  0       0        0 ]
2716
2717                                          [ 0  0  0       0       ]
2718                                          [                       ]
2719                                          [               m       ]
2720                                          [ 0  0  0  ------------ ]
2721                               riem     = [           2           ]
2722                                   2, 4   [          r  (r - 2 m) ]
2723                                          [                       ]
2724                                          [ 0  0  0       0       ]
2725                                          [                       ]
2726                                          [ 0  0  0       0       ]
2727
2728                                                [ 0  0  0  0 ]
2729                                                [            ]
2730                                                [ 0  0  0  0 ]
2731                                                [            ]
2732                                     riem     = [ m          ]
2733                                         3, 1   [ -  0  0  0 ]
2734                                                [ r          ]
2735                                                [            ]
2736                                                [ 0  0  0  0 ]
2737
2738                                                [ 0  0  0  0 ]
2739                                                [            ]
2740                                                [ 0  0  0  0 ]
2741                                                [            ]
2742                                     riem     = [    m       ]
2743                                         3, 2   [ 0  -  0  0 ]
2744                                                [    r       ]
2745                                                [            ]
2746                                                [ 0  0  0  0 ]
2747
2748                                         [   m                      ]
2749                                         [ - -   0   0       0      ]
2750                                         [   r                      ]
2751                                         [                          ]
2752                                         [        m                 ]
2753                                         [  0   - -  0       0      ]
2754                              riem     = [        r                 ]
2755                                  3, 3   [                          ]
2756                                         [  0    0   0       0      ]
2757                                         [                          ]
2758                                         [              2 m - r     ]
2759                                         [  0    0   0  ------- + 1 ]
2760                                         [                 r        ]
2761
2762                                              [ 0  0  0    0   ]
2763                                              [                ]
2764                                              [ 0  0  0    0   ]
2765                                              [                ]
2766                                   riem     = [            2 m ]
2767                                       3, 4   [ 0  0  0  - --- ]
2768                                              [             r  ]
2769                                              [                ]
2770                                              [ 0  0  0    0   ]
2771
2772                                          [       0        0  0  0 ]
2773                                          [                        ]
2774                                          [       0        0  0  0 ]
2775                                          [                        ]
2776                               riem     = [       0        0  0  0 ]
2777                                   4, 1   [                        ]
2778                                          [      2                 ]
2779                                          [ m sin (theta)          ]
2780                                          [ -------------  0  0  0 ]
2781                                          [       r                ]
2782
2783                                          [ 0        0        0  0 ]
2784                                          [                        ]
2785                                          [ 0        0        0  0 ]
2786                                          [                        ]
2787                               riem     = [ 0        0        0  0 ]
2788                                   4, 2   [                        ]
2789                                          [         2              ]
2790                                          [    m sin (theta)       ]
2791                                          [ 0  -------------  0  0 ]
2792                                          [          r             ]
2793
2794                                        [ 0  0          0          0 ]
2795                                        [                            ]
2796                                        [ 0  0          0          0 ]
2797                                        [                            ]
2798                             riem     = [ 0  0          0          0 ]
2799                                 4, 3   [                            ]
2800                                        [                2           ]
2801                                        [         2 m sin (theta)    ]
2802                                        [ 0  0  - ---------------  0 ]
2803                                        [                r           ]
2804
2805                           [        2                                             ]
2806                           [   m sin (theta)                                      ]
2807                           [ - -------------         0                0         0 ]
2808                           [         r                                            ]
2809                           [                                                      ]
2810                           [                         2                            ]
2811                           [                    m sin (theta)                     ]
2812                riem     = [        0         - -------------         0         0 ]
2813                    4, 4   [                          r                           ]
2814                           [                                                      ]
2815                           [                                          2           ]
2816                           [                                   2 m sin (theta)    ]
2817                           [        0                0         ---------------  0 ]
2818                           [                                          r           ]
2819                           [                                                      ]
2820                           [        0                0                0         0 ]
2821
2822          (%o5)                                done
2823
2824
2825 -- Funci�n: deleten (<L>, <n>)
2826     Devuelve una nueva lista consistente en <L> sin su <n>-�simo
2827     elemento.
2828
282926.2.9 Variables utilizadas por 'ctensor'
2830-----------------------------------------
2831
2832 -- Variable opcional: dim
2833     Valor por defecto: 4
2834
2835     Es la dimensi�n de la variedad, que por defecto ser� 4.  La
2836     instrucci�n 'dim: n' establecer� la dimensi�n a cualquier otro
2837     valor 'n'.
2838
2839 -- Variable opcional: diagmetric
2840     Valor por defecto: 'false'
2841
2842     Si 'diagmetric' vale 'true' se utilizar�n rutinas especiales para
2843     calcular todos los objetos geom�tricos teniendo en cuenta la
2844     diagonalidad de la m�trica, lo que redundar� en una reducci�n del
2845     tiempo de c�lculo.  Esta opci�n se fija autom�ticamente por
2846     'csetup' si se especifica una m�trica diagonal.
2847
2848 -- Variable opcional: ctrgsimp
2849
2850     Provoca que se realicen simplificaciones trigonom�tricas cuando se
2851     calculan tensores.  La variable 'ctrgsimp' afecta �nicamente a
2852     aquellos c�lculos que utilicen un sistema de referencia m�vil.
2853
2854 -- Variable opcional: cframe_flag
2855
2856     Provoca que los c�lculos se realicen respecto de un sistema de
2857     referencia m�vil.
2858
2859 -- Variable opcional: ctorsion_flag
2860
2861     Obliga a que se calcule tambi�n el tensor de contorsi�n junto con
2862     los coeficientes de conexi�n.  El propio tensor de contorsi�n se
2863     calcula con la funci�n 'contortion' a partir del tensor 'tr'
2864     suministrado por el usuario.
2865
2866 -- Variable opcional: cnonmet_flag
2867
2868     Obliga a que se calculen tambi�n los coeficientes de no metricidad
2869     junto con los coeficientes de conexi�n.  Los coeficientes de no
2870     metricidad se calculan con la funci�n 'nonmetricity' a partir del
2871     vector de no metricidad'nm' suministrado por el usuario.
2872
2873 -- Variable opcional: ctayswitch
2874
2875     Si vale 'true', obliga a que ciertos c�lculos de 'ctensor' se
2876     lleven a cabo utilizando desarrollos de series de Taylor.  Estos
2877     c�lculos hacen referencia a las funciones 'christof', 'ricci',
2878     'uricci', 'einstein' y 'weyl'.
2879
2880 -- Variable opcional: ctayvar
2881
2882     Variable utilizada para desarrollos de Taylor cuando la variable
2883     'ctayswitch' vale 'true'.
2884
2885 -- Variable opcional: ctaypov
2886
2887     M�ximo exponente utilizado en los desarrollos de Taylor cuando
2888     'ctayswitch' vale 'true'.
2889
2890 -- Variable opcional: ctaypt
2891
2892     Punto alrededor del cual se realiza un desarrollo de Taylor cuando
2893     'ctayswitch' vale 'true'.
2894
2895 -- Variable opcional: gdet
2896
2897     Es el determinante del tensor m�trico 'lg', calculado por 'cmetric'
2898     cuando 'cframe_flag' vale 'false'.
2899
2900 -- Variable opcional: ratchristof
2901
2902     Obliga a que la funci�n 'christof' aplique la simplificaci�n
2903     racional.
2904
2905 -- Variable opcional: rateinstein
2906     Valor por defecto: 'true'
2907
2908     Si vale 'true' entonces se har� la simplificaci�n racional en los
2909     componentes no nulos de los tensores de Einstein; si 'ratfac' vale
2910     'true' entonces las componentes tambi�n ser�n factorizadas.
2911
2912 -- Variable opcional: ratriemann
2913     Valor por defecto: 'true'
2914
2915     Es una de las variables que controlan la simplificaci�n de los
2916     tensores de Riemann; si vale 'true', entonces se llevar� a cabo la
2917     simplificaci�n racional; si 'ratfac' vale 'true' entonces las
2918     componentes tambi�n ser�n factorizadas.
2919
2920 -- Variable opcional: ratweyl
2921     Valor por defecto: 'true'
2922
2923     Si vale 'true', entonces la funci�n 'weyl' llevar� a cabo la
2924     simplificaci�n racional de los valores del tensor de Weyl.  si
2925     'ratfac' vale 'true' entonces las componentes tambi�n ser�n
2926     factorizadas.
2927
2928 -- Variable: lfg
2929     Es la covariante de la m�trica del sistema de referencia.  Por
2930     defecto, est� inicializada al sistema de referencia
2931     tetradimensional de Lorentz con signatura (+,+,+,-).  Se utiliza
2932     cuando 'cframe_flag' vale 'true'.
2933
2934 -- Variable: ufg
2935     Es la m�trica del sistema de referencia inverso.  La calcula 'lfg'
2936     cuando 'cmetric' es invocada tomando 'cframe_flag' el valor 'true'.
2937
2938 -- Variable: riem
2939     Es el tensor (3,1) de Riemann.  Se calcula cuando se invoca la
2940     funci�n 'riemann'.  Para informaci�n sobre el indexado, v�ase la
2941     descripci�n de 'riemann'.
2942
2943     Si 'cframe_flag' vale 'true', 'riem' se calcula a partir del tensor
2944     covariante de Riemann 'lriem'.
2945
2946 -- Variable: lriem
2947
2948     Es el tensor covariante de Riemann.  Lo calcula la funci�n
2949     'lriemann'.
2950
2951 -- Variable: uriem
2952
2953     Es el tensor contravariante de Riemann.  Lo calcula la funci�n
2954     'uriemann'.
2955
2956 -- Variable: ric
2957
2958     Es el tensor de Ricci.  Lo calcula la funci�n 'ricci'.
2959
2960 -- Variable: uric
2961
2962     Es el tensor contravariante de Ricci.  Lo calcula la funci�n
2963     'uricci'.
2964
2965 -- Variable: lg
2966
2967     Es el tensor m�trico.  Este tensor se debe especificar (como matriz
2968     cuadrada de orden 'dim') antes de que se hagan otros c�lculos.
2969
2970 -- Variable: ug
2971
2972     Es la inversa del tensor m�trico.  Lo calcula la funci�n 'cmetric'.
2973
2974 -- Variable: weyl
2975
2976     Es el tensor de Weyl.  Lo calcula la funci�n 'weyl'.
2977
2978 -- Variable: fb
2979
2980     Son los coeficientes del sistema de referencia soporte, tal como
2981     los calcula 'frame_bracket'.
2982
2983 -- Variable: kinvariant
2984
2985     Es la invariante de Kretchmann, tal como la calcula la funci�n
2986     'rinvariant'.
2987
2988 -- Variable: np
2989
2990     Es la cuaterna nula de Newman-Penrose, tal como la calcula la
2991     funci�n 'nptetrad'.
2992
2993 -- Variable: npi
2994
2995     Es la cuaterna nula "raised-index Newman-Penrose".  Lo calcula la
2996     funci�n 'nptetrad'.  Se define como 'ug.np'.  El producto
2997     'np.transpose(npi)' es constante:
2998
2999          (%i39) trigsimp(np.transpose(npi));
3000                                        [  0   - 1  0  0 ]
3001                                        [                ]
3002                                        [ - 1   0   0  0 ]
3003          (%o39)                        [                ]
3004                                        [  0    0   0  1 ]
3005                                        [                ]
3006                                        [  0    0   1  0 ]
3007
3008 -- Variable: tr
3009
3010     Tensor de rango 3 suministrado por el usuario y que representa una
3011     torsi�n.  Lo utiliza la funci�n 'contortion'.
3012
3013 -- Variable: kt
3014
3015     Es el tensor de contorsi�n, calculado a partir de 'tr' por la
3016     funci�n 'contortion'.
3017
3018 -- Variable: nm
3019
3020     Vector de no metricidad suministrado por el usuario.  Lo utiliza la
3021     funci�n 'nonmetricity'.
3022
3023 -- Variable: nmc
3024
3025     Son los coeficientes de no metricidad, calculados a partir de 'nm'
3026     por la funci�n 'nonmetricity'.
3027
3028 -- Variable del sistema: tensorkill
3029
3030     Variable que indica si el paquete de tensores se ha inicializado.
3031     Utilizada por 'csetup' y reinicializada por 'init_ctensor'.
3032
3033 -- Variable opcional: ct_coords
3034     Valor por defecto: '[]'
3035
3036     La variable 'ct_coords' contiene una lista de coordenadas.  Aunque
3037     se define normalmente cuando se llama a la funci�n 'csetup',
3038     tambi�n se pueden redefinir las coordenadas con la asignaci�n
3039     'ct_coords: [j1, j2, ..., jn]' donde 'j' es el nuevo nombre de las
3040     coordenadas.  V�ase tambi�n 'csetup'.
3041
304226.2.10 Nombres reservados
3043--------------------------
3044
3045Los siguientes nombres se utilizan internamente en el paquete 'ctensor'
3046y no deber�an redefinirse:
3047
3048       Nombre       Descripci�n
3049       ---------------------------------------
3050       _lg()        Toma el valor lfg si se utiliza m�trica del sistema de referencia,
3051                    lg en otro caso
3052       _ug()        Toma el valor ufg si se utiliza m�trica del sistema de referencia,
3053                    ug en otro caso
3054       cleanup()    Elimina elementos de la lista deindex
3055       contract4()  Utilizada por psi()
3056       filemet()    Utilizada por csetup() cuando se lee la m�trica desde un fichero
3057       findde1()    Utilizada por findde()
3058       findde2()    Utilizada por findde()
3059       findde3()    Utilizada por findde()
3060       kdelt()      Delta de Kronecker (no generalizada)
3061       newmet()     Utilizada por csetup() para establecer una m�trica interactivamente
3062       setflags()   Utilizada por init_ctensor()
3063       readvalue()
3064       resimp()
3065       sermet()     Utilizada por csetup() para definir una m�trica como serie de Taylor
3066       txyzsum()
3067       tmetric()    M�trica del sistema de referencia, utilizada por cmetric()
3068                    cuando cframe_flag:true
3069       triemann()   Tensor de Riemann en la base del sistema de referencia, se utiliza cuando
3070                    cframe_flag:true
3071       tricci()     Tensor de Ricci en la base del sistema de referencia, se utiliza cuando
3072                    cframe_flag:true
3073       trrc()       Coeficientes de rotaci�n de Ricci, utilizada por christof()
3074       yesp()
3075
3076
3077File: maxima.info,  Node: atensor,  Next: Sumas productos y series,  Prev: ctensor,  Up: Top
3078
307927 atensor
3080**********
3081
3082* Menu:
3083
3084* Introducci�n a atensor::
3085* Funciones y variables para atensor::
3086
3087
3088File: maxima.info,  Node: Introducci�n a atensor,  Next: Funciones y variables para atensor,  Prev: atensor,  Up: atensor
3089
309027.1 Introducci�n a atensor
3091===========================
3092
3093El paquete 'atensor' contiene funciones para la manipulaci�n algebraica
3094de tensores.  Para hacer uso de 'atensor' es necesario cargarlo en
3095memoria haciendo 'load(atensor)', seguido de una llamada a la funci�n
3096'init_atensor'.
3097
3098La parte m�s importante de 'atensor' es una bater�a de reglas de
3099simplificaci�n para el producto no conmutativo ("'.'").  El paquete
3100'atensor' reconoce algunos tipos de �lgebras; las correspondientes
3101reglas de simplificaci�n se activan tan pronto como se hace una llamada
3102a la funci�n 'init_atensor'.
3103
3104Las capacidades de 'atensor' se pueden demostrar definiendo el �lgebra
3105de cuaterniones como un �lgebra de Clifford Cl(0,2) con una base de dos
3106vectores.  Las tres unidades imaginarias son los dos vectores de la base
3107junto con su producto:
3108
3109         i = v     j = v     k = v  . v
3110              1         2         1    2
3111
3112Aunque el paquete 'atensor' incluye su propia definici�n para el �lgebra
3113de cuaterniones, no se utiliza en el siguiente ejemplo, en el cual se
3114construye la tabla de multiplicaci�n como una matriz:
3115
3116
3117     (%i1) load(atensor);
3118     (%o1)       /share/tensor/atensor.mac
3119     (%i2) init_atensor(clifford,0,0,2);
3120     (%o2)                                done
3121     (%i3) atensimp(v[1].v[1]);
3122     (%o3)                                 - 1
3123     (%i4) atensimp((v[1].v[2]).(v[1].v[2]));
3124     (%o4)                                 - 1
3125     (%i5) q:zeromatrix(4,4);
3126                                     [ 0  0  0  0 ]
3127                                     [            ]
3128                                     [ 0  0  0  0 ]
3129     (%o5)                           [            ]
3130                                     [ 0  0  0  0 ]
3131                                     [            ]
3132                                     [ 0  0  0  0 ]
3133     (%i6) q[1,1]:1;
3134     (%o6)                                  1
3135     (%i7) for i thru adim do q[1,i+1]:q[i+1,1]:v[i];
3136     (%o7)                                done
3137     (%i8) q[1,4]:q[4,1]:v[1].v[2];
3138     (%o8)                               v  . v
3139                                          1    2
3140     (%i9) for i from 2 thru 4 do for j from 2 thru 4 do
3141           q[i,j]:atensimp(q[i,1].q[1,j]);
3142     (%o9)                                done
3143     (%i10) q;
3144                        [    1        v         v      v  . v  ]
3145                        [              1         2      1    2 ]
3146                        [                                      ]
3147                        [   v         - 1     v  . v    - v    ]
3148                        [    1                 1    2      2   ]
3149     (%o10)             [                                      ]
3150                        [   v      - v  . v     - 1      v     ]
3151                        [    2        1    2              1    ]
3152                        [                                      ]
3153                        [ v  . v      v        - v       - 1   ]
3154                        [  1    2      2          1            ]
3155
3156El paquete 'atensor' reconoce como vectores de la base s�mbolos
3157indexados, donde el s�mbolo es el almacenado en 'asymbol' y el �ndice va
3158desde 1 hasta 'adim'.  Para s�mbolos indexados, y s�lo para ellos, se
3159eval�an las formas bilineales 'sf', 'af' y 'av'.  La evaluaci�n
3160sustituye el valor de 'aform[i,j]' en lugar de 'fun(v[i],v[j])', donde
3161'v' representa el valor de 'asymbol' y 'fun' es 'af' o 'sf'; o sustituye
3162'v[aform[i,j]]' en lugar de 'av(v[i],v[j])'.
3163
3164Huelga decir que las funciones 'sf', 'af' y 'av' pueden volver a
3165definirse.
3166
3167Cuando se carga el paquete 'atensor' se hacen las siguientes
3168asignaciones de variables:
3169
3170     dotscrules:true;
3171     dotdistrib:true;
3172     dotexptsimp:false;
3173
3174Si se quiere experimentar con una �lgebra no asociativa, tambi�n se
3175puede igualar la variable 'dotassoc' a 'false'.  En tal caso, sin
3176embargo, 'atensimp' no ser� siempre capaz de realizar las
3177simplificaciones deseadas.
3178
3179
3180File: maxima.info,  Node: Funciones y variables para atensor,  Prev: Introducci�n a atensor,  Up: atensor
3181
318227.2 Funciones y variables para atensor
3183=======================================
3184
3185 -- Funci�n: init_atensor (<alg_type>, <opt_dims>)
3186 -- Funci�n: init_atensor (<alg_type>)
3187
3188     Inicializa el paquete 'atensor' con el tipo de �lgebra
3189     especificado, <alg_type>, que puede ser una de las siguientes:
3190
3191     'universal': El �lgebra universal no tiene reglas de conmutaci�n.
3192
3193     'grassmann': El �lgebra de Grassman se define mediante la relaci�n
3194     de conmutaci�n 'u.v+v.u=0'.
3195
3196     'clifford': El �lgebra de Clifford se define mediante la regla de
3197     conmutaci�n 'u.v+v.u=-2*sf(u,v)' donde 'sf' es una funci�n escalar
3198     sim�trica.  Para esta �lgebra, <opt_dims> puede contener hasta tres
3199     enteros no negativos, que representan el n�mero de dimensiones
3200     positivas, degeneradas y negativas, respectivamente, de esta
3201     �lgebra.  Si se suministran los valores de <opt_dims>, 'atensor'
3202     configurar� los valores de 'adim' y 'aform' de forma apropiada.  En
3203     otro caso, 'adim' tomar� por defecto el valor 0 y 'aform' no se
3204     definir�.
3205
3206     'symmetric': El �lgebra sim�trica se define mediante la regla de
3207     conmutaci�n 'u.v-v.u=0'.
3208
3209     'symplectic': El �lgebra simpl�ctica se define mediante la regla de
3210     conmutaci�n 'u.v-v.u=2*af(u,v)', donde 'af' es una funci�n escalar
3211     antisim�trica.  Para el �lgebra simpl�ctica, <opt_dims> puede
3212     contener hasta dos enteros no negativos, que representan las
3213     dimensiones no degeneradas y degeneradas, respectivamente.  Si se
3214     suministran los valores de <opt_dims>, 'atensor' configurar� los
3215     valores de 'adim' y 'aform' de forma apropiada.  En otro caso,
3216     'adim' tomar� por defecto el valor 0 y 'aform' no se definir�.
3217
3218     'lie_envelop': El �lgebra de la envolvente de Lie se define
3219     mediante la regla de conmutaci�n 'u.v-v.u=2*av(u,v)', donde 'av' es
3220     una funci�n antisim�trica.
3221
3222     La funci�n 'init_atensor' tambi�n reconoce algunos tipos de
3223     �lgebras predefinidas:
3224
3225     'complex' implementa el �lgebra de n�meros complejos como un
3226     �lgebra de Clifford Cl(0,1).  La llamada 'init_atensor(complex)'
3227     equivale a 'init_atensor(clifford,0,0,1)'.
3228
3229     'quaternion' implementa el �lgebra de cuaterniones.  La llamada
3230     'init_atensor(quaternion)' equivale a
3231     'init_atensor(clifford,0,0,2)'.
3232
3233     'pauli' implementa el �lgebra de Pauli como un �lgebra de Clifford
3234     Cl(3,0).  La llamada 'init_atensor(pauli)' equivale a
3235     'init_atensor(clifford,3)'.
3236
3237     'dirac' implementa el �lgebra de Dirac como un �lgebra de Clifford
3238     Cl(3,1).  La llamada 'init_atensor(dirac)' equivale a
3239     'init_atensor(clifford,3,0,1)'.
3240
3241 -- Funci�n: atensimp (<expr>)
3242
3243     Simplifica la expresi�n algebraica de un tensor <expr> de acuerdo
3244     con las reglas configuradas mediante una llamada a 'init_atensor'.
3245     La simplificaci�n incluye la aplicaci�n recursiva de las reglas de
3246     conmutaci�n y llamadas a 'sf', 'af' y 'av' siempre que sea posible.
3247     Se utiliza un algoritmo que asegure que la funci�n termina siempre,
3248     incluso en el caso de expresiones complejas.
3249
3250 -- Funci�n: alg_type
3251
3252     Tipo de �lgebra.  Valores v�lidos son 'universal', 'grassmann',
3253     'clifford', 'symmetric', 'symplectic' y 'lie_envelop'.
3254
3255 -- Variable: adim
3256     Valor por defecto: 0
3257
3258     La dimensi�n del �lgebra.  El paquete 'atensor' utiliza el valor de
3259     'adim' para determinar si un objeto indexado es un vector v�lido
3260     para la base.  V�ase 'abasep'.
3261
3262 -- Variable: aform
3263     Valor por defecto: 'ident(3)'
3264
3265     Valores por defecto para las formas bilineales 'sf', 'af' y 'av'.
3266     El valor por defecto es la matriz identidad 'ident(3)'.
3267
3268 -- Variable: asymbol
3269     Valor por defecto: 'v'
3270
3271     S�mbolo para los vectores base.
3272
3273 -- Funci�n: sf (<u>, <v>)
3274
3275     Una funci�n escalar sim�trica que se utiliza en relaciones de
3276     conmutaci�n.  La implementaci�n por defecto analiza si los dos
3277     argumentos son vectores base mediante 'abasep' y en tal caso
3278     sustituye el valor correspondiente de la matriz 'aform'.
3279
3280 -- Funci�n: af (<u>, <v>)
3281
3282     Una funci�n escalar antisim�trica que se utiliza en relaciones de
3283     conmutaci�n.  La implementaci�n por defecto analiza si los dos
3284     argumentos son vectores base mediante 'abasep' y en tal caso
3285     sustituye el valor correspondiente de la matriz 'aform'.
3286
3287 -- Funci�n: av (<u>, <v>)
3288
3289     Una funci�n antisim�trica que se utiliza en relaciones de
3290     conmutaci�n.  La implementaci�n por defecto analiza si los dos
3291     argumentos son vectores base mediante 'abasep' y en tal caso
3292     sustituye el valor correspondiente de la matriz 'aform'.
3293
3294     Ejemplo:
3295
3296          (%i1) load(atensor);
3297          (%o1)       /share/tensor/atensor.mac
3298          (%i2) adim:3;
3299          (%o2)                                  3
3300          (%i3) aform:matrix([0,3,-2],[-3,0,1],[2,-1,0]);
3301                                         [  0    3   - 2 ]
3302                                         [               ]
3303          (%o3)                          [ - 3   0    1  ]
3304                                         [               ]
3305                                         [  2   - 1   0  ]
3306          (%i4) asymbol:x;
3307          (%o4)                                  x
3308          (%i5) av(x[1],x[2]);
3309          (%o5)                                 x
3310                                                 3
3311
3312 -- Funci�n: abasep (<v>)
3313
3314     Analiza si su argumento es un vector base en 'atensor'.  Esto es,
3315     si se trata de un s�mbolo indexado, siendo el s�mbolo el mismo que
3316     el valor de 'asymbol' y si el �ndice tiene un valor num�rico entre
3317     1 y 'adim'.
3318
3319
3320File: maxima.info,  Node: Sumas productos y series,  Next: Teor�a de N�meros,  Prev: atensor,  Up: Top
3321
332228 Sumas productos y series
3323***************************
3324
3325* Menu:
3326
3327* Funciones y variables para sumas y productos::
3328* Introducci�n a las series::
3329* Funciones y variables para las series::
3330* Introducci�n a las series de Fourier::
3331* Funciones y variables para series de Fourier::
3332* Funciones y variables para series de Poisson::
3333
3334
3335File: maxima.info,  Node: Funciones y variables para sumas y productos,  Next: Introducci�n a las series,  Prev: Sumas productos y series,  Up: Sumas productos y series
3336
333728.1 Funciones y variables para sumas y productos
3338=================================================
3339
3340 -- Funci�n: bashindices (<expr>)
3341     Transforma la expresi�n <expr> d�ndole a cada sumatorio y producto
3342     un �nico �ndice.  Esto le da a 'changevar' mayor precisi�n cuando
3343     opera con sumas y productos.  La forma del �nico �ndice es
3344     'j<number>'.  La cantidad <number> se determina en funci�n de
3345     'gensumnum', valor que puede cambiar el usuario.  Por ejemplo,
3346     haciendo 'gensumnum:0$'.
3347
3348 -- Funci�n: lsum (<expr>, <x>, <L>)
3349     Representa la suma de <expr> para cada elemento <x> en <L>.
3350
3351     Se retornar� la forma nominal ''lsum' si el argumento <L> no es una
3352     lista.
3353
3354     Ejemplos:
3355
3356          (%i1) lsum (x^i, i, [1, 2, 7]);
3357                                      7    2
3358          (%o1)                      x  + x  + x
3359          (%i2) lsum (i^2, i, rootsof (x^3 - 1, x));
3360                               ====
3361                               \      2
3362          (%o2)                 >    i
3363                               /
3364                               ====
3365                                             3
3366                               i in rootsof(x  - 1, x)
3367
3368 -- Funci�n: intosum (<expr>)
3369     Mueve los factores multiplicativos que est�n fuera de un sumatorio
3370     hacia dentro de �ste.  Si el �ndice del sumatorio aparece en la
3371     expresi�n exterior, entonces 'intosum' busca un �ndice razonable,
3372     lo mismo que hace con 'sumcontract'.  Se trata de la operaci�n
3373     contraria a extraer factores comunes de los sumatorios.
3374
3375     En algunos caos puede ser necesario hacer 'scanmap (multthru,
3376     <expr>)' antes que 'intosum'.
3377
3378     Ejemplo:
3379
3380          (%i1) sum(2*x^2*n^k, k , 0, inf);
3381                                         inf
3382                                         ====
3383                                       2 \      k
3384          (%o1)                     2 x   >    n
3385                                         /
3386                                         ====
3387                                         k = 0
3388          (%i2) intosum(%);
3389                                    inf
3390                                    ====
3391                                    \        k  2
3392          (%o2)                      >    2 n  x
3393                                    /
3394                                    ====
3395                                    k = 0
3396
3397 -- Funci�n: product (<expr>, <i>, <i_0>, <i_1>)
3398     Representa el producto de los valores de 'expr' seg�n el �ndice <i>
3399     var�a de <i_0> hasta <i_1>.  La forma nominal ''product' se
3400     presenta en forma de letra pi may�scula.
3401
3402     La funci�n 'product' eval�a <expr> y los l�mites inferior y
3403     superior, <i_0> y <i_1>, pero no eval�a el �ndice <i>.
3404
3405     Si la diferencia entre los l�mites superior e inferior es un n�mero
3406     entero, la expresi�n <expr> se eval�a para cada valor del �ndice
3407     <i>, siendo el resultado un producto en forma expl�cita.
3408
3409     En caso contrario, el rango del �ndice no est� definido,
3410     aplic�ndose entonces algunas reglas que permitan simplificar el
3411     producto.  Cuando la variable global 'simpproduct' valga 'true', se
3412     aplicar�n reglas adicionales.  En ciertos casos, la simplificaci�n
3413     dar� lugar a un resultado que ya no tenga el formato del producto;
3414     en caso contrario se devolver� una forma nominal ''product'.
3415
3416     V�anse tambi�n 'nouns' y 'evflag'.
3417
3418     Ejemplos:
3419
3420          (%i1) product (x + i*(i+1)/2, i, 1, 4);
3421          (%o1)           (x + 1) (x + 3) (x + 6) (x + 10)
3422          (%i2) product (i^2, i, 1, 7);
3423          (%o2)                       25401600
3424          (%i3) product (a[i], i, 1, 7);
3425          (%o3)                 a  a  a  a  a  a  a
3426                                 1  2  3  4  5  6  7
3427          (%i4) product (a(i), i, 1, 7);
3428          (%o4)          a(1) a(2) a(3) a(4) a(5) a(6) a(7)
3429          (%i5) product (a(i), i, 1, n);
3430                                       n
3431                                     /===\
3432                                      ! !
3433          (%o5)                       ! !  a(i)
3434                                      ! !
3435                                     i = 1
3436          (%i6) product (k, k, 1, n);
3437                                         n
3438                                       /===\
3439                                        ! !
3440          (%o6)                         ! !  k
3441                                        ! !
3442                                       k = 1
3443          (%i7) product (k, k, 1, n), simpproduct;
3444          (%o7)                          n!
3445          (%i8) product (integrate (x^k, x, 0, 1), k, 1, n);
3446                                       n
3447                                     /===\
3448                                      ! !    1
3449          (%o8)                       ! !  -----
3450                                      ! !  k + 1
3451                                     k = 1
3452          (%i9) product (if k <= 5 then a^k else b^k, k, 1, 10);
3453                                        15  40
3454          (%o9)                        a   b
3455
3456 -- Variable opcional: simpsum
3457     Valor por defecto: 'false'
3458
3459     Si 'simpsum' vale 'true', se simplifica el resultado de un
3460     sumatorio 'sum'.  Esta simplificaci�n podr� producir en ocasiones
3461     una expresi�n compacta.  Si 'simpsum' vale 'false' o si se utiliza
3462     la forma apostrofada ''sum', el valor es una forma nominal que
3463     representa la notaci�n sigma habitual en matem�ticas.
3464
3465 -- Funci�n: sum (<expr>, <i>, <i_0>, <i_1>)
3466
3467     Representa la suma de los valores de 'expr' seg�n el �ndice <i>
3468     var�a de <i_0> hasta <i_1>.  La forma nominal ''sum' se presenta en
3469     forma de letra sigma may�scula.
3470
3471     La funci�n 'sum' eval�a su sumando <expr> y los l�mites inferior y
3472     superior, <i_0> y <i_1>, pero no eval�a el �ndice <i>.
3473
3474     Si la diferencia entre los l�mites superior e inferior es un n�mero
3475     entero, el sumando <expr> se eval�a para cada valor del �ndice <i>,
3476     siendo el resultado una suma en forma expl�cita.
3477
3478     En caso contrario, el rango del �ndice no est� definido,
3479     aplic�ndose entonces algunas reglas que permitan simplificar la
3480     suma.  Cuando la variable global 'simpsum' valga 'true', se
3481     aplicar�n reglas adicionales.  En ciertos casos, la simplificaci�n
3482     dar� lugar a un resultado que ya no tenga el formato del sumatorio;
3483     en caso contrario se devolver� una forma nominal ''product'.
3484
3485     Cuando 'cauchysum' vale 'true', el producto de sumatorios se
3486     expresa como un producto de Cauchy, en cuyo caso el �ndice del
3487     sumatorio interior es funci�n del �ndice del exterior, en lugar de
3488     variar independientemente.
3489
3490     La variable global 'genindex' guarda el prefijo alfab�tico a
3491     utilizar cuando sea necesario generar autom�ticamente el siguiente
3492     �ndice de sumatorio.
3493
3494     La variable global 'gensumnum' guarda el sufijo num�rico a utilizar
3495     cuando sea necesario generar autom�ticamente el siguiente �ndice de
3496     sumatorio.  Si 'gensumnum' vale 'false', un �ndice generado
3497     autom�ticamente constar� s�lo de 'genindex', sin sufijo num�rico.
3498
3499     V�anse tambi�n 'sumcontract', 'intosum', 'bashindices',
3500     'niceindices', 'nouns' y 'evflag'.
3501
3502     Ejemplos:
3503
3504          (%i1) sum (i^2, i, 1, 7);
3505          (%o1)                          140
3506          (%i2) sum (a[i], i, 1, 7);
3507          (%o2)           a  + a  + a  + a  + a  + a  + a
3508                           7    6    5    4    3    2    1
3509          (%i3) sum (a(i), i, 1, 7);
3510          (%o3)    a(7) + a(6) + a(5) + a(4) + a(3) + a(2) + a(1)
3511          (%i4) sum (a(i), i, 1, n);
3512                                      n
3513                                     ====
3514                                     \
3515          (%o4)                       >    a(i)
3516                                     /
3517                                     ====
3518                                     i = 1
3519          (%i5) sum (2^i + i^2, i, 0, n);
3520                                    n
3521                                   ====
3522                                   \       i    2
3523          (%o5)                     >    (2  + i )
3524                                   /
3525                                   ====
3526                                   i = 0
3527          (%i6) sum (2^i + i^2, i, 0, n), simpsum;
3528                                        3      2
3529                             n + 1   2 n  + 3 n  + n
3530          (%o6)             2      + --------------- - 1
3531                                            6
3532          (%i7) sum (1/3^i, i, 1, inf);
3533                                      inf
3534                                      ====
3535                                      \     1
3536          (%o7)                        >    --
3537                                      /      i
3538                                      ====  3
3539                                      i = 1
3540          (%i8) sum (1/3^i, i, 1, inf), simpsum;
3541                                          1
3542          (%o8)                           -
3543                                          2
3544          (%i9) sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf);
3545                                        inf
3546                                        ====
3547                                        \     1
3548          (%o9)                      30  >    --
3549                                        /      2
3550                                        ====  i
3551                                        i = 1
3552          (%i10) sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf), simpsum;
3553                                            2
3554          (%o10)                       5 %pi
3555          (%i11) sum (integrate (x^k, x, 0, 1), k, 1, n);
3556                                      n
3557                                     ====
3558                                     \       1
3559          (%o11)                      >    -----
3560                                     /     k + 1
3561                                     ====
3562                                     k = 1
3563          (%i12) sum (if k <= 5 then a^k else b^k, k, 1, 10));
3564                    10    9    8    7    6    5    4    3    2
3565          (%o12)   b   + b  + b  + b  + b  + a  + a  + a  + a  + a
3566
3567 -- Funci�n: sumcontract (<expr>)
3568     Combina todos los sumatorios de una suma cuyos l�mites inferiores y
3569     superiores difieren por constantes.  El resultado es una expresi�n
3570     que contiene un sumatorio por cada conjunto de tales sumatorios,
3571     m�s todos los dem�s t�rminos adicionales que tuvieron que extraerse
3572     para formar la suma.  La funci�n 'sumcontract' combina todos los
3573     sumatorios compatibles y utiliza uno de los �ndices de uno de los
3574     sumatorios si puede, si no formar� un �ndice que sea razonable.
3575
3576     Puede ser necesario hacer 'intosum (<expr>)' antes que
3577     'sumcontract'.
3578
3579     Ejemplo:
3580
3581          (%i1) 'sum(1/l,l,1,n)+'sum(k,k,1,n+2);
3582                                   n        n + 2
3583                                  ====      ====
3584                                  \     1   \
3585          (%o1)                    >    - +  >    k
3586                                  /     l   /
3587                                  ====      ====
3588                                  l = 1     k = 1
3589          (%i2) sumcontract(%);
3590                                      n
3591                                     ====
3592                                     \          1
3593          (%o2)                2 n +  >    (l + -) + 3
3594                                     /          l
3595                                     ====
3596                                     l = 1
3597
3598 -- Variable opcional: sumexpand
3599     Valor por defecto: 'false'
3600
3601     Si 'sumexpand' vale 'true', productos de sumatorios y de sumatorios
3602     con exponentes se reducen a sumatorios anidados.
3603
3604     V�ase tambi�n 'cauchysum'.
3605
3606     Ejemplos:
3607
3608          (%i1) sumexpand: true$
3609          (%i2) sum (f (i), i, 0, m) * sum (g (j), j, 0, n);
3610                               m      n
3611                              ====   ====
3612                              \      \
3613          (%o2)                >      >     f(i1) g(i2)
3614                              /      /
3615                              ====   ====
3616                              i1 = 0 i2 = 0
3617          (%i3) sum (f (i), i, 0, m)^2;
3618                               m      m
3619                              ====   ====
3620                              \      \
3621          (%o3)                >      >     f(i3) f(i4)
3622                              /      /
3623                              ====   ====
3624                              i3 = 0 i4 = 0
3625
3626
3627File: maxima.info,  Node: Introducci�n a las series,  Next: Funciones y variables para las series,  Prev: Funciones y variables para sumas y productos,  Up: Sumas productos y series
3628
362928.2 Introducci�n a las series
3630==============================
3631
3632Maxima dispone de las funciones 'taylor' y 'powerseries' para calcular
3633las series de las funciones diferenciables.  Tambi�n tiene herramientas
3634como 'nusum' capaces de encontrar la expresi�n compacta de algunas
3635series.  Operaciones como la suma y la multiplicaci�n operan de la forma
3636habitual en el contexto de las series.  Esta secci�n presenta las
3637variables globales que controlan la expansi�n.
3638
3639
3640File: maxima.info,  Node: Funciones y variables para las series,  Next: Introducci�n a las series de Fourier,  Prev: Introducci�n a las series,  Up: Sumas productos y series
3641
364228.3 Funciones y variables para las series
3643==========================================
3644
3645 -- Variable opcional: cauchysum
3646     Valor por defecto: 'false'
3647
3648     Cuando se multiplican sumatorios infinitos, si 'sumexpand' vale
3649     'true' y 'cauchysum' vale 'true', entonces se utilizar� el producto
3650     de Cauchy en lugar del usual.  En el producto de Cauchy el �ndice
3651     de la suma interna es funci�n del �ndice de la exterior en lugar de
3652     variar de forma independiente.  Un ejemplo aclara esta idea:
3653
3654          (%i1) sumexpand: false$
3655          (%i2) cauchysum: false$
3656          (%i3) s: sum (f(i), i, 0, inf) * sum (g(j), j, 0, inf);
3657                                inf         inf
3658                                ====        ====
3659                                \           \
3660          (%o3)                ( >    f(i))  >    g(j)
3661                                /           /
3662                                ====        ====
3663                                i = 0       j = 0
3664          (%i4) sumexpand: true$
3665          (%i5) cauchysum: true$
3666          (%i6) ''s;
3667                           inf     i1
3668                           ====   ====
3669                           \      \
3670          (%o6)             >      >     g(i1 - i2) f(i2)
3671                           /      /
3672                           ====   ====
3673                           i1 = 0 i2 = 0
3674
3675 -- Funci�n: deftaylor (<f_1>(<x_1>), <expr_1>, ..., <f_n>(<x_n>),
3676          <expr_n>)
3677     Para cada funci�n <f_i> de variable <x_i>, 'deftaylor' define
3678     <expr_i> como una serie de Taylor alrededor de cero.  La expresi�n
3679     <expr_i> ser� un polinomio en <x_i> o una suma; 'deftaylor' admite
3680     tambi�n expresiones m�s generales.
3681
3682     La llamada 'powerseries (<f_i>(<x_i>), <x_i>, 0)' devuelve la serie
3683     definida por 'deftaylor'.
3684
3685     La funci�n 'deftaylor' eval�a sus argumentos y devuelve la lista de
3686     las funciones <f_1>, ..., <f_n>.
3687
3688     Ejemplo:
3689
3690          (%i1) deftaylor (f(x), x^2 + sum(x^i/(2^i*i!^2), i, 4, inf));
3691          (%o1)                          [f]
3692          (%i2) powerseries (f(x), x, 0);
3693                                inf
3694                                ====      i1
3695                                \        x         2
3696          (%o2)                  >     -------- + x
3697                                /       i1    2
3698                                ====   2   i1!
3699                                i1 = 4
3700          (%i3) taylor (exp (sqrt (f(x))), x, 0, 4);
3701                                2         3          4
3702                               x    3073 x    12817 x
3703          (%o3)/T/     1 + x + -- + ------- + -------- + . . .
3704                               2     18432     307200
3705
3706 -- Variable opcional: maxtayorder
3707     Valor por defecto: 'true'
3708
3709     Si 'maxtayorder' vale 'true', entonces durante la manipulaci�n
3710     algebraica de series truncadas de Taylor, la funci�n 'taylor' trata
3711     de retener tantos t�rminos correctos como sea posible.
3712
3713 -- Funci�n: niceindices (<expr>)
3714     Cambia las etiquetas de los �ndices de sumas y productos de <expr>.
3715     La funci�n 'niceindices' trata de cambiar cada �ndice al valor de
3716     'niceindicespref[1]', a menos que esa etiqueta aparezca ya en el
3717     sumando o factor, en cuyo caso 'niceindices' realiza intentos con
3718     los siguientes elementos de 'niceindicespref', hasta que encuentre
3719     una variable que que no est� en uso.  Si todas las variables de la
3720     lista han sido ya revisadas, se formar�n nuevos �nices a�adiendo
3721     n�meros enteros al valor de 'niceindicespref[1]', como 'i0', 'i1',
3722     'i2', ....
3723
3724     La funci�n 'niceindices' eval�a sus argumentos y devuelve una
3725     expresi�n.
3726
3727     Ejemplo:
3728
3729          (%i1) niceindicespref;
3730          (%o1)                  [i, j, k, l, m, n]
3731          (%i2) product (sum (f (foo + i*j*bar), foo, 1, inf), bar, 1, inf);
3732                           inf    inf
3733                          /===\   ====
3734                           ! !    \
3735          (%o2)            ! !     >      f(bar i j + foo)
3736                           ! !    /
3737                          bar = 1 ====
3738                                  foo = 1
3739          (%i3) niceindices (%);
3740                               inf  inf
3741                              /===\ ====
3742                               ! !  \
3743          (%o3)                ! !   >    f(i j l + k)
3744                               ! !  /
3745                              l = 1 ====
3746                                    k = 1
3747
3748 -- Variable opcional: niceindicespref
3749     Valor por defecto: '[i, j, k, l, m, n]'
3750
3751     La variable 'niceindicespref' es la lista de la que la funci�n
3752     'niceindices' va tomando nombres de etiquetas para �ndices de
3753     sumatorios y productos.
3754
3755     En 'niceindicespref' se guardan normalmente nombres de variables.
3756
3757     Ejemplo:
3758
3759          (%i1) niceindicespref: [p, q, r, s, t, u]$
3760          (%i2) product (sum (f (foo + i*j*bar), foo, 1, inf), bar, 1, inf);
3761                           inf    inf
3762                          /===\   ====
3763                           ! !    \
3764          (%o2)            ! !     >      f(bar i j + foo)
3765                           ! !    /
3766                          bar = 1 ====
3767                                  foo = 1
3768          (%i3) niceindices (%);
3769                               inf  inf
3770                              /===\ ====
3771                               ! !  \
3772          (%o3)                ! !   >    f(i j q + p)
3773                               ! !  /
3774                              q = 1 ====
3775                                    p = 1
3776
3777 -- Funci�n: nusum (<expr>, <x>, <i_0>, <i_1>)
3778     Calcula la suma hipergeom�trica indefinida de <expr> con respecto a
3779     la variable <x> utilizando una procedimiento de decisi�n debido a
3780     R.W. Gosper.  La expresi�n <expr> y el resultado deben poder ser
3781     escritos como productos de potencias enteras, factoriales,
3782     coeficientes binomiales y funciones racionales.
3783
3784     Los t�rminos suma "definida" e "indefinida" se usan de forma
3785     an�loga a integraci�n "definida" e "indefinida".  La suma
3786     indefinida significa dar un resultado simb�lico.
3787
3788     Las funciones 'nusum' y 'unsum' disponen de cierta informaci�n
3789     sobre sumas y diferencias de productos finitos.  V�ase tambi�n
3790     'unsum'.
3791
3792     Ejemplos:
3793
3794          (%i1) nusum (n*n!, n, 0, n);
3795
3796          Dependent equations eliminated:  (1)
3797          (%o1)                     (n + 1)! - 1
3798          (%i2) nusum (n^4*4^n/binomial(2*n,n), n, 0, n);
3799                               4        3       2              n
3800                2 (n + 1) (63 n  + 112 n  + 18 n  - 22 n + 3) 4      2
3801          (%o2) ------------------------------------------------ - ------
3802                              693 binomial(2 n, n)                 3 11 7
3803          (%i3) unsum (%, n);
3804                                        4  n
3805                                       n  4
3806          (%o3)                   ----------------
3807                                  binomial(2 n, n)
3808          (%i4) unsum (prod (i^2, i, 1, n), n);
3809                              n - 1
3810                              /===\
3811                               ! !   2
3812          (%o4)              ( ! !  i ) (n - 1) (n + 1)
3813                               ! !
3814                              i = 1
3815          (%i5) nusum (%, n, 1, n);
3816
3817          Dependent equations eliminated:  (2 3)
3818                                      n
3819                                    /===\
3820                                     ! !   2
3821          (%o5)                      ! !  i  - 1
3822                                     ! !
3823                                    i = 1
3824
3825 -- Funci�n: pade (<taylor_series>, <numer_deg_bound>,
3826          <denom_deg_bound>)
3827     Devuelve la lista de todas las funciones racionales que tienen el
3828     desarrollo de Taylor dado, en las que la suma de los grados del
3829     numerador y denominador es menor o igual que el nivel de
3830     truncamiento de la serie de potencias.
3831
3832     La expresi�n <taylor_series> es una serie de Taylor univariante.
3833     Los argumentos <numer_deg_bound> y <denom_deg_bound> son enteros
3834     positivos que indican las cotas para numerador y denominador.
3835
3836     La expresi�n <taylor_series> tambi�n puede ser una serie de
3837     Laurent, y las cotas de los grados pueden ser 'inf'.  El grado
3838     total se define como '<numer_deg_bound> + <denom_deg_bound>'.  La
3839     longitud de una serie de potencias se define como '"truncation
3840     level" + 1 - min(0, "order of series")'.
3841
3842          (%i1) taylor (1 + x + x^2 + x^3, x, 0, 3);
3843                                        2    3
3844          (%o1)/T/             1 + x + x  + x  + . . .
3845          (%i2) pade (%, 1, 1);
3846                                           1
3847          (%o2)                       [- -----]
3848                                         x - 1
3849          (%i3) t: taylor(-(83787*x^10 - 45552*x^9 - 187296*x^8
3850                             + 387072*x^7 + 86016*x^6 - 1507328*x^5
3851                             + 1966080*x^4 + 4194304*x^3 - 25165824*x^2
3852                             + 67108864*x - 134217728)
3853                 /134217728, x, 0, 10);
3854                              2    3       4       5       6        7
3855                       x   3 x    x    15 x    23 x    21 x    189 x
3856          (%o3)/T/ 1 - - + ---- - -- - ----- + ----- - ----- - ------
3857                       2    16    32   1024    2048    32768   65536
3858
3859                                            8         9          10
3860                                      5853 x    2847 x    83787 x
3861                                    + ------- + ------- - --------- + . . .
3862                                      4194304   8388608   134217728
3863          (%i4) pade (t, 4, 4);
3864          (%o4)                          []
3865
3866     No hay ninguna funci�n racional de grado 4 en numerador y
3867     denominador con este desarrollo en serie de potencias.  Es
3868     necesario dar un n�mero de grados al numerador y denominador cuya
3869     suma sea al menos el grado del desarrollo de la serie, a fin de
3870     disponer de un n�mero suficiente de coeficientes desconocidos para
3871     calcular.
3872
3873          (%i5) pade (t, 5, 5);
3874                               5                4                 3
3875          (%o5) [- (520256329 x  - 96719020632 x  - 489651410240 x
3876
3877                            2
3878           - 1619100813312 x  - 2176885157888 x - 2386516803584)
3879
3880                         5                 4                  3
3881          /(47041365435 x  + 381702613848 x  + 1360678489152 x
3882
3883                            2
3884           + 2856700692480 x  + 3370143559680 x + 2386516803584)]
3885
3886 -- Funci�n: powerseries (<expr>, <x>, <a>)
3887     Devuelve la forma general del desarrollo en serie de potencias de
3888     <expr> para la variable <x> alrededor del punto <a> (que puede ser
3889     'inf', de infinito):
3890                     inf
3891                     ====
3892                     \               n
3893                      >    b  (x - a)
3894                     /      n
3895                     ====
3896                     n = 0
3897
3898     Si 'powerseries' no es capaz de desarrollar <expr>, la funci�n
3899     'taylor' puede calcular los primeros t�rminos de la serie.
3900
3901     Si 'verbose' vale 'true', 'powerseries' va mostrando mensajes
3902     mientras progresa el c�lculo.
3903
3904          (%i1) verbose: true$
3905          (%i2) powerseries (log(sin(x)/x), x, 0);
3906          can't expand
3907                                           log(sin(x))
3908          so we'll try again after applying the rule:
3909                                                  d
3910                                                / -- (sin(x))
3911                                                [ dx
3912                                  log(sin(x)) = i ----------- dx
3913                                                ]   sin(x)
3914                                                /
3915          in the first simplification we have returned:
3916                                       /
3917                                       [
3918                                       i cot(x) dx - log(x)
3919                                       ]
3920                                       /
3921                              inf
3922                              ====        i1  2 i1             2 i1
3923                              \      (- 1)   2     bern(2 i1) x
3924                               >     ------------------------------
3925                              /                i1 (2 i1)!
3926                              ====
3927                              i1 = 1
3928          (%o2)                -------------------------------------
3929                                                2
3930
3931 -- Variable opcional: psexpand
3932     Valor por defecto: 'false'
3933
3934     Si 'psexpand' vale 'true', toda expresi'on racional se muestra
3935     completamente expandida.  La variable 'ratexpand' tiene el mismo
3936     efecto.
3937
3938     Si 'psexpand' vale 'false', las expresines multivariantes se
3939     presentan tal como lo hace el paquete de funciones racionales.
3940
3941     Si 'psexpand' vale 'multi', los t�rminos de igual grado son
3942     agrupados.
3943
3944 -- Funci�n: revert (<expr>, <x>)
3945 -- Funci�n: revert2 (<expr>, <x>, <n>)
3946
3947     Estas funciones devuelven el rec�proco de <expr> en forma de
3948     desarrollo de Taylor alrededor de cero respecto de la variable <x>.
3949     La funci�n 'revert' devuelve un polinomio de grado igual a la mayor
3950     potencia en <expr>.  La funci�n 'revert2' devuelve un polinomio de
3951     grado <n>, el cual puede ser mayor, igual o menor que el grado de
3952     <expr>.
3953
3954     Para utilizar estas funciones es necesario cargarlas en memoria
3955     mediante 'load ("revert")'.
3956
3957     Ejemplos:
3958
3959          (%i1) load ("revert")$
3960          (%i2) t: taylor (exp(x) - 1, x, 0, 6);
3961                             2    3    4    5     6
3962                            x    x    x    x     x
3963          (%o2)/T/      x + -- + -- + -- + --- + --- + . . .
3964                            2    6    24   120   720
3965          (%i3) revert (t, x);
3966                         6       5       4       3       2
3967                     10 x  - 12 x  + 15 x  - 20 x  + 30 x  - 60 x
3968          (%o3)/R/ - --------------------------------------------
3969                                          60
3970          (%i4) ratexpand (%);
3971                               6    5    4    3    2
3972                              x    x    x    x    x
3973          (%o4)             - -- + -- - -- + -- - -- + x
3974                              6    5    4    3    2
3975          (%i5) taylor (log(x+1), x, 0, 6);
3976                              2    3    4    5    6
3977                             x    x    x    x    x
3978          (%o5)/T/       x - -- + -- - -- + -- - -- + . . .
3979                             2    3    4    5    6
3980          (%i6) ratsimp (revert (t, x) - taylor (log(x+1), x, 0, 6));
3981          (%o6)                           0
3982          (%i7) revert2 (t, x, 4);
3983                                    4    3    2
3984                                   x    x    x
3985          (%o7)                  - -- + -- - -- + x
3986                                   4    3    2
3987
3988 -- Funci�n: taylor (<expr>, <x>, <a>, <n>)
3989 -- Funci�n: taylor (<expr>, [<x_1>, <x_2>, ...], <a>, <n>)
3990 -- Funci�n: taylor (<expr>, [<x>, <a>, <n>, 'asymp])
3991 -- Funci�n: taylor (<expr>, [<x_1>, <x_2>, ...], [<a_1>, <a_2>, ...],
3992          [<n_1>, <n_2>, ...])
3993 -- Funci�n: taylor (<expr>, [<x_1>, <a_1>, <n_1>], [<x_2>, <a_2>,
3994          <n_2>], ...)
3995
3996     La llamada 'taylor (<expr>, <x>, <a>, <n>)' expande la expresi�n
3997     <expr> en un desarrollo de Taylor o de Laurent respecto de la
3998     variable <x> alrededor del punto <a>, con t�rminos hasta '(<x> -
3999     <a>)^<n>'.
4000
4001     Si <expr> es de la forma '<f>(<x>)/<g>(<x>)' y '<g>(<x>)' no tiene
4002     t�rminos hasta de grado <n>, entonces 'taylor' intenta expandir
4003     '<g>(<x>)' hasta el grado '2 <n>'.  Si a�n as� no hay t�rminos no
4004     nulos, 'taylor' dobla el grado de la expansi�n de '<g>(<x>)' hasta
4005     que el grado de la expansi�n sea menor o igual que '<n>
4006     2^taylordepth'.
4007
4008     La llamada 'taylor (<expr>, [<x_1>, <x_2>, ...], <a>, <n>)'
4009     devuelve la serie en potencias truncada de grado <n> en todas las
4010     variables <x_1>, <x_2>, ...  alrededor del punto '(<a>, <a>, ...)'.
4011
4012     La llamada 'taylor (<expr>, [<x_1>, <a_1>, <n_1>], [<x_2>, <a_2>,
4013     <n_2>], ...)' devuelve la serie en potencias truncada en las
4014     variables <x_1>, <x_2>, ...  alrededor del punto '(<a_1>, <a_2>,
4015     ...)'; el truncamiento se realiza, respectivamente, en los grados
4016     <n_1>, <n_2>, ....
4017
4018     La llamada 'taylor (<expr>, [<x_1>, <x_2>, ...], [<a_1>, <a_2>,
4019     ...], [<n_1>, <n_2>, ...])' devuelve la serie en potencias truncada
4020     en las variables <x_1>, <x_2>, ...  alrededor del punto '(<a_1>,
4021     <a_2>, ...)', el truncamiento se realiza, respectivamente, en los
4022     grados <n_1>, <n_2>, ....
4023
4024     La llamada 'taylor (<expr>, [<x>, <a>, <n>, 'asymp])' devuelve el
4025     desarrollo de <expr> en potencias negativas de '<x> - <a>'.  El
4026     t�rmino de mayor orden es '(<x> - <a>)^<-n>'.
4027
4028     Si 'maxtayorder' vale 'true', entonces durante la manipulaci�n
4029     algebraica de las series (truncadas) de Taylor, la funci�n 'taylor'
4030     intenta mantener tantos t�rminos correctos como sea posible.
4031
4032     Si 'psexpand' vale 'true', una expresi�n racional desarrollada se
4033     muestra completamente expandida.  La variable 'ratexpand' tiene el
4034     mismo efecto.  Si 'psexpand' vale 'false', una expresi�n
4035     multivariante se mostrar� tal como lo hace el paquete de funciones
4036     racionales.  Si 'psexpand' vale 'multi', los t�rminos del mismo
4037     grado son agrupados.
4038
4039     V�ase tambi�n la variable 'taylor_logexpand' para el control del
4040     desarrollo.
4041
4042     Ejemplos:
4043
4044          (%i1) taylor (sqrt (sin(x) + a*x + 1), x, 0, 3);
4045                                     2             2
4046                       (a + 1) x   (a  + 2 a + 1) x
4047          (%o1)/T/ 1 + --------- - -----------------
4048                           2               8
4049
4050                                             3      2             3
4051                                         (3 a  + 9 a  + 9 a - 1) x
4052                                       + -------------------------- + . . .
4053                                                     48
4054          (%i2) %^2;
4055                                              3
4056                                             x
4057          (%o2)/T/           1 + (a + 1) x - -- + . . .
4058                                             6
4059          (%i3) taylor (sqrt (x + 1), x, 0, 5);
4060                                 2    3      4      5
4061                            x   x    x    5 x    7 x
4062          (%o3)/T/      1 + - - -- + -- - ---- + ---- + . . .
4063                            2   8    16   128    256
4064          (%i4) %^2;
4065          (%o4)/T/                  1 + x + . . .
4066          (%i5) product ((1 + x^i)^2.5, i, 1, inf)/(1 + x^2);
4067                                   inf
4068                                  /===\
4069                                   ! !    i     2.5
4070                                   ! !  (x  + 1)
4071                                   ! !
4072                                  i = 1
4073          (%o5)                   -----------------
4074                                        2
4075                                       x  + 1
4076          (%i6) ev (taylor(%, x,  0, 3), keepfloat);
4077                                         2           3
4078          (%o6)/T/    1 + 2.5 x + 3.375 x  + 6.5625 x  + . . .
4079          (%i7) taylor (1/log (x + 1), x, 0, 3);
4080                                         2       3
4081                           1   1   x    x    19 x
4082          (%o7)/T/         - + - - -- + -- - ----- + . . .
4083                           x   2   12   24    720
4084          (%i8) taylor (cos(x) - sec(x), x, 0, 5);
4085                                          4
4086                                     2   x
4087          (%o8)/T/                - x  - -- + . . .
4088                                         6
4089          (%i9) taylor ((cos(x) - sec(x))^3, x, 0, 5);
4090          (%o9)/T/                    0 + . . .
4091          (%i10) taylor (1/(cos(x) - sec(x))^3, x, 0, 5);
4092                                                         2          4
4093                      1     1       11      347    6767 x    15377 x
4094          (%o10)/T/ - -- + ---- + ------ - ----- - ------- - --------
4095                       6      4        2   15120   604800    7983360
4096                      x    2 x    120 x
4097
4098                                                                    + . . .
4099          (%i11) taylor (sqrt (1 - k^2*sin(x)^2), x, 0, 6);
4100                         2  2       4      2   4
4101                        k  x    (3 k  - 4 k ) x
4102          (%o11)/T/ 1 - ----- - ----------------
4103                          2            24
4104
4105                                              6       4       2   6
4106                                         (45 k  - 60 k  + 16 k ) x
4107                                       - -------------------------- + . . .
4108                                                    720
4109          (%i12) taylor ((x + 1)^n, x, 0, 4);
4110                                2       2     3      2         3
4111                              (n  - n) x    (n  - 3 n  + 2 n) x
4112          (%o12)/T/ 1 + n x + ----------- + --------------------
4113                                   2                 6
4114
4115                                         4      3       2         4
4116                                       (n  - 6 n  + 11 n  - 6 n) x
4117                                     + ---------------------------- + . . .
4118                                                    24
4119          (%i13) taylor (sin (y + x), x, 0, 3, y, 0, 3);
4120                         3                 2
4121                        y                 y
4122          (%o13)/T/ y - -- + . . . + (1 - -- + . . .) x
4123                        6                 2
4124
4125                              3                       2
4126                         y   y            2      1   y            3
4127                    + (- - + -- + . . .) x  + (- - + -- + . . .) x  + . . .
4128                         2   12                  6   12
4129          (%i14) taylor (sin (y + x), [x, y], 0, 3);
4130                               3        2      2      3
4131                              x  + 3 y x  + 3 y  x + y
4132          (%o14)/T/   y + x - ------------------------- + . . .
4133                                          6
4134          (%i15) taylor (1/sin (y + x), x, 0, 3, y, 0, 3);
4135                    1   y              1    1               1            2
4136          (%o15)/T/ - + - + . . . + (- -- + - + . . .) x + (-- + . . .) x
4137                    y   6               2   6                3
4138                                       y                    y
4139
4140                                                     1            3
4141                                                + (- -- + . . .) x  + . . .
4142                                                      4
4143                                                     y
4144          (%i16) taylor (1/sin (y + x), [x, y], 0, 3);
4145                                       3         2       2        3
4146                      1     x + y   7 x  + 21 y x  + 21 y  x + 7 y
4147          (%o16)/T/ ----- + ----- + ------------------------------- + . . .
4148                    x + y     6                   360
4149
4150 -- Variable opcional: taylordepth
4151     Valor por defecto: 3
4152
4153     Si todav�a no hay t�rminos no nulos, la funci�n 'taylor' dobla el
4154     grado del desarrollo de '<g>(<x>)' tantas veces como sea necesario
4155     para que el grado del desarrollo sea menor o igual que '<n>
4156     2^taylordepth'.
4157
4158 -- Funci�n: taylorinfo (<expr>)
4159     Devuelve informaci�n sobre el desarrollo de Taylor <expr>.  El
4160     valor devuelto por esta funci�n es una lista de listas.  Cada lista
4161     contiene el nombre de una variable, el punto de expansi�n y el
4162     grado del desarrollo.
4163
4164     La funci�n 'taylorinfo' devuelve 'false' si <expr> no es un
4165     desarrollo de Taylor.
4166
4167     Ejemplo:
4168
4169          (%i1) taylor ((1 - y^2)/(1 - x), x, 0, 3, [y, a, inf]);
4170                            2                       2
4171          (%o1)/T/ - (y - a)  - 2 a (y - a) + (1 - a )
4172
4173                   2                        2
4174           + (1 - a  - 2 a (y - a) - (y - a) ) x
4175
4176                   2                        2   2
4177           + (1 - a  - 2 a (y - a) - (y - a) ) x
4178
4179                   2                        2   3
4180           + (1 - a  - 2 a (y - a) - (y - a) ) x  + . . .
4181          (%i2) taylorinfo(%);
4182          (%o2)               [[y, a, inf], [x, 0, 3]]
4183
4184 -- Funci�n: taylorp (<expr>)
4185     Devuelve 'true' si <expr> es un desarrollo de Taylor y 'false' en
4186     caso contrario.
4187
4188 -- Variable opcional: taylor_logexpand
4189     Valor por defecto: 'true'
4190
4191     La variable 'taylor_logexpand' controla los desarrollos de
4192     logaritmos en la funci�n 'taylor'.
4193
4194     Si 'taylor_logexpand' vale 'true', todos los logaritmos se expanden
4195     completamente de manera que algunos problemas que se plantean
4196     debido a ciertas identidades logar�tmicas no interfieran con el
4197     proceso del c�lculo del desarrollo de Taylor.  Sin embargo, este
4198     proceder no es del todo correcto.
4199
4200 -- Variable opcional: taylor_order_coefficients
4201     Valor por defecto: 'true'
4202
4203     La variable 'taylor_order_coefficients' controla la ordenaci�n de
4204     los coeficientes en un desarrollo de Taylor.
4205
4206     Si 'taylor_order_coefficients' vale 'true', los coeficientes del
4207     desarrollo de Taylor se ordenan de la forma can�nica.
4208
4209 -- Funci�n: taylor_simplifier (<expr>)
4210     Simplifica los coeficientes de la serie de potencias <expr>.  Esta
4211     funci�n es llamada desde la funci�n 'taylor'.
4212
4213 -- Variable opcional: taylor_truncate_polynomials
4214     Valor por defecto: 'true'
4215
4216     Si 'taylor_truncate_polynomials' vale 'true', los polinomios quedan
4217     truncados en base a los niveles de truncamiento de entrada.
4218
4219     En otro caso, aquellos polinomios que se utilicen como entrada a la
4220     funci�n 'taylor' se consideran que tienen precisi�n infinita.
4221
4222 -- Funci�n: taytorat (<expr>)
4223     Convierte <expr> del formato de 'taylor' al formato CRE (Canonical
4224     Rational Expression).  El efecto es el mismo que haciendo 'rat
4225     (ratdisrep (<expr>))', pero m�s r�pido.
4226
4227 -- Funci�n: trunc (<expr>)
4228     Devuelve la representaci�n interna de la expresi�n <expr> de tal
4229     forma como si sus sumas fuesen una serie truncada de Taylor.  La
4230     expresi�n <expr> no sufre ninguna otra modificaci�n.
4231
4232     Ejemplo:
4233
4234          (%i1) expr: x^2 + x + 1;
4235                                      2
4236          (%o1)                      x  + x + 1
4237          (%i2) trunc (expr);
4238                                          2
4239          (%o2)                  1 + x + x  + . . .
4240          (%i3) is (expr = trunc (expr));
4241          (%o3)                         true
4242
4243 -- Funci�n: unsum (<f>, <n>)
4244     Devuelve la diferencia '<f>(<n>) - <f>(<n> - 1)'.  En cierto
4245     sentido 'unsum' es la inversa de 'sum'.
4246
4247     V�ase tambi�n 'nusum'.
4248
4249     Ejemplos:
4250
4251          (%i1) g(p) := p*4^n/binomial(2*n,n);
4252                                               n
4253                                            p 4
4254          (%o1)               g(p) := ----------------
4255                                      binomial(2 n, n)
4256          (%i2) g(n^4);
4257                                        4  n
4258                                       n  4
4259          (%o2)                   ----------------
4260                                  binomial(2 n, n)
4261          (%i3) nusum (%, n, 0, n);
4262                               4        3       2              n
4263                2 (n + 1) (63 n  + 112 n  + 18 n  - 22 n + 3) 4      2
4264          (%o3) ------------------------------------------------ - ------
4265                              693 binomial(2 n, n)                 3 11 7
4266          (%i4) unsum (%, n);
4267                                        4  n
4268                                       n  4
4269          (%o4)                   ----------------
4270                                  binomial(2 n, n)
4271
4272 -- Variable opcional: verbose
4273     Valor por defecto: 'false'
4274
4275     Si 'verbose' vale 'true', la funci�n 'powerseries' va imprimiendo
4276     mensajes durante su ejecuci�n.
4277
4278
4279File: maxima.info,  Node: Introducci�n a las series de Fourier,  Next: Funciones y variables para series de Fourier,  Prev: Funciones y variables para las series,  Up: Sumas productos y series
4280
428128.4 Introducci�n a las series de Fourier
4282=========================================
4283
4284El paquete 'fourie' contiene funciones para el c�lculo simb�lico de
4285series de Fourier.  Hay funciones en el paquete 'fourie' para calcular
4286los coeficientes y para manipular las expresiones.
4287
4288
4289File: maxima.info,  Node: Funciones y variables para series de Fourier,  Next: Funciones y variables para series de Poisson,  Prev: Introducci�n a las series de Fourier,  Up: Sumas productos y series
4290
429128.5 Funciones y variables para series de Fourier
4292=================================================
4293
4294 -- Funci�n: equalp (<x>, <y>)
4295     Devuelve 'true' si 'equal (<x>, <y>)', en otro caso devuelve
4296     'false'.  No devuelve el mensaje de error que se obtiene de 'equal
4297     (x, y)' en un caso como �ste.
4298
4299 -- Funci�n: remfun (<f>, <expr>)
4300 -- Funci�n: remfun (<f>, <expr>, <x>)
4301     La llamada 'remfun (<f>, <expr>)' reemplaza todas las
4302     subexpresiones '<f> (<arg>)' por <arg> en <expr>.
4303
4304     La llamada 'remfun (<f>, <expr>, <x>)' reemplaza todas las
4305     subexpresiones '<f> (<arg>)' por <arg> en <expr> s�lo si <arg>
4306     contiene a la variable <x>.
4307
4308 -- Funci�n: funp (<f>, <expr>)
4309 -- Funci�n: funp (<f>, <expr>, <x>)
4310     La llamada 'funp (<f>, <expr>)' devuelve 'true' si <expr> contiene
4311     la funci�n <f>.
4312
4313     La llamada 'funp (<f>, <expr>, <x>)' devuelve 'true' si <expr>
4314     contiene la funci�n <f> y la variable <x> est� presente en el
4315     argumento de alguna de las presencias de <f>.
4316
4317 -- Funci�n: absint (<f>, <x>, <halfplane>)
4318 -- Funci�n: absint (<f>, <x>)
4319 -- Funci�n: absint (<f>, <x>, <a>, <b>)
4320     La llamada 'absint (<f>, <x>, <halfplane>)' devuelve la integral
4321     indefinida de <f> con respecto a <x> en el semiplano dado ('pos',
4322     'neg' o 'both').  La funci�n <f> puede contener expresiones de la
4323     forma 'abs (x)', 'abs (sin (x))', 'abs (a) * exp (-abs (b) * abs
4324     (x))'.
4325
4326     La llamada 'absint (<f>, <x>)' equivale a 'absint (<f>, <x>, pos)'.
4327
4328     La llamada 'absint (<f>, <x>, <a>, <b>)' devuelve la integral
4329     definida de <f> con respecto a <x> de <a> a <b>.
4330
4331 -- Funci�n: fourier (<f>, <x>, <p>)
4332     Devuelve una lista con los coeficientes de Fourier de '<f>(<x>)'
4333     definida en el intervalo '[-p, p]'.
4334
4335 -- Funci�n: foursimp (<l>)
4336     Simplifica 'sin (n %pi)' a 0 si 'sinnpiflag' vale 'true' y 'cos (n
4337     %pi)' a '(-1)^n' si 'cosnpiflag' vale 'true'.
4338
4339 -- Variable opcional: sinnpiflag
4340     Valor por defecto: 'true'
4341
4342     V�ase 'foursimp'.
4343
4344 -- Variable opcional: cosnpiflag
4345     Valor por defecto: 'true'
4346
4347     V�ase 'foursimp'.
4348
4349 -- Funci�n: fourexpand (<l>, <x>, <p>, <limit>)
4350     Calcula y devuelve la serie de Fourier a partir de la lista de los
4351     coeficientes de Fourier <l> hasta el t�rmino <limit> (<limit> puede
4352     ser 'inf').  Los argumentos <x> y <p> tienen el mismo significado
4353     que en 'fourier'.
4354
4355 -- Funci�n: fourcos (<f>, <x>, <p>)
4356     Devuelve los coeficientes de los cosenos de Fourier de '<f>(<x>)'
4357     definida en '[0, <p>]'.
4358
4359 -- Funci�n: foursin (<f>, <x>, <p>)
4360     Devuelve los coeficientes de los senos de Fourier de '<f>(<x>)'
4361     definida en '[0, <p>]'.
4362
4363 -- Funci�n: totalfourier (<f>, <x>, <p>)
4364     Devuelve 'fourexpand (foursimp (fourier (<f>, <x>, <p>)), <x>, <p>,
4365     'inf)'.
4366
4367 -- Funci�n: fourint (<f>, <x>)
4368     Calcula y devuelve la lista de los coeficientes integrales de
4369     Fourier de '<f>(<x>)' definida en '[minf, inf]'.
4370
4371 -- Funci�n: fourintcos (<f>, <x>)
4372     Devuelve los coeficientes integrales de los cosenos '<f>(<x>)' en
4373     '[0, inf]'.
4374
4375 -- Funci�n: fourintsin (<f>, <x>)
4376     Devuelve los coeficientes integrales de los senos '<f>(<x>)' en
4377     '[0, inf]'.
4378
4379
4380File: maxima.info,  Node: Funciones y variables para series de Poisson,  Prev: Funciones y variables para series de Fourier,  Up: Sumas productos y series
4381
438228.6 Funciones y variables para series de Poisson
4383=================================================
4384
4385 -- Funci�n: intopois (<a>)
4386     Convierte <a> en un codificado Poisson.
4387
4388 -- Funci�n: outofpois (<a>)
4389     Convierte <a> desde codificado de Poisson a una representaci�n
4390     general.  Si <a> no est� en forma de Poisson, 'outofpois' hace la
4391     conversi�n, siendo entonces el valor retornado 'outofpois (intopois
4392     (<a>))'.  Esta funci�n es un simplificador can�nico para sumas de
4393     potencias de senos y cosenos.
4394
4395 -- Funci�n: poisdiff (<a>, <b>)
4396     Deriva <a> con respecto a <b>.  El argumento <b> debe aparecer s�lo
4397     en los argumentos trigonom�tricos o s�lo en los coeficientes.
4398
4399 -- Funci�n: poisexpt (<a>, <b>)
4400     Id�ntico a 'intopois (<a>^<b>)'.  El argumento <b> debe ser un
4401     entero positivo.
4402
4403 -- Funci�n: poisint (<a>, <b>)
4404     Integra en un sentido restringido similar a 'poisdiff'.
4405
4406 -- Variable optativa: poislim
4407     Valor por defecto: 5
4408
4409     La variable 'poislim' determina el dominio de los coeficientes en
4410     los argumentos de las funciones trigonom�tricas.  El valor por
4411     defecto 5 corresponde al intervalo [-2^(5-1)+1,2^(5-1)], o
4412     [-15,16], pero puede reasignarse para [-2^(n-1)+1, 2^(n-1)].
4413
4414 -- Funci�n: poismap (<series>, <sinfn>, <cosfn>)
4415     Aplica las funciones <sinfn> a los t�rminos sinusoidales y las
4416     funciones <cosfn> a los cosenoidales de la serie de Poisson dada.
4417     Tanto <sinfn> como <cosfn> son funciones de dos argumentos, los
4418     cuales son un coeficiente y una parte trigonom�trica de un t�rmino
4419     de la serie.
4420
4421 -- Funci�n: poisplus (<a>, <b>)
4422     Id�ntico a 'intopois (a + b)'.
4423
4424 -- Funci�n: poissimp (<a>)
4425     Convierte <a> en una serie de Poisson para <a> en su representaci�n
4426     general.
4427
4428 -- S�mbolo especial: poisson
4429     El s�mbolo '/P/' sigue a la etiqueta de las l�neas que contienen
4430     expresiones que son series de Poisson.
4431
4432 -- Funci�n: poissubst (<a>, <b>, <c>)
4433     Sustituye <b> por <a> en <c>, donde <c> es una serie de Poisson.
4434
4435     (1) Si <b> es una de las variables <u>, <v>, <w>, <x>, <y> o <z>,
4436     entonces <a> debe ser una expresi�n lineal en esas variables (por
4437     ejemplo, '6*u + 4*v').
4438
4439     (2) Si <b> no es ninguna de esas variables, entonces <a> no puede
4440     contener tampoco a ninguna de ellas, ni senos, ni cosenos.
4441
4442 -- Funci�n: poistimes (<a>, <b>)
4443     Id�ntico a 'intopois (<a>*<b>)'.
4444
4445 -- Funci�n: printpois (<a>)
4446     Presenta una serie de Poisson en un formato legible.  Conjuntamente
4447     con 'outofpois', si es necesario convertir� <a> primero en una
4448     codificaci�n de Poisson.
4449
4450
4451File: maxima.info,  Node: Teor�a de N�meros,  Next: Simetr�as,  Prev: Sumas productos y series,  Up: Top
4452
445329 Teor�a de N�meros
4454********************
4455
4456* Menu:
4457
4458* Funciones y variables para teor�a de n�meros::
4459
4460
4461File: maxima.info,  Node: Funciones y variables para teor�a de n�meros,  Prev: Teor�a de N�meros,  Up: Teor�a de N�meros
4462
446329.1 Funciones y variables para teor�a de n�meros
4464=================================================
4465
4466 -- Funci�n: bern (<n>)
4467     Devuelve el <n>-�simo n�mero de Bernoulli del entero <n>.  Los
4468     n�meros de Bernoulli iguales a cero son suprimidos si 'zerobern'
4469     vale 'false'.
4470
4471     V�ase tambi�n 'burn'.
4472
4473          (%i1) zerobern: true$
4474          (%i2) map (bern, [0, 1, 2, 3, 4, 5, 6, 7, 8]);
4475                                1  1       1      1        1
4476          (%o2)           [1, - -, -, 0, - --, 0, --, 0, - --]
4477                                2  6       30     42       30
4478          (%i3) zerobern: false$
4479          (%i4) map (bern, [0, 1, 2, 3, 4, 5, 6, 7, 8]);
4480                                1  1    1   1     1   5     691   7
4481          (%o4)           [1, - -, -, - --, --, - --, --, - ----, -]
4482                                2  6    30  42    30  66    2730  6
4483
4484 -- Funci�n: bernpoly (<x>, <n>)
4485     Devuelve el <n>-�simo polinomio de Bernoulli de variable <x>.
4486
4487 -- Funci�n: bfzeta (<s>, <n>)
4488     Devuelve la funci�n zeta de Riemann para el argumento <s>.  El
4489     valor que devuelve es del tipo "big float" (bfloat) y <n> es su
4490     n�mero de d�gitos.
4491
4492     Es necesario cargar en memoria esta funci�n haciendo 'load
4493     ("bffac")'.
4494
4495 -- Funci�n: bfhzeta (<s>, <h>, <n>)
4496     Devuelve la funci�n zeta de Hurwitz para los argumentos <s> y <h>.
4497     El valor que devuelve es del tipo "big float" (bfloat) y <n> es su
4498     n�mero de d�gitos.
4499
4500     La funci�n zeta de Hurwitz se define como
4501
4502                                  inf
4503                                  ====
4504                                  \        1
4505                   zeta (s,h)  =   >    --------
4506                                  /            s
4507                                  ====  (k + h)
4508                                  k = 0
4509
4510     Ejec�tese 'load (bffac)' antes de hacer uso de esta funci�n.
4511
4512 -- Funci�n: burn (<n>)
4513     Siendo <n> entero, Devuelve un n�mero racional que aproxima el
4514     <n>-�simo n�mero de Bernoulli.  La funci�n 'burn' aprovecha el
4515     hecho de que los n�meros de Bernoulli racionales se pueden
4516     aproximar con notable precisi�n gracias a
4517
4518                             n - 1  1 - 2 n
4519                        (- 1)      2        zeta(2 n) (2 n)!
4520               B(2 n) = ------------------------------------
4521                                          2 n
4522                                       %pi
4523
4524     La funci�n 'burn' puede ser m�s eficiente que 'bern' cuando <n> es
4525     un n�mero grande, ya que 'bern' calcula todos los n�meros de
4526     Bernoulli hasta el <n>-�simo.  Por el contrario, 'burn' hace uso de
4527     la aproximaci�n para enteros pares <n> > 255.  En caso de enteros
4528     impares y <n> <= 255, se hace uso de la funci�n 'bern'.
4529
4530     Para utilizar esta funci�n hay que cargarla antes en memoria
4531     escribiendo 'load ("bffac")'.  V�ase tambi�n 'bern'.
4532
4533 -- Funci�n: chinese ([<r_1>, ..., <r_n>], [<m_1>, ..., <m_n>])
4534
4535     Resulve el sistema de congruencias 'x = r_1 mod m_1', ..., 'x = r_n
4536     mod m_n'.  Los restos <r_n> pueden ser enteros arbitrarios,
4537     mientras que los m�dulos <m_n> deben ser positivos y primos dos a
4538     dos.
4539
4540          (%i1) mods : [1000, 1001, 1003, 1007];
4541          (%o1)                   [1000, 1001, 1003, 1007]
4542          (%i2) lreduce('gcd, mods);
4543          (%o2)                               1
4544          (%i3) x : random(apply("*", mods));
4545          (%o3)                         685124877004
4546          (%i4) rems : map(lambda([z], mod(x, z)), mods);
4547          (%o4)                       [4, 568, 54, 624]
4548          (%i5) chinese(rems, mods);
4549          (%o5)                         685124877004
4550          (%i6) chinese([1, 2], [3, n]);
4551          (%o6)                    chinese([1, 2], [3, n])
4552          (%i7) %, n = 4;
4553          (%o7)                              10
4554
4555 -- Funci�n: cf (<expr>)
4556
4557     Calcula aproximaciones con fracciones continuas.  <expr> es una
4558     expresi�n que contiene fracciones continuas, ra�ces cuadradas de
4559     enteros, y n�meros reales (enteros, racionales, decimales en coma
4560     flotante y decimales de precisi�n arbitraria).  'cf' calcula
4561     expansiones exactas de n�meros racionales, pero las expansiones de
4562     números decimales de coma flotante se truncan de acuerdo con el
4563     valor de 'ratepsilon', y la de los de decimales de precisi�n
4564     arbitraria (bigfloats) lo hacen respecto de '10^(-fpprec)'.
4565
4566     En las expresiones se pueden combinar operandos con operadores
4567     aritm�ticos.  Maxima no conoce operaciones con fracciones continuas
4568     m�s all� de la funci�n 'cf'.
4569
4570     La funci�n 'cf' eval�a sus argumentos despu�s de asignar a la
4571     variable 'listarith' el valor 'false', retornando una fracci�n
4572     continua en forma de lista.
4573
4574     Una fracci�n continua 'a + 1/(b + 1/(c + ...))' se representa como
4575     la lista '[a, b, c, ...]', donde los elementos 'a', 'b', 'c', ...
4576     se eval�an como enteros.  La expresi�n <expr> puede contener
4577     tambi�n 'sqrt (n)' donde 'n' es un entero; en tal caso, 'cf'
4578     devolver� tantos t�rminos de la fracci�n continua como indique el
4579     valor de la variable 'cflength' multiplicado por el per�odo.
4580
4581     Una fracci�n continua puede reducirse a un n�mero evaluando la
4582     representaci�n aritm�tica que devuelve 'cfdisrep'.  V�ase tambi�n
4583     'cfexpand', que es otra alternativa para evaluar fracciones
4584     continuas.
4585
4586     V�anse asimismo 'cfdisrep', 'cfexpand' y 'cflength'.
4587
4588     Ejemplos:
4589
4590        * La expresi�n <expr> contiene fracciones continuas y ra�ces
4591          cuadradas de enteros.
4592
4593               (%i1) cf ([5, 3, 1]*[11, 9, 7] + [3, 7]/[4, 3, 2]);
4594               (%o1)               [59, 17, 2, 1, 1, 1, 27]
4595               (%i2) cf ((3/17)*[1, -2, 5]/sqrt(11) + (8/13));
4596               (%o2)        [0, 1, 1, 1, 3, 2, 1, 4, 1, 9, 1, 9, 2]
4597
4598        * La variable 'cflength' controla cuantos per�odos de la
4599          fracci�n continua se calculan para n�meros irracionales
4600          algebraicos.
4601
4602               (%i1) cflength: 1$
4603               (%i2) cf ((1 + sqrt(5))/2);
4604               (%o2)                    [1, 1, 1, 1, 2]
4605               (%i3) cflength: 2$
4606               (%i4) cf ((1 + sqrt(5))/2);
4607               (%o4)               [1, 1, 1, 1, 1, 1, 1, 2]
4608               (%i5) cflength: 3$
4609               (%i6) cf ((1 + sqrt(5))/2);
4610               (%o6)           [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]
4611
4612        * Una fracci�n continua puede calcularse evaluando la
4613          representaci�n aritm�tica que devuelve 'cfdisrep'.
4614
4615               (%i1) cflength: 3$
4616               (%i2) cfdisrep (cf (sqrt (3)))$
4617               (%i3) ev (%, numer);
4618               (%o3)                   1.731707317073171
4619
4620        * Maxima no sabe sobre operaciones con fracciones continuas m�s
4621          de lo que aporta la funci�n 'cf'.
4622
4623               (%i1) cf ([1,1,1,1,1,2] * 3);
4624               (%o1)                     [4, 1, 5, 2]
4625               (%i2) cf ([1,1,1,1,1,2]) * 3;
4626               (%o2)                  [3, 3, 3, 3, 3, 6]
4627
4628 -- Funci�n: cfdisrep (<lista>)
4629     Construye y devuelve una expresi�n aritm�tica ordinaria de la forma
4630     'a + 1/(b + 1/(c + ...))' a partir de la representaci�n en formato
4631     lista de la fracci�n continua '[a, b, c, ...]'.
4632
4633          (%i1) cf ([1, 2, -3] + [1, -2, 1]);
4634          (%o1)                     [1, 1, 1, 2]
4635          (%i2) cfdisrep (%);
4636                                            1
4637          (%o2)                     1 + ---------
4638                                              1
4639                                        1 + -----
4640                                                1
4641                                            1 + -
4642                                                2
4643
4644 -- Funci�n: cfexpand (<x>)
4645     Devuelve la matriz con los numeradores y denominadores de la �ltima
4646     (columna 1) y pen�ltima (columna 2) convergentes de la fracci�n
4647     continua <x>.
4648
4649          (%i1) cf (rat (ev (%pi, numer)));
4650
4651          `rat' replaced 3.141592653589793 by 103993/33102 =3.141592653011902
4652          (%o1)                  [3, 7, 15, 1, 292]
4653          (%i2) cfexpand (%);
4654                                   [ 103993  355 ]
4655          (%o2)                    [             ]
4656                                   [ 33102   113 ]
4657          (%i3) %[1,1]/%[2,1], numer;
4658          (%o3)                   3.141592653011902
4659
4660 -- Variable opcional: cflength
4661     Valor por defecto: 1
4662
4663     La variable 'cflength' controla el n�mero de t�rminos de la
4664     fracci�n continua que devuelve la funci�n 'cf', que ser� 'cflength'
4665     multiplicado por el per�odo.  As�, el valor por defecto ser� el de
4666     un per�odo.
4667
4668          (%i1) cflength: 1$
4669          (%i2) cf ((1 + sqrt(5))/2);
4670          (%o2)                    [1, 1, 1, 1, 2]
4671          (%i3) cflength: 2$
4672          (%i4) cf ((1 + sqrt(5))/2);
4673          (%o4)               [1, 1, 1, 1, 1, 1, 1, 2]
4674          (%i5) cflength: 3$
4675          (%i6) cf ((1 + sqrt(5))/2);
4676          (%o6)           [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]
4677
4678 -- Funci�n: divsum (<n>, <k>)
4679 -- Funci�n: divsum (<n>)
4680
4681     La llamada 'divsum (<n>, <k>)' devuelve la suma de los divisores de
4682     <n> elevados a la <k>-�sima potencia.
4683
4684     La llamada 'divsum (<n>)' devuelve la suma de los divisores de <n>.
4685
4686          (%i1) divsum (12);
4687          (%o1)                          28
4688          (%i2) 1 + 2 + 3 + 4 + 6 + 12;
4689          (%o2)                          28
4690          (%i3) divsum (12, 2);
4691          (%o3)                          210
4692          (%i4) 1^2 + 2^2 + 3^2 + 4^2 + 6^2 + 12^2;
4693          (%o4)                          210
4694
4695 -- Funci�n: euler (<n>)
4696     Devuelve el <n>-�simo n�mero de Euler del entero no negativo <n>.
4697     Los n�mero de Euler iguales a cero se eliminan si 'zerobern' vale
4698     'false'.
4699
4700     Para la constante de Euler-Mascheroni, v�ase '%gamma'.
4701
4702          (%i1) zerobern: true$
4703          (%i2) map (euler, [0, 1, 2, 3, 4, 5, 6]);
4704          (%o2)               [1, 0, - 1, 0, 5, 0, - 61]
4705          (%i3) zerobern: false$
4706          (%i4) map (euler, [0, 1, 2, 3, 4, 5, 6]);
4707          (%o4)               [1, - 1, 5, - 61, 1385, - 50521, 2702765]
4708
4709 -- Variable opcional: factors_only
4710     Valor por defecto: 'false'
4711
4712     Controla el resultado devuelto por 'ifactors'.  El valor por
4713     defecto 'false' hace que 'ifactors' no d� informaci�n sobre las
4714     multiplicidades de los factores primos calculados.  Cuando
4715     'factors_only' vale 'true', 'ifactors' solo devuelve la lista de
4716     factores primos.
4717
4718     Para ejemplos, v�ase 'ifactors'.
4719
4720 -- Funci�n: fib (<n>)
4721     Devuelve el <n>-�simo n�mero de Fibonacci.  La llamada 'fib(0)'
4722     devuelve 0, 'fib(1)' devuelve 1 y 'fib (-<n>)' es igual a
4723     '(-1)^(<n> + 1) * fib(<n>)'.
4724
4725     Despu�s de llamar a 'fib', la variable 'prevfib' toma el valor 'fib
4726     (<n> - 1)', que es el n�mero de Fibonacci que precede al �ltimo
4727     calculado.
4728
4729          (%i1) map (fib, [-4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]);
4730          (%o1)           [- 3, 2, - 1, 1, 0, 1, 1, 2, 3, 5, 8, 13, 21]
4731
4732 -- Funci�n: fibtophi (<expr>)
4733     Expresa los n�meros de Fibonacci en <expr> en t�rminos de la raz�n
4734     �urea '%phi', que es '(1 + sqrt(5))/2', aproximadamente 1.61803399.
4735
4736     Ejemplos:
4737
4738          (%i1) fibtophi (fib (n));
4739                                     n             n
4740                                 %phi  - (1 - %phi)
4741          (%o1)                  -------------------
4742                                     2 %phi - 1
4743          (%i2) fib (n-1) + fib (n) - fib (n+1);
4744          (%o2)          - fib(n + 1) + fib(n) + fib(n - 1)
4745          (%i3) fibtophi (%);
4746                      n + 1             n + 1       n             n
4747                  %phi      - (1 - %phi)        %phi  - (1 - %phi)
4748          (%o3) - --------------------------- + -------------------
4749                          2 %phi - 1                2 %phi - 1
4750                                                    n - 1             n - 1
4751                                                %phi      - (1 - %phi)
4752                                              + ---------------------------
4753                                                        2 %phi - 1
4754          (%i4) ratsimp (%);
4755          (%o4)                           0
4756
4757 -- Funci�n: ifactors (<n>)
4758     Devuelve la factorizaci�n del entero positivo <n>.  Si
4759     'n=p1^e1..pk^nk' es la descomposici�n de <n> en n�meros primos,
4760     'ifactors' devuelve '[[p1, e1], ... , [pk, ek]]'.
4761
4762     Los m�todos de factorizaci�n se basan en divisiones tentativas con
4763     n�meros primos hasta 9973, en los m�todos rho y p-1 de Pollard y en
4764     curvas el�pticas.
4765
4766     La respuesta que se obtiene de 'ifactors' est� controlada por la
4767     variable opcional 'factors_only'.  El valor por defecto 'false'
4768     hace que 'ifactors' no d� informaci�n sobre las multiplicidades de
4769     los factores primos calculados.  Cuando 'factors_only' vale 'true',
4770     'ifactors' solo devuelve la lista de factores primos.
4771
4772          (%i1) ifactors(51575319651600);
4773          (%o1)     [[2, 4], [3, 2], [5, 2], [1583, 1], [9050207, 1]]
4774          (%i2) apply("*", map(lambda([u], u[1]^u[2]), %));
4775          (%o2)                        51575319651600
4776          (%i3) ifactors(51575319651600), factors_only : true;
4777          (%o3)                   [2, 3, 5, 1583, 9050207]
4778
4779 -- Funci�n: igcdex (<n>, <k>)
4780
4781     Devuelve la lista '[<a>, <b>, <u>]', donde <u> es el m�ximo com�n
4782     divisor de <n> y <k>, siendo <u> igual a '<a> <n> + <b> <k>'.  Los
4783     argumentos <n> y <k> deben ser enteros.
4784
4785     'igcdex' implementa el algoritmo de Euclides.  V�ase tambi�n
4786     'gcdex'.
4787
4788     La instrucci�n 'load(gcdex)' carga esta funci�n.
4789
4790     Ejemplos:
4791
4792          (%i1) load(gcdex)$
4793
4794          (%i2) igcdex(30,18);
4795          (%o2)                      [- 1, 2, 6]
4796          (%i3) igcdex(1526757668, 7835626735736);
4797          (%o3)            [845922341123, - 164826435, 4]
4798          (%i4) igcdex(fib(20), fib(21));
4799          (%o4)                   [4181, - 2584, 1]
4800
4801 -- Funci�n: inrt (<x>, <n>)
4802     Devuelve la ra�z entera <n>-�sima del valor absoluto de <x>.
4803
4804          (%i1) l: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]$
4805          (%i2) map (lambda ([a], inrt (10^a, 3)), l);
4806          (%o2) [2, 4, 10, 21, 46, 100, 215, 464, 1000, 2154, 4641, 10000]
4807
4808 -- Funci�n: inv_mod (<n>, <m>)
4809     Calcula el inverso de <n> m�dulo <m>.  La llamada 'inv_mod (n,m)'
4810     devuelve 'false' si <n> es un divisor nulo m�dulo <m>.
4811
4812          (%i1) inv_mod(3, 41);
4813          (%o1)                           14
4814          (%i2) ratsimp(3^-1), modulus = 41;
4815          (%o2)                           14
4816          (%i3) inv_mod(3, 42);
4817          (%o3)                          false
4818
4819 -- Funci�n: isqrt (<x>)
4820     Devuelve la "ra�z cuadrada entera" del valor absoluto de <x>, el
4821     cual debe ser un entero.
4822
4823 -- Funci�n: jacobi (<p>, <q>)
4824     Devuelve el s�mbolo de Jacobi para <p> y <q>.
4825
4826          (%i1) l: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]$
4827          (%i2) map (lambda ([a], jacobi (a, 9)), l);
4828          (%o2)         [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0]
4829
4830 -- Funci�n: lcm (<expr_1>, ..., <expr_n>)
4831     Devuelve el m�nimo com�n m�ltiplo de sus argumentos.  Los
4832     argumentos pueden ser tanto expresiones en general como enteros.
4833
4834     Es necesario cargar en memoria esta funci�n haciendo 'load
4835     ("functs")'.
4836
4837 -- Funci�n: lucas (<n>)
4838     Devuelve el <n>-�simo n�mero de Lucas.  'lucas(0)' es igual a 2,
4839     'lucas(1)' es igual a 1 y 'lucas(-<n>)' es igual a '(-1)^(-<n>) *
4840     lucas(<n>)'.
4841
4842          (%i1) map (lucas, [-4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]);
4843          (%o1)             [7, - 4, 3, - 1, 2, 1, 3, 4, 7, 11, 18, 29, 47]
4844
4845     Despu�s de llamar a 'lucas', la variable global 'next_lucas' es
4846     igual a 'lucas (<n> + 1)', el n�mero de Lucas que sigue al �ltimo
4847     que se ha devuelto.  El ejemplo muestra como los n�meros de
4848     Fibonacci se pueden calcular mediante 'lucas' y 'next_lucas'.
4849
4850          (%i1) fib_via_lucas(n) :=
4851                   block([lucas : lucas(n)],
4852                   signum(n) * (2*next_lucas - lucas)/5 )$
4853          (%i2) map (fib_via_lucas, [-4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]);
4854          (%o2)             [- 3, 2, - 1, 1, 0, 1, 1, 2, 3, 5, 8, 13, 21]
4855
4856 -- Funci�n: mod (<x>, <y>)
4857
4858     Si <x> e <y> son n�meros reales e <y> es distinto de cero, devuelve
4859     '<x> - <y> * floor(<x> / <y>)'.  Para todos los reales <x>, se
4860     tiene 'mod (<x>, 0) = <x>'.  Para informaci�n sobre la definici�n
4861     de 'mod (<x>, 0) = <x>', v�ase la secci�n 3.4 de "Concrete
4862     Mathematics", by Graham, Knuth, and Patashnik.  La funci�n 'mod
4863     (<x>, 1)' es de diente de sierra con periodo unidad y con 'mod (1,
4864     1) = 0' y 'mod (0, 1) = 0'.
4865
4866     Para encontrar el argumento principal (un n�mero del intervalo
4867     '(-%pi, %pi]') de un n�mero complejo, h�gase uso de la funci�n '<x>
4868     |-> %pi - mod (%pi - <x>, 2*%pi)', donde <x> es un argumento.
4869
4870     Si <x> e <y> son expresiones constantes (por ejemplo, '10 * %pi'),
4871     'mod' utiliza el mismo esquema de evaluaci�n basado en n�meros
4872     grandes en coma flotante (big floats) que 'floor' y 'ceiling'.
4873     Tambi�n es posible, pero improbable, que 'mod' pueda retornar un
4874     valor err�neo en tales casos.
4875
4876     Para argumentos no num�ricos <x> o <y>, 'mod' aplica algunas reglas
4877     de simplificaci�n:
4878
4879          (%i1) mod (x, 0);
4880          (%o1)                           x
4881          (%i2) mod (a*x, a*y);
4882          (%o2)                      a mod(x, y)
4883          (%i3) mod (0, x);
4884          (%o3)                           0
4885
4886 -- Funci�n: next_prime (<n>)
4887     Devuelve el menor de los primos mayores que <n>.
4888
4889          (%i1) next_prime(27);
4890          (%o1)                       29
4891
4892 -- Funci�n: partfrac (<expr>, <var>)
4893     Expande la expresi�n <expr> en fracciones parciales respecto de la
4894     variable principal <var>.  La funci�n 'partfrac' hace una
4895     descomposici�n completa en fracciones parciales.  El algoritmo que
4896     se utiliza se basa en el hecho de que los denominadores de la
4897     expansi�n en fracciones parciales (los factores del denominador
4898     original) son primos relativos.  Los numeradores se pueden escribir
4899     como combinaciones lineales de los denominadores.
4900
4901          (%i1) 1/(1+x)^2 - 2/(1+x) + 2/(2+x);
4902                                2       2        1
4903          (%o1)               ----- - ----- + --------
4904                              x + 2   x + 1          2
4905                                              (x + 1)
4906          (%i2) ratsimp (%);
4907                                           x
4908          (%o2)                 - -------------------
4909                                   3      2
4910                                  x  + 4 x  + 5 x + 2
4911          (%i3) partfrac (%, x);
4912                                2       2        1
4913          (%o3)               ----- - ----- + --------
4914                              x + 2   x + 1          2
4915                                              (x + 1)
4916
4917 -- Funci�n: power_mod (<a>, <n>, <m>)
4918     Utiliza un algoritmo modular para calcular 'a^n mod m', siendo <a>
4919     y <n> enteros cualesquiera y <m> un entero positivo.  Si <n> es
4920     negativo, se utilizar� 'inv_mod' para encontrar el inverso modular.
4921
4922          (%i1) power_mod(3, 15, 5);
4923          (%o1)                          2
4924          (%i2) mod(3^15,5);
4925          (%o2)                          2
4926          (%i3) power_mod(2, -1, 5);
4927          (%o3)                          3
4928          (%i4) inv_mod(2,5);
4929          (%o4)                          3
4930
4931 -- Funci�n: primep (<n>)
4932     Comprueba si el n�mero entero <n> es o no primo, devolviendo 'true'
4933     o 'false' seg�n el caso.
4934
4935     Cuando el resultado de 'primep (<n>)' es 'false', <n> es un n�mero
4936     compuesto, y si es 'true', <n> es primo con alta probabilidad.
4937
4938     Si <n> es menor que 341550071728321, se utiliza una versi�n
4939     determin�stica de la prueba de Miller-Rabin.  En tal caso, si
4940     'primep (<n>)' devuelve 'true', entonces <n> es un n�mero primo.
4941
4942     Para <n> mayor que 341550071728321 'primep' realiza
4943     'primep_number_of_tests' pruebas de seudo-primalidad de
4944     Miller-Rabin y una prueba de seudo-primalidad de Lucas.  La
4945     probabilidad de que un n�mero compuesto <n> pase una prueba de
4946     Miller-Rabin es menor que 1/4.  Con el valor por defecto de
4947     'primep_number_of_tests', que es 25, la probabilidad de que <n> sea
4948     compuesto es menor que 10^-15.
4949
4950 -- Variable opcional: primep_number_of_tests
4951     Valor por defecto: 25
4952
4953     N�mero de pruebas de Miller-Rabin a realizar por 'primep'.
4954
4955 -- Funci�n: prev_prime (<n>)
4956     Devuelve el mayor de los primos menores que <n>.
4957
4958          (%i1) prev_prime(27);
4959          (%o1)                       23
4960
4961 -- Funci�n: qunit (<n>)
4962     Devuelve la unidad principal de 'sqrt (<n>)', siendo <n> un entero;
4963     consiste en la resoluci�n de la ecuaci�n de Pell 'a^2 - <n> b^2 =
4964     1'.
4965
4966          (%i1) qunit (17);
4967          (%o1)                     sqrt(17) + 4
4968          (%i2) expand (% * (sqrt(17) - 4));
4969          (%o2)                           1
4970
4971 -- Funci�n: totient (<n>)
4972     Devuelve el n�mero de enteros menores o iguales a <n> que son
4973     primos relativos con <n>.
4974
4975 -- Variable opcional: zerobern
4976     Valor por defecto: 'true'
4977
4978     Si 'zerobern' vale 'false', 'bern' excluye los n�meros de Bernoulli
4979     y 'euler' excluye los n�meros de Euler que sean iguales a cero.
4980     V�ase 'bern' y 'euler'.
4981
4982 -- Funci�n: zeta (<n>)
4983     Devuelve la funci�n zeta de Riemann.  Si <n> es entero negativo, 0
4984     o n�mero par positivo, la funci�n zeta de Riemann devuelve un valor
4985     exacto; en el caso de n�mero par positivo, la variable opcional
4986     'zeta%pi', adem�s, tiene que tener el valor 'true' (v�ase
4987     'zeta%pi').  Cuando el argumento es un n�mero decimal o bigfloat,
4988     entonces la funci�n zeta de Riemann se calcula num�ricamente.
4989     Maxima devuelve una forma nominal 'zeta (<n>)' para cualesquiera
4990     otros argumentos, incluidos los racionales no enteros, los n�meros
4991     complejos y los enteros pares si 'zeta%pi' vale 'false'.
4992
4993     'zeta(1)' no est� definida, pero Maxima conce el l�mite de
4994     'limit(zeta(x), x, 1)' por ambos lados.
4995
4996     La funci�n zeta de Riemann se distribuye sobre las listas, matrices
4997     y ecuaciones.
4998
4999     V�anse tambi�n 'bfzeta' y 'zeta%pi'.
5000
5001     Ejemplos:
5002
5003          (%i1) zeta([-2,-1,0,0.5,2,3,1+%i]);
5004                                                        2
5005                       1     1                       %pi
5006          (%o1)  [0, - --, - -, - 1.460354508809587, ----, zeta(3), zeta(%i + 1)]
5007                       12    2                        6
5008
5009          (%i2) limit(zeta(x),x,1,plus);
5010          (%o2)                                 inf
5011          (%i3) limit(zeta(x),x,1,minus);
5012          (%o3)                                minf
5013
5014 -- Variable opcional: zeta%pi
5015     Valor por defecto: 'true'
5016
5017     Si 'zeta%pi' vale 'true', 'zeta' devuelve una expresi�n
5018     proporcional a '%pi^n' si 'n' es un n�mero par positivo.  En caso
5019     contrario, 'zeta' no se eval�a y devuelve la forma nominal 'zeta
5020     (n)'.
5021
5022     Ejemplos:
5023
5024          (%i1) zeta%pi: true$
5025          (%i2) zeta (4);
5026                                           4
5027                                        %pi
5028          (%o2)                         ----
5029                                         90
5030          (%i3) zeta%pi: false$
5031          (%i4) zeta (4);
5032          (%o4)                        zeta(4)
5033
5034 -- Funci�n: zn_add_table (<n>)
5035     Muestra la tabla de la suma de todos los elementos de (Z/<n>Z).
5036
5037     V�anse tambi�n 'zn_mult_table' y 'zn_power_table'.
5038
5039 -- Funci�n: zn_determinant (<matrix>, <p>)
5040     Utiliza el procedimiento de la descomposici�n LU para calcular el
5041     determinante de <matrix> sobre (Z/<p>Z). El argumento <p> debe ser
5042     un n�mero primo.
5043
5044     Si el determinante es igual a cero, el procedimiento puede fallar,
5045     en cuyo caso 'zn_determinant' calcula el determinante no modular y
5046     luego reduce.
5047
5048     V�ase tambi�n 'zn_invert_by_lu'.
5049
5050     Ejemplo:
5051
5052          (%i1) m : matrix([1,3],[2,4]);
5053                                          [ 1  3 ]
5054          (%o1)                           [      ]
5055                                          [ 2  4 ]
5056          (%i2) zn_determinant(m, 5);
5057          (%o2)                               3
5058          (%i3) m : matrix([2,4,1],[3,1,4],[4,3,2]);
5059                                         [ 2  4  1 ]
5060                                         [         ]
5061          (%o3)                          [ 3  1  4 ]
5062                                         [         ]
5063                                         [ 4  3  2 ]
5064          (%i4) zn_determinant(m, 5);
5065          (%o4)                               0
5066
5067 -- Funci�n: zn_invert_by_lu (<matrix>, <p>)
5068     Utiliza el procedimiento de la descomposici�n LU para calcular la
5069     inversa modular de <matrix> sobre (Z/<p>Z). El argumento <p> debe
5070     ser un n�mero primo y <matrix> invertible.  La funci�n
5071     'zn_invert_by_lu' devuelve 'false' si <matrix> no es invertible.
5072
5073     V�ase 'zn_determinant'.
5074
5075     Ejemplo:
5076
5077          (%i1) m : matrix([1,3],[2,4]);
5078                                          [ 1  3 ]
5079          (%o1)                           [      ]
5080                                          [ 2  4 ]
5081          (%i2) zn_determinant(m, 5);
5082          (%o2)                               3
5083          (%i3) mi : zn_invert_by_lu(m, 5);
5084                                          [ 3  4 ]
5085          (%o3)                           [      ]
5086                                          [ 1  2 ]
5087          (%i4) matrixmap(lambda([a], mod(a, 5)), m . mi);
5088                                          [ 1  0 ]
5089          (%o4)                           [      ]
5090                                          [ 0  1 ]
5091
5092 -- Funci�n: zn_log (<a>, <g>, <n>)
5093 -- Funci�n: zn_log (<a>, <g>, <n>, [[<p1>, <e1>], ..., [<pk>, <ek>]])
5094     Calcula el logaritmo discreto.  Sea (Z/<n>Z)* un grupo c�clico, <g>
5095     una ra�z primitiva m�dulo <n> y <a> un miembro de este grupo,
5096     entonces 'zn_log (a, g, n)' calcula la congruencia 'g^x = a mod n'.
5097
5098     El algoritmo que se aplica necesita una factorizaci�n prima de
5099     'totient(n)'.  Esta factorizaci�n puede requerir mucho tiempo de
5100     c�lculo, por lo que en ciertos casos puede ser aconsejable
5101     factorizar primero y luego pasar la lista de factores a 'zn_log'
5102     como cuarto argumento.  La lista debe ser de la misma forma que las
5103     lista devuelta por 'ifactors(totient(n))' utilizando la opci�n por
5104     defecto 'factors_only : false'.
5105
5106     El algoritmo utiliza la reducci�n de Pohlig-Hellman y el m�todo Rho
5107     de Pollard para los logaritmos discretos.  El tiempo de ejecuci�n
5108     de 'zn_log' depende en primer lugar del n�mero de bits del mayor
5109     factor primo del totient.
5110
5111     V�anse tambi�n 'zn_primroot', 'zn_order', 'ifactors' y 'totient'.
5112
5113     Ejemplos:
5114
5115     'zn_log (a, g, n)' resuelve la congruencia 'g^x = a mod n'.
5116
5117          (%i1) n : 22$
5118          (%i2) g : zn_primroot(n);
5119          (%o2)                               7
5120          (%i3) ord_7 : zn_order(7, n);
5121          (%o3)                              10
5122          (%i4) powers_7 : makelist(power_mod(g, x, n), x, 0, ord_7 - 1);
5123          (%o4)              [1, 7, 5, 13, 3, 21, 15, 17, 9, 19]
5124          (%i5) zn_log(21, g, n);
5125          (%o5)                               5
5126          (%i6) map(lambda([x], zn_log(x, g, n)), powers_7);
5127          (%o6)                [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
5128
5129     El cuarto argumento opcional debe ser de la misma forma que la
5130     lista devuelta por 'ifactors(totient(n))'.
5131
5132          (%i1) (p : 2^127-1, primep(p));
5133          (%o1)                             true
5134          (%i2) ifs : ifactors(p - 1)$
5135          (%i3) g : zn_primroot(p, ifs);
5136          (%o3)                              43
5137          (%i4) a : power_mod(g, 1234567890, p)$
5138          (%i5) zn_log(a, g, p, ifs);
5139          (%o5)                          1234567890
5140          (%i6) time(%o5);
5141          (%o6)                            [1.204]
5142          (%i7) f_max : last(ifs);
5143          (%o7)                       [77158673929, 1]
5144          (%i8) slength( printf(false, "~b", f_max[1]) );
5145          (%o8)                              37
5146
5147 -- Funci�n: zn_mult_table (<n>)
5148 -- Funci�n: zn_mult_table (<n>, all)
5149     Sin el argumento opcional <all>, 'zn_mult_table(n)' muestra la
5150     tabla de multiplicaci�n de los elementos de (Z/<n>Z)*, que son
5151     todos elementos invertibles m�dulo <n>.
5152
5153     El argumento opcional <all> hace que la tabla se genere para todos
5154     los elementos no nulos.
5155
5156     V�anse tambi�n 'zn_add_table' y 'zn_power_table'.
5157
5158     Ejemplo:
5159
5160          (%i1) zn_mult_table(4);
5161                                          [ 1  3 ]
5162          (%o1)                           [      ]
5163                                          [ 3  1 ]
5164          (%i2) zn_mult_table(4, all);
5165                                         [ 1  2  3 ]
5166                                         [         ]
5167          (%o2)                          [ 2  0  2 ]
5168                                         [         ]
5169                                         [ 3  2  1 ]
5170
5171 -- Funci�n: zn_order (<x>, <n>)
5172 -- Funci�n: zn_order (<x>, <n>, [[<p1>, <e1>], ..., [<pk>, <ek>]])
5173     Devuelve el orden de <x> si es una unidad del grupo finito
5174     (Z/<n>Z)*, o devuelve 'false'.  <x> una unidad m�dulo <n> si es
5175     coprimo con <n>.
5176
5177     El algoritmo que se aplica necesita una factorizaci�n prima de
5178     'totient(n)'.  Esta factorizaci�n puede requerir mucho tiempo de
5179     c�lculo, por lo que en ciertos casos puede ser aconsejable
5180     factorizar primero y luego pasar la lista de factores a 'zn_log'
5181     como tercer argumento.  La lista debe ser de la misma forma que las
5182     lista devuelta por 'ifactors(totient(n))' utilizando la opci�n por
5183     defecto 'factors_only : false'.
5184
5185     V�anse tambi�n 'zn_primroot', 'ifactors' y 'totient'.
5186
5187     Ejemplos:
5188
5189     'zn_order' calcula el orden de la unidad <x> en (Z/<n>Z)*.
5190
5191          (%i1) n : 22$
5192          (%i2) g : zn_primroot(n);
5193          (%o2)                               7
5194          (%i3) units_22 : sublist(makelist(i,i,1,21), lambda([x], gcd(x, n) = 1));
5195          (%o3)              [1, 3, 5, 7, 9, 13, 15, 17, 19, 21]
5196          (%i4) (ord_7 : zn_order(7, n)) = totient(n);
5197          (%o4)                            10 = 10
5198          (%i5) powers_7 : makelist(power_mod(g,i,n), i,0,ord_7 - 1);
5199          (%o5)              [1, 7, 5, 13, 3, 21, 15, 17, 9, 19]
5200          (%i6) map(lambda([x], zn_order(x, n)), powers_7);
5201          (%o6)              [1, 10, 5, 10, 5, 2, 5, 10, 5, 10]
5202          (%i7) map(lambda([x], ord_7/gcd(x, ord_7)), makelist(i, i,0,ord_7 - 1));
5203          (%o7)              [1, 10, 5, 10, 5, 2, 5, 10, 5, 10]
5204          (%i8) totient(totient(n));
5205          (%o8)                               4
5206
5207     El tercer argumento opcional debe ser de la misma forma que la
5208     lista devuelta por 'ifactors(totient(n))'.
5209
5210          (%i1) (p : 2^142 + 217, primep(p));
5211          (%o1)                             true
5212          (%i2) ifs : ifactors( totient(p) )$
5213          (%i3) g : zn_primroot(p, ifs);
5214          (%o3)                               3
5215          (%i4) is( (ord_3 : zn_order(g, p, ifs)) = totient(p) );
5216          (%o4)                             true
5217          (%i5) map(lambda([x], ord_3/zn_order(x, p, ifs)), makelist(i,i,2,15));
5218          (%o5)        [22, 1, 44, 10, 5, 2, 22, 2, 8, 2, 1, 1, 20, 1]
5219
5220 -- Funci�n: zn_power_table (<n>)
5221 -- Funci�n: zn_power_table (<n>, all)
5222     Sin el argumento opcional <all>, 'zn_power_table(n)' muestra la
5223     tabla de potencias de los elementos de (Z/<n>Z)*, que son todos
5224     elementos invertibles m�dulo <n>.  El exponente se obtiene con un
5225     bucle desde '1' hasta 'totient(n)' y la tabla termina con una
5226     columna de unos al lado derecho.
5227
5228     El argumento opcional <all> hace que la tabla se genere para todos
5229     los elementos no nulos.  En este caso, el exponente se calcula con
5230     un bucle desde '1' hasta 'totient(n) + 1' y la �ltima columna es
5231     por lo tanto igual a la primera.
5232
5233     V�anse tambi�n 'zn_add_table' y 'zn_mult_table'.
5234
5235     Ejemplo:
5236
5237          (%i1) zn_power_table(6);
5238                                          [ 1  1 ]
5239          (%o1)                           [      ]
5240                                          [ 5  1 ]
5241          (%i2) zn_power_table(6, all);
5242                                         [ 1  1  1 ]
5243                                         [         ]
5244                                         [ 2  4  2 ]
5245                                         [         ]
5246          (%o2)                          [ 3  3  3 ]
5247                                         [         ]
5248                                         [ 4  4  4 ]
5249                                         [         ]
5250                                         [ 5  1  5 ]
5251
5252 -- Funci�n: zn_primroot (<n>)
5253 -- Funci�n: zn_primroot (<n>, [[<p1>, <e1>], ..., [<pk>, <ek>]])
5254     Si el grupo multiplicativo es c�clico, 'zn_primroot' calcula la
5255     menor ra�z primitiva de m�dulo <n>.  (Z/<n>Z)* es c�clico si <n> es
5256     igual a '2', '4', 'p^k' o '2*p^k', siendo 'p' primo y mayor que '2'
5257     y 'k' un n�mero natural.  Si a la variable opcional
5258     'zn_primroot_pretest', cuyo valor por defecto es 'false', se le da
5259     el valor 'true', entonces 'zn_primroot' realiza una prueba previa.
5260     En cualquier caso, el c�lculo est� limitado por la cota superior
5261     'zn_primroot_limit'.
5262
5263     Si (Z/<n>Z)* no es c�clico o si no tiene ra�ces primitivas menores
5264     que 'zn_primroot_limit', 'zn_primroot' devuelve 'false'.
5265
5266     El algoritmo que se aplica necesita una factorizaci�n prima de
5267     'totient(n)'.  Esta factorizaci�n puede requerir mucho tiempo de
5268     c�lculo, por lo que en ciertos casos puede ser aconsejable
5269     factorizar primero y luego pasar la lista de factores a 'zn_log'
5270     como argumento adicional.  La lista debe ser de la misma forma que
5271     las lista devuelta por 'ifactors(totient(n))' utilizando la opci�n
5272     por defecto 'factors_only : false'.
5273
5274     V�anse tambi�n 'zn_primroot_p', 'zn_order', 'ifactors' y 'totient'.
5275
5276     Ejemplos:
5277
5278     'zn_primroot' calcula la menor ra�z primitiva de m�dulo <n> o
5279     devuelve 'false'.
5280
5281          (%i1) n : 14$
5282          (%i2) g : zn_primroot(n);
5283          (%o2)                               3
5284          (%i3) zn_order(g, n) = totient(n);
5285          (%o3)                             6 = 6
5286          (%i4) n : 15$
5287          (%i5) zn_primroot(n);
5288          (%o5)                             false
5289
5290     El argumento opcional debe ser de la misma forma que la lista
5291     devuelta por 'ifactors(totient(n))'.
5292
5293          (%i1) (p : 2^142 + 217, primep(p));
5294          (%o1)                             true
5295          (%i2) ifs : ifactors( totient(p) )$
5296          (%i3) g : zn_primroot(p, ifs);
5297          (%o3)                               3
5298          (%i4) [time(%o2), time(%o3)];
5299          (%o4)                    [[15.556972], [0.004]]
5300          (%i5) is(zn_order(g, p, ifs) = p - 1);
5301          (%o5)                             true
5302          (%i6) n : 2^142 + 216$
5303          (%i7) ifs : ifactors(totient(n))$
5304          (%i8) zn_primroot(n, ifs),
5305                zn_primroot_limit : 200, zn_primroot_verbose : true;
5306          `zn_primroot' stopped at zn_primroot_limit = 200
5307          (%o8)                             false
5308
5309 -- Option variable: zn_primroot_limit
5310     Valor por defecto: '1000'
5311
5312     Si 'zn_primroot' no puede encontrar una ra�z primitiva, entonces se
5313     para en esta cota superior.  Si a la variable opcional
5314     'zn_primroot_verbose' se le da el valor 'true', se imprimir� un
5315     mensaje cuando 'zn_primroot_limit' sea alcanzado.
5316
5317 -- Funci�n: zn_primroot_p (<x>, <n>)
5318 -- Funci�n: zn_primroot_p (<x>, <n>, [[<p1>, <e1>], ..., [<pk>, <ek>]])
5319     Comprueba si <x> es una ra�z primitiva en el grupo multiplizativo
5320     (Z/<n>Z)*.
5321
5322     El algoritmo que se aplica necesita una factorizaci�n prima de
5323     'totient(n)'.  Esta factorizaci�n puede requerir mucho tiempo de
5324     c�lculo, por lo que en ciertos casos puede ser aconsejable
5325     factorizar primero y luego pasar la lista de factores a 'zn_log'
5326     como tercer argumento.  La lista debe ser de la misma forma que las
5327     lista devuelta por 'ifactors(totient(n))' utilizando la opci�n por
5328     defecto 'factors_only : false'.
5329
5330     V�anse tambi�n 'zn_primroot', 'zn_order', 'ifactors' y 'totient'.
5331
5332     Ejemplos:
5333
5334     'zn_primroot_p' como funci�n de predicado.
5335
5336          (%i1) n : 14$
5337          (%i2) units_14 : sublist(makelist(i,i,1,13), lambda([i], gcd(i, n) = 1));
5338          (%o2)                     [1, 3, 5, 9, 11, 13]
5339          (%i3) zn_primroot_p(13, n);
5340          (%o3)                            false
5341          (%i4) sublist(units_14, lambda([x], zn_primroot_p(x, n)));
5342          (%o4)                            [3, 5]
5343          (%i5) map(lambda([x], zn_order(x, n)), units_14);
5344          (%o5)                      [1, 6, 6, 3, 3, 2]
5345
5346     El tercer argumento opcional debe ser de la misma forma que la
5347     lista devuelta por 'ifactors(totient(n))'.
5348
5349          (%i1) (p : 2^142 + 217, primep(p));
5350          (%o1)                             true
5351          (%i2) ifs : ifactors( totient(p) )$
5352          (%i3) sublist(makelist(i,i,1,50), lambda([x], zn_primroot_p(x, p, ifs)));
5353          (%o3)      [3, 12, 13, 15, 21, 24, 26, 27, 29, 33, 38, 42, 48]
5354          (%i4) [time(%o2), time(%o3)];
5355          (%o4)                   [[7.748484], [0.036002]]
5356
5357 -- Option variable: zn_primroot_pretest
5358     Valor por defecto: 'false'
5359
5360     El grupo multiplicativo (Z/<n>Z)* es c�clico si if <n> es igual a
5361     '2', '4', 'p^k' o '2*p^k', siendo 'p' un n�mero primo mayor que '2'
5362     y 'k' es un n�mero natural.
5363
5364     La variable 'zn_primroot_pretest' controla si 'zn_primroot' debe
5365     comprobar si sucede alguna de estas situaciones antes de calcular
5366     la menor ra�z primitiva.  Solo se realizar� esta comprobaci�n si
5367     'zn_primroot_pretest' toma el valor 'true'.
5368
5369 -- Option variable: zn_primroot_verbose
5370     Valor por defecto: 'false'
5371
5372     Controla si 'zn_primroot' imprime un mensaje cuando alcanza
5373     'zn_primroot_limit'.
5374
5375
5376File: maxima.info,  Node: Simetr�as,  Next: Grupos,  Prev: Teor�a de N�meros,  Up: Top
5377
537830 Simetr�as
5379************
5380
5381* Menu:
5382
5383* Funciones y variables para simetr�as::
5384
5385Paquete escrito para Macsyma-Symbolics por Annick Valibouze
5386(<http://www-calfor.lip6.fr/~avb/>).  Los algoritmos est�n descritos en
5387los siguientes art�culos:
5388
5389  1. Fonctions sym�triques et changements de bases.  Annick Valibouze.
5390     EUROCAL'87 (Leipzig, 1987), 323-332, Lecture Notes in Comput.  Sci
5391     378.  Springer, Berlin, 1989.
5392     <http://www.stix.polytechnique.fr/publications/1984-1994.html>
5393
5394  2. R�solvantes et fonctions sym�triques.  Annick Valibouze.
5395     Proceedings of the ACM-SIGSAM 1989 International Symposium on
5396     Symbolic and Algebraic Computation, ISSAC'89 (Portland, Oregon).
5397     ACM Press, 390-399, 1989.
5398     <http://www-calfor.lip6.fr/~avb/DonneesTelechargeables/MesArticles/issac89ACMValibouze.pdf>
5399
5400  3. Symbolic computation with symmetric polynomials, an extension to
5401     Macsyma.  Annick Valibouze.  Computers and Mathematics (MIT, USA,
5402     June 13-17, 1989), Springer-Verlag, New York Berlin, 308-320, 1989.
5403     <http://www.stix.polytechnique.fr/publications/1984-1994.html>
5404
5405  4. Th�orie de Galois Constructive.  Annick Valibouze.  M�moire
5406     d'habilitation � diriger les recherches (HDR), Universit� P. et M.
5407     Curie (Paris VI), 1994
5408
5409
5410File: maxima.info,  Node: Funciones y variables para simetr�as,  Prev: Simetr�as,  Up: Simetr�as
5411
541230.1 Funciones y variables para simetr�as
5413=========================================
5414
5415 -- Funci�n: comp2pui (<n>, <l>)
5416     Realiza el paso de las funciones sim�tricas completas de la lista
5417     <l> a las funciones sim�tricas elementales de 0 a <n>.  En caso de
5418     que la lista <l> contenga menos de '<n>+1' elementos, se completar�
5419     con valores formales.  El primer elemento de la lista <l> almacena
5420     el cardinal del alfabeto, en caso de que exista; en caso contrario
5421     se le da el valor <n>.
5422
5423          (%i1) comp2pui (3, [4, g]);
5424                                  2                    2
5425          (%o1)    [4, g, 2 h2 - g , 3 h3 - g h2 + g (g  - 2 h2)]
5426
5427 -- Funci�n: cont2part (<pc>, <lvar>)
5428     Convierte el polinomio particionado asociado a la forma contra�da
5429     <pc>, cuyas variables se encuentran en <lvar>.
5430
5431          (%i1) pc: 2*a^3*b*x^4*y + x^5;
5432                                     3    4      5
5433          (%o1)                   2 a  b x  y + x
5434          (%i2) cont2part (pc, [x, y]);
5435                                             3
5436          (%o2)              [[1, 5, 0], [2 a  b, 4, 1]]
5437
5438     Otras funciones para efectuar cambios de representaci�n son:
5439     'contract', 'explose', 'part2cont', 'partpol', 'tcontract' y
5440     'tpartpol'.
5441
5442 -- Funci�n: contract (<psym>, <lvar>)
5443     Convierte una forma contra�da (como un monomio por �rbita sobre la
5444     acci�n del grupo sim�trico) del polinomio <psym> cuyas variables se
5445     encuentran en la lista <lvar>.  La funci�n 'explose' realiza la
5446     operaci�n inversa.  A mayopes, la funci�n 'tcontract' comprueba la
5447     simetr�a del polinomio.
5448
5449          (%i1) psym: explose (2*a^3*b*x^4*y, [x, y, z]);
5450                   3      4      3      4      3    4        3    4
5451          (%o1) 2 a  b y z  + 2 a  b x z  + 2 a  b y  z + 2 a  b x  z
5452
5453                                                     3      4      3    4
5454                                                + 2 a  b x y  + 2 a  b x  y
5455          (%i2) contract (psym, [x, y, z]);
5456                                        3    4
5457          (%o2)                      2 a  b x  y
5458
5459     Otras funciones para efectuar cambios de representaci�n son:
5460
5461     'cont2part', 'explose', 'part2cont', 'partpol', 'tcontract',
5462     'tpartpol'.
5463
5464 -- Funci�n: direct ([<p_1>, ..., <p_n>], <y>, <f>, [<lvar_1>, ...,
5465          <lvar_n>])
5466     Calcula la imagen directa (v�ase M. Giusti, D. Lazard et A.
5467     Valibouze, ISSAC 1988, Roma) asociada a la funci�n <f>, en las
5468     listas de variables <lvar_1>, ..., <lvar_n>, y en los polinomios
5469     <p_1>, ..., <p_n> de una variable <y>.  Si la expresi�n de <f> no
5470     depende de variable alguna, no s�lo es in�til aportar esa variable,
5471     sino que tambi�n disminuyen considerablemente los c�lculos cuando
5472     la variable no se declara.
5473
5474          (%i1) direct ([z^2  - e1* z + e2, z^2  - f1* z + f2],
5475                        z, b*v + a*u, [[u, v], [a, b]]);
5476                 2
5477          (%o1) y  - e1 f1 y
5478
5479                                           2            2             2   2
5480                            - 4 e2 f2 - (e1  - 2 e2) (f1  - 2 f2) + e1  f1
5481                          + -----------------------------------------------
5482                                                   2
5483          (%i2) ratsimp (%);
5484                        2                2                   2
5485          (%o2)        y  - e1 f1 y + (e1  - 4 e2) f2 + e2 f1
5486          (%i3) ratsimp (direct ([z^3-e1*z^2+e2*z-e3,z^2  - f1* z + f2],
5487                        z, b*v + a*u, [[u, v], [a, b]]));
5488                 6            5         2                        2    2   4
5489          (%o3) y  - 2 e1 f1 y  + ((2 e1  - 6 e2) f2 + (2 e2 + e1 ) f1 ) y
5490
5491                                    3                               3   3
5492           + ((9 e3 + 5 e1 e2 - 2 e1 ) f1 f2 + (- 2 e3 - 2 e1 e2) f1 ) y
5493
5494                   2       2        4    2
5495           + ((9 e2  - 6 e1  e2 + e1 ) f2
5496
5497                              2       2       2                   2    4
5498           + (- 9 e1 e3 - 6 e2  + 3 e1  e2) f1  f2 + (2 e1 e3 + e2 ) f1 )
5499
5500            2          2                      2     3          2
5501           y  + (((9 e1  - 27 e2) e3 + 3 e1 e2  - e1  e2) f1 f2
5502
5503                           2            2    3                5
5504           + ((15 e2 - 2 e1 ) e3 - e1 e2 ) f1  f2 - 2 e2 e3 f1 ) y
5505
5506                     2                   3           3     2   2    3
5507           + (- 27 e3  + (18 e1 e2 - 4 e1 ) e3 - 4 e2  + e1  e2 ) f2
5508
5509                   2      3                   3    2   2
5510           + (27 e3  + (e1  - 9 e1 e2) e3 + e2 ) f1  f2
5511
5512                             2    4        2   6
5513           + (e1 e2 e3 - 9 e3 ) f1  f2 + e3  f1
5514
5515     B�squeda del polinomio cuyas ra�ces son la suma a+u o a es la ra�z
5516     de z^2 - e1* z + e2 y u es la ra�z de z^2 - f1* z + f2
5517
5518          (%i1) ratsimp (direct ([z^2  - e1* z + e2, z^2  - f1* z + f2],
5519                                    z, a + u, [[u], [a]]));
5520                 4                    3             2
5521          (%o1) y  + (- 2 f1 - 2 e1) y  + (2 f2 + f1  + 3 e1 f1 + 2 e2
5522
5523               2   2                              2               2
5524           + e1 ) y  + ((- 2 f1 - 2 e1) f2 - e1 f1  + (- 2 e2 - e1 ) f1
5525
5526                            2                     2            2
5527           - 2 e1 e2) y + f2  + (e1 f1 - 2 e2 + e1 ) f2 + e2 f1  + e1 e2 f1
5528
5529               2
5530           + e2
5531
5532     La funci�n 'direct' acepta dos indicadores: 'elementaires'
5533     (elementales) y 'puissances' (potenciales, que es el valor por
5534     defecto) que permiten hacer la descomposici�n de los polinomios
5535     sim�tricos que aparezcan en los c�lculos en funciones sim�tricas
5536     elementales o en funciones potenciales, respectivamente.
5537
5538     Funciones de 'sym' utilizadas en esta funci�n:
5539
5540     'multi_orbit'(por tanto 'orbit'),'pui_direct', 'multi_elem' (por
5541     tanto 'elem'), 'multi_pui' (por tanto 'pui'), 'pui2ele', 'ele2pui'
5542     (si al indicador 'direct' se le asign� 'puissances').
5543
5544 -- Funci�n: ele2comp (<m>, <l>)
5545     Pasa las funciones sim�tricas elementales a funciones completas, de
5546     forma similar a 'comp2ele' y 'comp2pui'.
5547
5548     Otras funciones para cambio de bases son:
5549
5550     'comp2ele', 'comp2pui', 'ele2pui', 'elem', 'mon2schur',
5551     'multi_elem', 'multi_pui', 'pui', 'pui2comp', 'pui2ele', 'puireduc'
5552     y 'schur2comp'.
5553
5554 -- Funci�n: ele2polynome (<l>, <z>)
5555     Devuelve el polinomio en <z> en el que las funciones sim�tricas
5556     elementales de las ra�ces son las de la lista <l>.  '<l> = [<n>,
5557     <e_1>, ..., <e_n>]', donde <n> es el grado del polinomio y <e_i> la
5558     <i>-�sima funci�n sim�trica elemental.
5559
5560          (%i1) ele2polynome ([2, e1, e2], z);
5561                                    2
5562          (%o1)                    z  - e1 z + e2
5563          (%i2) polynome2ele (x^7 - 14*x^5 + 56*x^3  - 56*x + 22, x);
5564          (%o2)          [7, 0, - 14, 0, 56, 0, - 56, - 22]
5565          (%i3) ele2polynome ([7, 0, -14, 0, 56, 0, -56, -22], x);
5566                            7       5       3
5567          (%o3)            x  - 14 x  + 56 x  - 56 x + 22
5568
5569     La funci�n rec�proca es 'polynome2ele (<P>, <z>)'
5570
5571     V�anse tambi�n 'polynome2ele' y 'pui2polynome'.
5572
5573 -- Funci�n: ele2pui (<m>, <l>)
5574     Pasa las funciones sim�tricas elementales a funciones completas, de
5575     forma similar a 'comp2ele' y 'comp2comp'.
5576
5577     Otras funciones para cambio de bases son:
5578
5579     'comp2ele', 'comp2pui', 'ele2comp', 'elem', 'mon2schur',
5580     'multi_elem', 'multi_pui', 'pui', 'pui2comp', 'pui2ele', 'puireduc'
5581     y 'schur2comp'.
5582
5583 -- Funci�n: elem (<ele>, <sym>, <lvar>)
5584     Descompone el polinomio sim�trico <sym> con las variables continuas
5585     de la lista <lvar> en las funciones sim�tricas elementales
5586     contenidas en la lista <ele>.  El primer elemento de la lista <ele>
5587     almacena el cardinal del alfabeto, en caso de que exista; en caso
5588     contrario se le da como valor el grado del polinomio <sym>.  Si
5589     faltan valores en la lista <ele>, �sta se completar� con valores
5590     formales del tipo "ei".  El polinomio <sym> puede especificarse de
5591     tres formas diferentes: contra�do (en cuyo caso 'elem' debe valer
5592     1, que es el valor por defecto), particionado ('elem' valdr� 3) o
5593     extendido (por ejemplo, el polinomio completo) (en este caso,
5594     'elem' valdr� 2).  La utilizaci�n de la funci�n 'pui' se hace
5595     siguiendo este mismo modelo.
5596
5597     Con un alfabeto de cardinal 3 con <e1>, la primera funci�n
5598     sim�trica elemental valiendo 7, el polinomio sim�trico de tres
5599     variables cuya forma contra�da (aqu� dependiendo solamente de dos
5600     de sus variables) es ^4-2*x*y, se descompone en funciones
5601     sim�tricas elementales:
5602
5603          (%i1) elem ([3, 7], x^4 - 2*x*y, [x, y]);
5604          (%o1) 7 (e3 - 7 e2 + 7 (49 - e2)) + 21 e3
5605
5606                                                   + (- 2 (49 - e2) - 2) e2
5607          (%i2) ratsimp (%);
5608                                        2
5609          (%o2)             28 e3 + 2 e2  - 198 e2 + 2401
5610
5611     Otras funciones para cambio de bases son: 'comp2ele', 'comp2pui',
5612     'ele2comp', 'ele2pui', 'mon2schur', 'multi_elem', 'multi_pui',
5613     'pui', 'pui2comp', 'pui2ele', 'puireduc' y 'schur2comp'.
5614
5615 -- Funci�n: explose (<pc>, <lvar>)
5616     Devuelve el polinomio sim�trico asociado a la forma contra�da <pc>.
5617     La lista <lvar> contiene las variables.
5618
5619          (%i1) explose (a*x + 1, [x, y, z]);
5620          (%o1)                  a z + a y + a x + 1
5621
5622     Otras funciones para efectuar cambios de representaci�n son:
5623     'contract', 'cont2part', 'part2cont', 'partpol', 'tcontract' y
5624     'tpartpol'.
5625
5626 -- Funci�n: kostka (<part_1>, <part_2>)
5627     Funci�n escrita por P. Espert, calcula el n�mero de Kostka asociado
5628     a las particiones <part_1> y <part_2>.
5629
5630          (%i1) kostka ([3, 3, 3], [2, 2, 2, 1, 1, 1]);
5631          (%o1)                           6
5632
5633 -- Funci�n: lgtreillis (<n>, <m>)
5634     Devuelve la lista de particiones de peso <n> y longitud <m>.
5635
5636          (%i1) lgtreillis (4, 2);
5637          (%o1)                   [[3, 1], [2, 2]]
5638
5639     V�anse tambi�n 'ltreillis', 'treillis' y 'treinat'.
5640
5641 -- Funci�n: ltreillis (<n>, <m>)
5642     Devuelve la lista de particiones de peso <n> y longitud menor o
5643     igual que <m>.
5644
5645          (%i1) ltreillis (4, 2);
5646          (%o1)               [[4, 0], [3, 1], [2, 2]]
5647
5648     V�anse tambi�nt 'lgtreillis', 'treillis' y 'treinat'.
5649
5650 -- Funci�n: mon2schur (<l>)
5651     La lista <l> representa la funci�n de Schur S_<l>: Se tiene <l> =
5652     [<i_1>, <i_2>, ..., <i_q>] con <i_1> <= <i_2> <= ...  <= <i_q>.  La
5653     funci�n de Schur es S_[<i_1>, <i_2>, ..., <i_q>], el menor de la
5654     matriz infinita (h_{i-j}) <i> >= 1, <j> >= 1 compuesto de las <q>
5655     primeras filas y columnas <i_1> + 1, <i_2> + 2, ..., <i_q> + <q>.
5656
5657     Se ha escrito esta funci�n de Schur en funci�n de las formas
5658     monomiales utilizando las funciones 'treinat' y 'kostka'.  La forma
5659     devuelta es un polinomio sim�trico en una de sus representaciones
5660     contra�das con las variables <x_1>, <x_2>, ...
5661
5662          (%i1) mon2schur ([1, 1, 1]);
5663          (%o1)                       x1 x2 x3
5664          (%i2) mon2schur ([3]);
5665                                            2        3
5666          (%o2)                x1 x2 x3 + x1  x2 + x1
5667          (%i3) mon2schur ([1, 2]);
5668                                                2
5669          (%o3)                  2 x1 x2 x3 + x1  x2
5670
5671     Para 3 variables se tendr�:
5672
5673             2 x1 x2 x3 + x1^2 x2 + x2^2 x1 + x1^2 x3 + x3^2 x1
5674              + x2^2 x3 + x3^2 x2
5675
5676     Otras funciones para cambio de bases son:
5677
5678     'comp2ele', 'comp2pui', 'ele2comp', 'ele2pui', 'elem',
5679     'multi_elem', 'multi_pui', 'pui', 'pui2comp', 'pui2ele', 'puireduc'
5680     y 'schur2comp'.
5681
5682 -- Funci�n: multi_elem (<l_elem>, <multi_pc>, <l_var>)
5683     Descompone un polinomio multisim�trico sobre una forma
5684     multicontra�da <multi_pc> en los grupos de variables contenidas en
5685     la lista de listas <l_var> sobre los grupos de funciones sim�tricas
5686     elementales contenidas en <l_elem>.
5687
5688          (%i1) multi_elem ([[2, e1, e2], [2, f1, f2]], a*x + a^2 + x^3,
5689                [[x, y], [a, b]]);
5690                                                            3
5691          (%o1)         - 2 f2 + f1 (f1 + e1) - 3 e1 e2 + e1
5692          (%i2) ratsimp (%);
5693                                   2                       3
5694          (%o2)         - 2 f2 + f1  + e1 f1 - 3 e1 e2 + e1
5695
5696     Otras funciones para cambio de bases son:
5697
5698     'comp2ele', 'comp2pui', 'ele2comp', 'ele2pui', 'elem', 'mon2schur',
5699     'multi_pui', 'pui', 'pui2comp', 'pui2ele', 'puireduc' y
5700     'schur2comp'.
5701
5702 -- Funci�n: multi_orbit (<P>, [<lvar_1>, <lvar_2>, ..., <lvar_p>])
5703     <P> es un polinomio en el conjunto de variables contenidas en las
5704     listas <lvar_1>, <lvar_2>, ..., <lvar_p>.  Esta funci�n restablece
5705     la �rbita del polinomio <P> sobre la acci�n del producto de los
5706     grupos sim�tricos de los conjuntos de variables representadas por
5707     esas <p> listas.
5708
5709          (%i1) multi_orbit (a*x + b*y, [[x, y], [a, b]]);
5710          (%o1)                [b y + a x, a y + b x]
5711          (%i2) multi_orbit (x + y + 2*a, [[x, y], [a, b, c]]);
5712          (%o2)        [y + x + 2 c, y + x + 2 b, y + x + 2 a]
5713
5714     V�ase tambi�n 'orbit' para la acci�n de un solo grupo sim�rico.
5715
5716 -- Funci�n: multi_pui
5717     Es a la funci�n 'pui' lo que la funci�n 'multi_elem' es a la
5718     funci�n 'elem'.
5719
5720          (%i1) multi_pui ([[2, p1, p2], [2, t1, t2]], a*x + a^2 + x^3,
5721                [[x, y], [a, b]]);
5722                                                      3
5723                                          3 p1 p2   p1
5724          (%o1)              t2 + p1 t1 + ------- - ---
5725                                             2       2
5726
5727 -- Funci�n: multinomial (<r>, <part>)
5728     El argumento <r> es el peso de la partici�n <part>.  Esta funci�n
5729     calcula el coeficiente multinomial asociado: si las partes de las
5730     particiones <part> son <i_1>, <i_2>, ..., <i_k>, el resultado de
5731     'multinomial' es '<r>!/(<i_1>! <i_2>! ... <i_k>!)'.
5732
5733 -- Funci�n: multsym (<ppart_1>, <ppart_2>, <n>)
5734     Calcula el producto de dos polinomios sim�tricos de <n> variables
5735     operando solamente con el m�dulo de la acci�n del grupo sim�trico
5736     de orden <n>.  Los polinomios est�n en su representaci�n
5737     particionada.
5738
5739     Sean los dos polinomios sim�tricos en 'x' e 'y': '3*(x + y) +
5740     2*x*y' y '5*(x^2 + y^2)' cuyas formas particionadas son '[[3, 1],
5741     [2, 1, 1]]' y '[[5, 2]]', respectivamente; el producto de ambos
5742     ser�:
5743
5744          (%i1) multsym ([[3, 1], [2, 1, 1]], [[5, 2]], 2);
5745          (%o1)         [[10, 3, 1], [15, 3, 0], [15, 2, 1]]
5746
5747     o sea, '10*(x^3*y + y^3*x) + 15*(x^2*y + y^2*x) + 15*(x^3 + y^3)'.
5748
5749     Funciones de cambio de representaci�n de un polinomio sim�trico:
5750
5751     'contract', 'cont2part', 'explose', 'part2cont', 'partpol',
5752     'tcontract' y 'tpartpol'.
5753
5754 -- Funci�n: orbit (<P>, <lvar>)
5755     Calcula la �rbita de un polinomio <P> en las variables de la lista
5756     <lvar> bajo la acci�n del grupo sim�trico del conjunto de variables
5757     contenidas en la lista <lvar>.
5758
5759          (%i1) orbit (a*x + b*y, [x, y]);
5760          (%o1)                [a y + b x, b y + a x]
5761          (%i2) orbit (2*x + x^2, [x, y]);
5762                                  2         2
5763          (%o2)                 [y  + 2 y, x  + 2 x]
5764
5765     V�ase tambi�n 'multi_orbit' para la acci�n de un producto de grupos
5766     sim�tricos sobre un polinomio.
5767
5768 -- Funci�n: part2cont (<ppart>, <lvar>)
5769     Transforma un polinomio sim�trico de su forma particionada a su
5770     forma contra�da.  La forma contra�da se devuelve con las variables
5771     contenidas en <lvar>.
5772
5773          (%i1) part2cont ([[2*a^3*b, 4, 1]], [x, y]);
5774                                        3    4
5775          (%o1)                      2 a  b x  y
5776
5777     Otras funciones para efectuar cambios de representaci�n son:
5778
5779     'contract', 'cont2part', 'explose', 'partpol', 'tcontract' y
5780     'tpartpol'.
5781
5782 -- Funci�n: partpol (<psym>, <lvar>)
5783     Restablece la representaci�n particionada del polinomio sim�trico
5784     <psym> de variables en <lvar>.
5785
5786          (%i1) partpol (-a*(x + y) + 3*x*y, [x, y]);
5787          (%o1)               [[3, 1, 1], [- a, 1, 0]]
5788
5789     Otras funciones para efectuar cambios de representaci�n son:
5790
5791     'contract', 'cont2part', 'explose', 'part2cont', 'tcontract' y
5792     'tpartpol'.
5793
5794 -- Funci�n: permut (<l>)
5795     Devuelve la lista de permutaciones de la lista <l>.
5796
5797 -- Funci�n: polynome2ele (<P>, <x>)
5798     Devuelve la lista '<l> = [<n>, <e_1>, ..., <e_n>]', en la que <n>
5799     es el grado del polinomio <P> de variable <x> y <e_i> es la
5800     <i>-�sima funci�n sim�trica elemental de las ra�ces de <P>.
5801
5802          (%i1) polynome2ele (x^7 - 14*x^5 + 56*x^3 - 56*x + 22, x);
5803          (%o1)          [7, 0, - 14, 0, 56, 0, - 56, - 22]
5804          (%i2) ele2polynome ([7, 0, -14, 0, 56, 0, -56, -22], x);
5805                            7       5       3
5806          (%o2)            x  - 14 x  + 56 x  - 56 x + 22
5807
5808     La funci�n rec�proca es 'ele2polynome (<l>, <x>)'.
5809
5810 -- Funci�n: prodrac (<l>, <k>)
5811     Siendo <l> una lista que contiene las funciones sim�tricas
5812     elementales sobre un conjunto <A>, la funci�n 'prodrac' calcula el
5813     polinomio cuyas ra�ces son los productos <k> a <k> de los elementos
5814     de <A>.
5815
5816 -- Funci�n: pui (<l>, <sym>, <lvar>)
5817     Descompone el polinomio sim�trico <sym>, cuyas variables son las
5818     contenidas en <lvar>, en las funciones potenciales contenidas en la
5819     lista <l>.  El primer elemento de la lista <l> almacena el cardinal
5820     del alfabeto, en caso de que exista; en caso contrario se le da el
5821     grado del polinomio <sym>.  Si faltan los valores de la lista <l>,
5822     en su lugar ser�n colocados valores formales del tipo "pi".  El
5823     polinomio <sym> puede especificarse de tres formas diferentes:
5824     contra�do (en cuyo caso 'pui' debe valer 1, que es el valor por
5825     defecto), particionado ('pui' valdr� 3) o extendido (por ejemplo,
5826     el polinomio completo) (en este caso, 'pui' valdr� 2).  La
5827     utilizaci�n de la funci�n 'elem' se hace siguiendo este mismo
5828     modelo.
5829
5830          (%i1) pui;
5831          (%o1)                           1
5832          (%i2) pui ([3, a, b], u*x*y*z, [x, y, z]);
5833                                 2
5834                             a (a  - b) u   (a b - p3) u
5835          (%o2)              ------------ - ------------
5836                                  6              3
5837          (%i3) ratsimp (%);
5838                                                 3
5839                                (2 p3 - 3 a b + a ) u
5840          (%o3)                 ---------------------
5841                                          6
5842
5843     Otras funciones para cambio de bases son: 'comp2ele', 'comp2pui',
5844     'ele2comp', 'ele2pui', 'elem', 'mon2schur', 'multi_elem',
5845     'multi_pui', 'pui2comp', 'pui2ele', 'puireduc' y 'schur2comp'.
5846
5847 -- Funci�n: pui2comp (<n>, <lpui>)
5848     Devuelve la lista de las <n> primeras funciones completas (con el
5849     cardinal en primer lugar) en funci�n de las funciones potenciales
5850     dadas en la lista <lpui>.  Si la lista <lpui> estuviese vac�a, el
5851     cardinal ser�a <N>; si no estuviese vac�a, se tomar�a como cardinal
5852     su primer elemento, de forma similar a como se procede en
5853     'comp2ele' y en 'comp2pui'.
5854
5855          (%i1) pui2comp (2, []);
5856                                                 2
5857                                          p2 + p1
5858          (%o1)                   [2, p1, --------]
5859                                             2
5860          (%i2) pui2comp (3, [2, a1]);
5861                                                      2
5862                                           a1 (p2 + a1 )
5863                                   2  p3 + ------------- + a1 p2
5864                            p2 + a1              2
5865          (%o2)     [2, a1, --------, --------------------------]
5866                               2                  3
5867          (%i3) ratsimp (%);
5868                                      2                     3
5869                               p2 + a1   2 p3 + 3 a1 p2 + a1
5870          (%o3)        [2, a1, --------, --------------------]
5871                                  2               6
5872
5873     Otras funciones para cambio de bases son: 'comp2ele', 'comp2pui',
5874     'ele2comp', 'ele2pui', 'elem', 'mon2schur', 'multi_elem',
5875     'multi_pui', 'pui', 'pui2ele', 'puireduc' y 'schur2comp'.
5876
5877 -- Funci�n: pui2ele (<n>, <lpui>)
5878     Transforma las funciones potenciales a funciones sim�tricas
5879     elementales.  Si la variable global 'pui2ele' vale 'girard', se
5880     recupera la lista de funciones sim�tricas elementales de 1 <n>, y
5881     si es igual a 'close', se recupera la <n>-�sima funci�n sim�trica
5882     elemental.
5883
5884     Otras funciones para cambio de bases son: 'comp2ele', 'comp2pui',
5885     'ele2comp', 'ele2pui', 'elem', 'mon2schur', 'multi_elem',
5886     'multi_pui', 'pui', 'pui2comp', 'puireduc' y 'schur2comp'.
5887
5888 -- Funci�n: pui2polynome (<x>, <lpui>)
5889     Calcula el polinomio en <x> cuyas ra�ces tienen como funciones
5890     potenciales las dadas en la lista <lpui>.
5891
5892          (%i1) pui;
5893          (%o1)                           1
5894          (%i2) kill(labels);
5895          (%o0)                         done
5896          (%i1) polynome2ele (x^3 - 4*x^2 + 5*x - 1, x);
5897          (%o1)                     [3, 4, 5, 1]
5898          (%i2) ele2pui (3, %);
5899          (%o2)                     [3, 4, 6, 7]
5900          (%i3) pui2polynome (x, %);
5901                                  3      2
5902          (%o3)                  x  - 4 x  + 5 x - 1
5903
5904     V�anse tambi�n 'polynome2ele' y 'ele2polynome'.
5905
5906 -- Funci�n: pui_direct (<orbite>, [<lvar_1>, ..., <lvar_n>], [<d_1>,
5907          <d_2>, ..., <d_n>])
5908     Sea <f> un polinomio en <n> bloques de variables <lvar_1>, ...,
5909     <lvar_n>.  Sea <c_i> el n�mero de variables en <lvar_i> y <SC> el
5910     producto de los <n> grupos sim�tricos de grados <c_1>, ..., <c_n>,
5911     que act�an sobre <f>.  La lista <orbite> es la �rbita, representada
5912     por '<SC>(<f>)', de la funci�n <f> sobre la acci�n de <SC>, la cual
5913     puede ser obtenida por medio de la funci�n 'multi_orbit'.  Los
5914     valores 'd_i' son enteros tales que <c_1> <= <d_1>, <c_2> <= <d_2>,
5915     ..., <c_n> <= <d_n>.  Por �ltimo, sea <SD> el producto de los
5916     grupos sim�tricos <S_d1> x <S_d2> x ...  x <S_dn>.
5917
5918     La funci�n 'pui_direct' devuelve las <n> primeras funciones
5919     potenciales de '<SD>(<f>)' deducidas de las funciones potenciales
5920     de '<SC>(<f>)', siendo <n> el cardinal de '<SD>(<f>)'.
5921
5922     El resultado se devuelve en la forma multicontra�da respecto de
5923     <SD>.
5924
5925          (%i1) l: [[x, y], [a, b]];
5926          (%o1)                   [[x, y], [a, b]]
5927          (%i2) pui_direct (multi_orbit (a*x + b*y, l), l, [2, 2]);
5928                                                 2  2
5929          (%o2)               [a x, 4 a b x y + a  x ]
5930          (%i3) pui_direct (multi_orbit (a*x + b*y, l), l, [3, 2]);
5931                                       2  2     2    2        3  3
5932          (%o3) [2 a x, 4 a b x y + 2 a  x , 3 a  b x  y + 2 a  x ,
5933
5934              2  2  2  2      3    3        4  4
5935          12 a  b  x  y  + 4 a  b x  y + 2 a  x ,
5936
5937              3  2  3  2      4    4        5  5
5938          10 a  b  x  y  + 5 a  b x  y + 2 a  x ,
5939
5940              3  3  3  3       4  2  4  2      5    5        6  6
5941          40 a  b  x  y  + 15 a  b  x  y  + 6 a  b x  y + 2 a  x ]
5942          (%i4) pui_direct ([y + x + 2*c, y + x + 2*b, y + x + 2*a],
5943                [[x, y], [a, b, c]], [2, 3]);
5944                                       2              2
5945          (%o4) [3 x + 2 a, 6 x y + 3 x  + 4 a x + 4 a ,
5946
5947                           2                   3        2       2        3
5948                        9 x  y + 12 a x y + 3 x  + 6 a x  + 12 a  x + 8 a ]
5949
5950 -- Funci�n: puireduc (<n>, <lpui>)
5951     Siendo <lpui> una lista en la que el primer elemento es un entero
5952     <m>, 'puireduc' devuelve las <n> primeras funciones potenciales en
5953     funci�n de las <m> primeras.
5954
5955          (%i1) puireduc (3, [2]);
5956                                                   2
5957                                             p1 (p1  - p2)
5958          (%o1)          [2, p1, p2, p1 p2 - -------------]
5959                                                   2
5960          (%i2) ratsimp (%);
5961                                                     3
5962                                         3 p1 p2 - p1
5963          (%o2)              [2, p1, p2, -------------]
5964                                               2
5965
5966 -- Funci�n: resolvante (<P>, <x>, <f>, [<x_1>, ..., <x_d>])
5967     Calcula la resolvente del polinomio <P> de variable <x> y grado <n>
5968     >= <d> por la funci�n <f> de variables <x_1>, ..., <x_d>.  Para
5969     mejorar los c�lculos, es importante no incluir en la lista '[<x_1>,
5970     ..., <x_d>]' las variables que no intervienen en la funci�n de
5971     transformaci�n <f>.
5972
5973     Con el fin de hacer m�s eficaces los c�lculos, se puede asignar a
5974     'resolvante' un indicador que permita seleccionar el algoritmo m�s
5975     apropiado:
5976
5977        * 'unitaire',
5978        * 'lineaire',
5979        * 'alternee',
5980        * 'somme',
5981        * 'produit',
5982        * 'cayley',
5983        * 'generale'.
5984
5985          (%i1) resolvante: unitaire$
5986          (%i2) resolvante (x^7 - 14*x^5 + 56*x^3 - 56*x + 22, x, x^3 - 1,
5987                [x]);
5988
5989          " resolvante unitaire " [7, 0, 28, 0, 168, 0, 1120, - 154, 7840,
5990                                   - 2772, 56448, - 33880,
5991
5992          413952, - 352352, 3076668, - 3363360, 23114112, - 30494464,
5993
5994          175230832, - 267412992, 1338886528, - 2292126760]
5995            3       6      3       9      6      3
5996          [x  - 1, x  - 2 x  + 1, x  - 3 x  + 3 x  - 1,
5997
5998           12      9      6      3       15      12       9       6      3
5999          x   - 4 x  + 6 x  - 4 x  + 1, x   - 5 x   + 10 x  - 10 x  + 5 x
6000
6001                 18      15       12       9       6      3
6002           - 1, x   - 6 x   + 15 x   - 20 x  + 15 x  - 6 x  + 1,
6003
6004           21      18       15       12       9       6      3
6005          x   - 7 x   + 21 x   - 35 x   + 35 x  - 21 x  + 7 x  - 1]
6006          [- 7, 1127, - 6139, 431767, - 5472047, 201692519, - 3603982011]
6007                 7      6        5         4          3           2
6008          (%o2) y  + 7 y  - 539 y  - 1841 y  + 51443 y  + 315133 y
6009
6010                                                        + 376999 y + 125253
6011          (%i3) resolvante: lineaire$
6012          (%i4) resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3]);
6013
6014          " resolvante lineaire "
6015                 24       20         16            12             8
6016          (%o4) y   + 80 y   + 7520 y   + 1107200 y   + 49475840 y
6017
6018                                                              4
6019                                                 + 344489984 y  + 655360000
6020          (%i5) resolvante: general$
6021          (%i6) resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3]);
6022
6023          " resolvante generale "
6024                 24       20         16            12             8
6025          (%o6) y   + 80 y   + 7520 y   + 1107200 y   + 49475840 y
6026
6027                                                              4
6028                                                 + 344489984 y  + 655360000
6029          (%i7) resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3, x4]);
6030
6031          " resolvante generale "
6032                 24       20         16            12             8
6033          (%o7) y   + 80 y   + 7520 y   + 1107200 y   + 49475840 y
6034
6035                                                              4
6036                                                 + 344489984 y  + 655360000
6037          (%i8) direct ([x^4 - 1], x, x1 + 2*x2 + 3*x3, [[x1, x2, x3]]);
6038                 24       20         16            12             8
6039          (%o8) y   + 80 y   + 7520 y   + 1107200 y   + 49475840 y
6040
6041                                                              4
6042                                                 + 344489984 y  + 655360000
6043          (%i9) resolvante :lineaire$
6044          (%i10) resolvante (x^4 - 1, x, x1 + x2 + x3, [x1, x2, x3]);
6045
6046          " resolvante lineaire "
6047                                        4
6048          (%o10)                       y  - 1
6049          (%i11) resolvante: symetrique$
6050          (%i12) resolvante (x^4 - 1, x, x1 + x2 + x3, [x1, x2, x3]);
6051
6052          " resolvante symetrique "
6053                                        4
6054          (%o12)                       y  - 1
6055          (%i13) resolvante (x^4 + x + 1, x, x1 - x2, [x1, x2]);
6056
6057          " resolvante symetrique "
6058                                     6      2
6059          (%o13)                    y  - 4 y  - 1
6060          (%i14) resolvante: alternee$
6061          (%i15) resolvante (x^4 + x + 1, x, x1 - x2, [x1, x2]);
6062
6063          " resolvante alternee "
6064                      12      8       6        4        2
6065          (%o15)     y   + 8 y  + 26 y  - 112 y  + 216 y  + 229
6066          (%i16) resolvante: produit$
6067          (%i17) resolvante (x^7 - 7*x + 3, x, x1*x2*x3, [x1, x2, x3]);
6068
6069          " resolvante produit "
6070                  35      33         29        28         27        26
6071          (%o17) y   - 7 y   - 1029 y   + 135 y   + 7203 y   - 756 y
6072
6073                   24           23          22            21           20
6074           + 1323 y   + 352947 y   - 46305 y   - 2463339 y   + 324135 y
6075
6076                    19           18             17              15
6077           - 30618 y   - 453789 y   - 40246444 y   + 282225202 y
6078
6079                       14              12             11            10
6080           - 44274492 y   + 155098503 y   + 12252303 y   + 2893401 y
6081
6082                        9            8            7             6
6083           - 171532242 y  + 6751269 y  + 2657205 y  - 94517766 y
6084
6085                      5             3
6086           - 3720087 y  + 26040609 y  + 14348907
6087          (%i18) resolvante: symetrique$
6088          (%i19) resolvante (x^7 - 7*x + 3, x, x1*x2*x3, [x1, x2, x3]);
6089
6090          " resolvante symetrique "
6091                  35      33         29        28         27        26
6092          (%o19) y   - 7 y   - 1029 y   + 135 y   + 7203 y   - 756 y
6093
6094                   24           23          22            21           20
6095           + 1323 y   + 352947 y   - 46305 y   - 2463339 y   + 324135 y
6096
6097                    19           18             17              15
6098           - 30618 y   - 453789 y   - 40246444 y   + 282225202 y
6099
6100                       14              12             11            10
6101           - 44274492 y   + 155098503 y   + 12252303 y   + 2893401 y
6102
6103                        9            8            7             6
6104           - 171532242 y  + 6751269 y  + 2657205 y  - 94517766 y
6105
6106                      5             3
6107           - 3720087 y  + 26040609 y  + 14348907
6108          (%i20) resolvante: cayley$
6109          (%i21) resolvante (x^5 - 4*x^2 + x + 1, x, a, []);
6110
6111          " resolvante de Cayley "
6112                  6       5         4          3            2
6113          (%o21) x  - 40 x  + 4080 x  - 92928 x  + 3772160 x  + 37880832 x
6114
6115                                                                 + 93392896
6116
6117     Para la resolvente de Cayley, los dos �ltimos argumentos son
6118     neutros y el polinomio dado en el argumento debe ser necesariamente
6119     de grado 5.
6120
6121     V�anse tambi�n:
6122     'resolvante_bipartite', 'resolvante_produit_sym',
6123     'resolvante_unitaire', 'resolvante_alternee1', 'resolvante_klein',
6124     'resolvante_klein3', 'resolvante_vierer', 'resolvante_diedrale'.
6125
6126 -- Funci�n: resolvante_alternee1 (<P>, <x>)
6127     Calcula la transformaci�n de '<P>(<x>)' de grado <n> por la funci�n
6128     $\prod_{1\leq i<j\leq n-1} (x_i-x_j)$.
6129
6130     V�anse tambi�n:
6131     'resolvante_produit_sym', 'resolvante_unitaire',
6132     'resolvante' , 'resolvante_klein', 'resolvante_klein3',
6133     'resolvante_vierer', 'resolvante_diedrale', 'resolvante_bipartite'.
6134
6135 -- Funci�n: resolvante_bipartite (<P>, <x>)
6136     Calcula la transformaci�n de '<P>(<x>)' de grado <n> (<n> par) por
6137     la funci�n $x_1x_2\ldots x_{n/2}+x_{n/2+1}\ldotsx_n$
6138
6139          (%i1) resolvante_bipartite (x^6 + 108, x);
6140                        10        8           6             4
6141          (%o1)        y   - 972 y  + 314928 y  - 34012224 y
6142
6143     V�anse tambi�n:
6144     'resolvante_produit_sym', 'resolvante_unitaire',
6145     'resolvante', 'resolvante_klein', 'resolvante_klein3',
6146     'resolvante_vierer', 'resolvante_diedrale', 'resolvante_alternee1'.
6147
6148 -- Funci�n: resolvante_diedrale (<P>, <x>)
6149     Calcula la transformaci�n de '<P>(<x>)' por la funci�n '<x_1> <x_2>
6150     + <x_3> <x_4>'.
6151
6152          (%i1) resolvante_diedrale (x^5 - 3*x^4 + 1, x);
6153                 15       12       11       10        9         8         7
6154          (%o1) x   - 21 x   - 81 x   - 21 x   + 207 x  + 1134 x  + 2331 x
6155
6156                  6         5          4          3          2
6157           - 945 x  - 4970 x  - 18333 x  - 29079 x  - 20745 x  - 25326 x
6158
6159           - 697
6160
6161     V�anse tambi�n:
6162     'resolvante_produit_sym', 'resolvante_unitaire',
6163     'resolvante_alternee1', 'resolvante_klein', 'resolvante_klein3',
6164     'resolvante_vierer', 'resolvante'.
6165
6166 -- Funci�n: resolvante_klein (<P>, <x>)
6167     Calcula la transformaci�n de '<P>(<x>)' por la funci�n '<x_1> <x_2>
6168     <x_4> + <x_4>'.
6169
6170     V�anse tambi�n:
6171     'resolvante_produit_sym', 'resolvante_unitaire',
6172     'resolvante_alternee1', 'resolvante', 'resolvante_klein3',
6173     'resolvante_vierer', 'resolvante_diedrale'.
6174
6175 -- Funci�n: resolvante_klein3 (<P>, <x>)
6176     Calcula la transformaci�n de '<P>(<x>)' por la funci�n '<x_1> <x_2>
6177     <x_4> + <x_4>'.
6178
6179     V�anse tambi�n:
6180     'resolvante_produit_sym', 'resolvante_unitaire',
6181     'resolvante_alternee1', 'resolvante_klein', 'resolvante',
6182     'resolvante_vierer', 'resolvante_diedrale'.
6183
6184 -- Funci�n: resolvante_produit_sym (<P>, <x>)
6185     Calcula la lista de todas las resolventes producto del polinomio
6186     '<P>(<x>)'.
6187
6188          (%i1) resolvante_produit_sym (x^5 + 3*x^4 + 2*x - 1, x);
6189                  5      4             10      8       7       6       5
6190          (%o1) [y  + 3 y  + 2 y - 1, y   - 2 y  - 21 y  - 31 y  - 14 y
6191
6192              4       3      2       10      8       7    6       5       4
6193           - y  + 14 y  + 3 y  + 1, y   + 3 y  + 14 y  - y  - 14 y  - 31 y
6194
6195                 3      2       5      4
6196           - 21 y  - 2 y  + 1, y  - 2 y  - 3 y - 1, y - 1]
6197          (%i2) resolvante: produit$
6198          (%i3) resolvante (x^5 + 3*x^4 + 2*x - 1, x, a*b*c, [a, b, c]);
6199
6200          " resolvante produit "
6201                 10      8       7    6        5       4       3     2
6202          (%o3) y   + 3 y  + 14 y  - y  - 14 y  - 31 y  - 21 y  - 2 y  + 1
6203
6204     V�anse tambi�n:
6205     'resolvante', 'resolvante_unitaire',
6206     'resolvante_alternee1', 'resolvante_klein',
6207     'resolvante_klein3', 'resolvante_vierer',
6208     'resolvante_diedrale'.
6209
6210 -- Funci�n: resolvante_unitaire (<P>, <Q>, <x>)
6211     Calcula la resolvente del polinomio '<P>(<x>)' por el polinomio
6212     '<Q>(<x>)'.
6213
6214     V�anse tambi�n:
6215     'resolvante_produit_sym', 'resolvante',
6216     'resolvante_alternee1', 'resolvante_klein', 'resolvante_klein3',
6217     'resolvante_vierer', 'resolvante_diedrale'.
6218
6219 -- Funci�n: resolvante_vierer (<P>, <x>)
6220     Calcula la transformaci�n de '<P>(<x>)' por la funci�n '<x_1> <x_2>
6221     - <x_3> <x_4>'.
6222
6223     V�anse tambi�n:
6224     'resolvante_produit_sym', 'resolvante_unitaire',
6225     'resolvante_alternee1', 'resolvante_klein', 'resolvante_klein3',
6226     'resolvante', 'resolvante_diedrale'.
6227
6228 -- Funci�n: schur2comp (<P>, <l_var>)
6229     <P> es un polinomio de variables contenidas en la lista <l_var>.
6230     Cada una de las variables de <l_var> representa una funci�n
6231     sim�trica completa.  La <i>-�sima funci�n sim�trica completa de
6232     <l_var> se representa como la concatenaci�n de la letra 'h' con el
6233     entero <i>: 'h<i>'.  La funci�n 'schur2comp' devuelve la expresi�n
6234     de <P> en funci�n de las funciones de Schur.
6235
6236          (%i1) schur2comp (h1*h2 - h3, [h1, h2, h3]);
6237          (%o1)                         s
6238                                         1, 2
6239          (%i2) schur2comp (a*h3, [h3]);
6240          (%o2)                         s  a
6241                                         3
6242
6243 -- Funci�n: somrac (<l>, <k>)
6244     Si la lista <l> contiene las funciones sim�tricas elementales de un
6245     polinomio <P>, la funci�n 'somrac' calcula el polinomio cuyas
6246     ra�ces son las sumas <k> a <k> de las ra�ces de <P>.
6247
6248     V�ase tambi�n 'prodrac'.
6249
6250 -- Funci�n: tcontract (<pol>, <lvar>)
6251     Comprueba si el polinomio <pol> es sim�trico en las variable
6252     contenidas en la lista <lvar>.  En caso afirmativo, devuelve una
6253     forma contra�da tal como lo hace la funci�n 'contract'.
6254
6255     Otras funciones para efectuar cambios de representaci�n son:
6256     'contract', 'cont2part', 'explose', 'part2cont', 'partpol' y
6257     'tpartpol'.
6258
6259 -- Funci�n: tpartpol (<pol>, <lvar>)
6260     Comprueba si el polinomio <pol> es sim�trico en las variable
6261     contenidas en la lista <lvar>.  En caso afirmativo, devuelve una
6262     forma particionada tal como lo hace la funci�n 'partpol'.
6263
6264     Otras funciones para efectuar cambios de representaci�n son:
6265     'contract', 'cont2part', 'explose', 'part2cont', 'partpol' y
6266     'tcontract'.
6267
6268 -- Funci�n: treillis (<n>)
6269     Devuelve todas las particiones de pesos <n>.
6270
6271          (%i1) treillis (4);
6272          (%o1)    [[4], [3, 1], [2, 2], [2, 1, 1], [1, 1, 1, 1]]
6273
6274     V�anse tambi�n 'lgtreillis', 'ltreillis' y 'treinat'.
6275
6276 -- Funci�n: treinat (<part>)
6277     Devuelve la lista de las particiones inferiores de la partici�n
6278     <part> en su orden natural.
6279
6280          (%i1) treinat ([5]);
6281          (%o1)                         [[5]]
6282          (%i2) treinat ([1, 1, 1, 1, 1]);
6283          (%o2) [[5], [4, 1], [3, 2], [3, 1, 1], [2, 2, 1], [2, 1, 1, 1],
6284
6285                                                           [1, 1, 1, 1, 1]]
6286          (%i3) treinat ([3, 2]);
6287          (%o3)                 [[5], [4, 1], [3, 2]]
6288
6289     V�anse tambi�n 'lgtreillis', 'ltreillis' y 'treillis'.
6290
6291
6292File: maxima.info,  Node: Grupos,  Next: Entorno de Ejecuci�n,  Prev: Simetr�as,  Up: Top
6293
629431 Grupos
6295*********
6296
6297* Menu:
6298
6299* Funciones y variables para grupos::
6300
6301
6302File: maxima.info,  Node: Funciones y variables para grupos,  Prev: Grupos,  Up: Grupos
6303
630431.1 Funciones y variables para grupos
6305======================================
6306
6307 -- Funci�n: todd_coxeter (<relaciones>, <subgrupo>)
6308 -- Funci�n: todd_coxeter (<relaciones>)
6309
6310     Busca el orden de G/H donde G es el m�dulo del Grupo Libre de
6311     <relations>, y H es el subgrupo de G generado por 'subgrupo'.
6312     'subgrupo' es un argumento opcional, cuyo valor por defecto es [].
6313
6314     En este proceso se obtiene una tabla de multiplicaci�n para la
6315     acci�n correcta de G sobre G/H, donde los co-cojuntos son
6316     enumerados [H,Hg2,Hg3,...].  Esto puede ser observado internamente
6317     en el 'todd_coxeter_state'.
6318
6319     Ejemplo:
6320
6321          (%i1) symet(n):=create_list(
6322                  if (j - i) = 1 then (p(i,j))^^3 else
6323                      if (not i = j) then (p(i,j))^^2 else
6324                          p(i,i) , j, 1, n-1, i, 1, j);
6325                                                                 <3>
6326          (%o1) symet(n) := create_list(if j - i = 1 then p(i, j)
6327
6328                                          <2>
6329           else (if not i = j then p(i, j)    else p(i, i)), j, 1, n - 1,
6330
6331          i, 1, j)
6332          (%i2) p(i,j) := concat(x,i).concat(x,j);
6333          (%o2)        p(i, j) := concat(x, i) . concat(x, j)
6334          (%i3) symet(5);
6335                   <2>           <3>    <2>           <2>           <3>
6336          (%o3) [x1   , (x1 . x2)   , x2   , (x1 . x3)   , (x2 . x3)   ,
6337
6338                      <2>           <2>           <2>           <3>    <2>
6339                    x3   , (x1 . x4)   , (x2 . x4)   , (x3 . x4)   , x4   ]
6340          (%i4) todd_coxeter(%o3);
6341
6342          Rows tried 426
6343          (%o4)                          120
6344          (%i5) todd_coxeter(%o3,[x1]);
6345
6346          Rows tried 213
6347          (%o5)                          60
6348          (%i6) todd_coxeter(%o3,[x1,x2]);
6349
6350          Rows tried 71
6351          (%o6)                          20
6352
6353
6354File: maxima.info,  Node: Entorno de Ejecuci�n,  Next: Miscel�nea de opciones,  Prev: Grupos,  Up: Top
6355
635632 Entorno de Ejecuci�n
6357***********************
6358
6359* Menu:
6360
6361* Introducci�n al entorno de ejecuci�n::
6362* Interrupciones::
6363* Funciones y variables para el entorno de ejecuci�n::
6364
6365
6366File: maxima.info,  Node: Introducci�n al entorno de ejecuci�n,  Next: Interrupciones,  Prev: Entorno de Ejecuci�n,  Up: Entorno de Ejecuci�n
6367
636832.1 Introducci�n al entorno de ejecuci�n
6369=========================================
6370
6371El fichero 'maxima-init.mac' se carga autom�ticamente cada vez que se
6372empieza a ejecutar Maxima.  Se puede utilizar 'maxima-init.mac' para
6373personalizar el entorno de Maxima.  Si existe, 'maxima-init.mac' se
6374almacena normalmente en el directorio indicado por 'maxima_userdir',
6375aunque puede estar alojado en cualquier otro directorio que est� al
6376alcance de la funci�n 'file_search'.
6377
6378He aqu� un ejemplo de fichero 'maxima-init.mac':
6379
6380     setup_autoload ("specfun.mac", ultraspherical, assoc_legendre_p);
6381     showtime:all;
6382
6383En este ejemplo, 'setup_autoload' le dice a Maxima que cargue en memoria
6384el fichero 'specfun.mac' si cualquiera de las funciones 'ultraspherical'
6385o 'assoc_legendre_p' es invocada pero todav�a no est� definida.  De esta
6386manera, no es necesario recordar cargar el fichero antes de llamar a las
6387funciones.
6388
6389La sentencia 'showtime: all' le dice a Maxima que haga una asignaci�n a
6390la variable 'showtime'.  El fichero 'maxima-init.mac' puede contener
6391cualesquiera otras asignaciones o sentencias de Maxima.
6392
6393
6394File: maxima.info,  Node: Interrupciones,  Next: Funciones y variables para el entorno de ejecuci�n,  Prev: Introducci�n al entorno de ejecuci�n,  Up: Entorno de Ejecuci�n
6395
639632.2 Interrupciones
6397===================
6398
6399El usuario puede detener un c�mputo que est� consumiendo recursos
6400excesivos con el car�cter ^C (control-C). La acci�n que se sigue por
6401defecto es la detenci�n del c�mputo y la impresi�n de otro prompt.  En
6402este caso, no ser� posible reiniciar la tarea interrumpida.
6403
6404Si a la variable Lisp '*debugger-hook*' se le asigna 'nil' haciendo
6405
6406     :lisp (setq *debugger-hook* nil)
6407
6408entonces tras recibir ^C, Maxima entra en el depurador de Lisp y el
6409usuario podr� utilizar el depurador para inspeccionar el entorno Lisp.
6410La tarea que haya sido interrumpida podr� reiniciarse escribiendo
6411'continue' en el depurado de Lisp.  La forma de volver a Maxima desde el
6412depurador de Lisp, que no sea la de permitir la computaci�n hasta la
6413terminaci�n de la tarea, depender� de la versi�n de Lisp.
6414
6415En sistemas Unix el car�cter ^Z (control-Z) hace que Maxima deje de
6416ejecutarse devolviendo el control al terminal del sistema.  El comando
6417'fg' hace que la ejecuci�n de Maxima se reanude en el punto que lo dej�.
6418
6419
6420File: maxima.info,  Node: Funciones y variables para el entorno de ejecuci�n,  Prev: Interrupciones,  Up: Entorno de Ejecuci�n
6421
642232.3 Funciones y variables para el entorno de ejecuci�n
6423=======================================================
6424
6425 -- Variable del sistema: maxima_tempdir
6426
6427     La variable 'maxima_tempdir' almacena la ruta del directorio en el
6428     que Maxima crea ciertos ficheros temporales.  En particular, los
6429     ficheros temporales para la realizaci�n de gr�ficos se guardan en
6430     'maxima_tempdir'.
6431
6432     El valor que inicialmente toma esta variable es el directorio de
6433     inicio del usuario, si Maxima es capaz de localizarlo; en caso
6434     contrario, Maxima intenta encontrar un directorio que sea
6435     aceptable.
6436
6437     A la variable 'maxima_tempdir' se le puede asignar una cadena de
6438     caracteres con la ruta del directorio.
6439
6440 -- Variable del sistema: maxima_userdir
6441
6442     La variable 'maxima_userdir' almacena la ruta del directorio en el
6443     que Maxima buscar� ficheros Lisp y de Maxima.  Maxima tambi�n busca
6444     en otros directorios, guardando las variables 'file_search_maxima'
6445     y 'file_search_lisp' la lista completa de b�squeda.
6446
6447     El valor que inicialmente toma esta variable es el de un
6448     subdirectorio del directorio de inicio del usuario, si Maxima es
6449     capaz de localizarlo; en caso contrario, Maxima intenta encontrar
6450     un directorio que sea aceptable.
6451
6452     A la variable 'maxima_userdir' se le puede asignar una cadena de
6453     caracteres con la ruta del directorio.  Sin embargo, cambiando el
6454     valor de la variable 'maxima_userdir' no se alteran
6455     'file_search_maxima' ni 'file_search_lisp', cuyos contenidos se
6456     modifican mediante otro sistema.
6457
6458 -- Funci�n: room ()
6459 -- Funci�n: room (true)
6460 -- Funci�n: room (false)
6461
6462     Presenta una descrpci�n del estado de almacenamiento y gesti�n de
6463     la pila en Maxima.  La llamada 'room' invoca a la funci�n Lisp
6464     hom�nima.
6465
6466        * 'room ()' prints out a moderate description.
6467        * 'room (true)' prints out a verbose description.
6468        * 'room (false)' prints out a terse description.
6469
6470 -- Funci�n: sstatus (<keyword>, <item>)
6471
6472     Si <keyword> es el s�mbolo 'feature', <item> ser� colocado en la
6473     lista de propiedades del sistema.  Una vez ejecutado 'sstatus
6474     (keyword, item)', 'status (feature, item)' devuelve 'true'.  Si
6475     <keyword> es el s�mbolo 'nofeature', <item> se borrar� de la lista
6476     de propiedades del sistema.  Esto puede ser de utilidad para los
6477     autores de paquetes, permitiendo mantener el control sobre las
6478     propiedades que se han ido estableciendo.
6479
6480     V�ase tambi�n 'status'.
6481
6482 -- Funci�n: status ('feature')
6483 -- Funci�n: status ('feature', <item>)
6484
6485     Devuelve informaci�n sobre la presencia o ausencia de ciertas
6486     propiedades dependientes del sistema.
6487
6488        * 'status (feature)' devuelve una lista con caracter�sticas del
6489          sistema.  �stas incluyen la versi�n de Lisp, tipo de sistema
6490          operativo, etc.  La lista puede variar de un Lisp a otro.
6491
6492        * 'status (feature, item)' devuelve 'true' si <item> est� en la
6493          lista de elementos retornados por 'status (feature)' y 'false'
6494          en otro caso.  La funci�n 'status' no eval�a el argumento
6495          <item>.  El operador de doble comilla simple, '''', permite la
6496          evaluaci�n.  Una propiedad cuyo nombre contenga un car�cter
6497          especial debe ser suministrada como un argumento del tipo
6498          cadena.  Por ejemplo, 'status (feature, "ansi-cl")'.
6499
6500     V�ase tambi�n 'sstatus'.
6501
6502     La variable 'features' contiene una lista de propiedades que se
6503     aplican a expresiones matem�ticas.  V�anse 'features' y 'featurep'
6504     para m�s informaci�n.
6505
6506 -- Funci�n: system (<command>)
6507     Ejecuta la instrucci�n <command> como un proceso independiente de
6508     Maxima.  La instrucci�n se le pasa a la consola del sistema para su
6509     ejecuci�n.  La funci�n 'system' no est� soportada por todos los
6510     sistemas operativos, pero suele estarlo en todos los entornos Unix
6511     y similares.
6512
6513     Suponiendo que '_hist.out' es una lista de frecuencias que se
6514     quieren representar en un diagrama de barras utilizando el programa
6515     'xgraph',
6516
6517          (%i1) (with_stdout("_hist.out",
6518                     for i:1 thru length(hist) do (
6519                       print(i,hist[i]))),
6520                 system("xgraph -bar -brw .7 -nl < _hist.out"));
6521
6522     A fin de hacer el diagrama y eliminar el archivo temporal
6523     posteriormente, h�gase:
6524
6525          system("(xgraph -bar -brw .7 -nl < _hist.out;  rm -f _hist.out)&")
6526
6527 -- Funci�n: time (%o1, %o2, %o3, ...)
6528
6529     Devuelve una lista de los tiempos, en segundos, que fueron
6530     necesarios para calcular los resultados de las salidas '%o1',
6531     '%o2', '%o3', ....  Los tiempos devueltos son estimaciones hechas
6532     por Maxima del tiempo interno de computaci�n.  La funci�n 'time'
6533     s�lo puede utilizarse para variables correspondientes a l�neas de
6534     salida; para cualquier otro tipo de variables, 'time' devuelve
6535     'unknown'.
6536
6537     H�gase 'showtime: true' para que Maxima devuelva el tiempo de
6538     ejecuci�n de cada l�nea de salida.
6539
6540 -- Funci�n: timedate ()
6541 -- Funci�n: timedate (<T>)
6542
6543     Sin argumento, 'timedate' devuelve una cadena que representa la
6544     hora y fecha actuales.  La cadena tiene el formato 'YYYY-MM-DD
6545     HH:MM:SS[+|-]ZZ:ZZ', donde los campos indicados son: a�o, mes, d�a,
6546     horas, minutos, segundos y n�mero de horas de diferencia con
6547     respecto a la hora GMT.
6548
6549     Con argumento, 'timedate(<T>)' devuelve la hora <T> como una cadena
6550     con formato 'YYYY-MM-DD HH:MM:SS[+|-]ZZ:ZZ'.  <T> se interpreta
6551     como el n�mero de segundos transcurridos desde la medianoche del
6552     uno de enero de 1900, tal como lo devuelve 'absolute_real_time'.
6553
6554     Ejemplos:
6555
6556     'timedate' sin argumento devuelve una cadena con la hora y fecha
6557     actuales.
6558
6559          (%i1) d : timedate ();
6560          (%o1)                      2010-06-08 04:08:09+01:00
6561          (%i2) print ("timedate reports current time", d) $
6562          timedate reports current time 2010-06-08 04:08:09+01:00
6563
6564     'timedate' con argumento devuelve una cadena que representa al
6565     propio argumento.
6566
6567          (%i1) timedate (0);
6568          (%o1)                      1900-01-01 01:00:00+01:00
6569          (%i2) timedate (absolute_real_time () - 7*24*3600);
6570          (%o2)                      2010-06-01 04:19:51+01:00
6571
6572 -- Funci�n: absolute_real_time ()
6573
6574     Devuelve el n�mero de segundos transcurridos desde la medianoche
6575     del 1 de enero de 1900 UTC. Este valor es un n�mero entero
6576     positivo.
6577
6578     V�anse tambi�n 'elapsed_real_time' y 'elapsed_run_time'.
6579
6580     Ejemplo:
6581
6582          (%i1) absolute_real_time ();
6583          (%o1)                      3385045277
6584          (%i2) 1900 + absolute_real_time () / (365.25 * 24 * 3600);
6585          (%o2)                   2007.265612087104
6586
6587 -- Funci�n: elapsed_real_time ()
6588
6589     Devuelve los segundos (incluyendo fracciones de segundo)
6590     transcurridos desde que Maxima se inici� (o reinici�) la sesi�n de
6591     Maxima.  Este valor es un decimal en coma flotante.
6592
6593     V�anse tambi�n 'absolute_real_time' y 'elapsed_run_time'.
6594
6595     Ejemplo:
6596
6597          (%i1) elapsed_real_time ();
6598          (%o1)                       2.559324
6599          (%i2) expand ((a + b)^500)$
6600          (%i3) elapsed_real_time ();
6601          (%o3)                       7.552087
6602
6603 -- Funci�n: elapsed_run_time ()
6604
6605     Devuelve una estimaci�n en segundos (incluyendo fracciones de
6606     segundo) durante los cuales Maxima ha estado realizando c�lculos
6607     desde que se inici� (o reinici�) la sesi�n actual.  Este valor es
6608     un decimal en coma flotante.
6609
6610     V�anse tambi�n 'absolute_real_time' y 'elapsed_real_time'.
6611
6612     Ejemplo:
6613
6614          (%i1) elapsed_run_time ();
6615          (%o1)                         0.04
6616          (%i2) expand ((a + b)^500)$
6617          (%i3) elapsed_run_time ();
6618          (%o3)                         1.26
6619
6620
6621File: maxima.info,  Node: Miscel�nea de opciones,  Next: Reglas y patrones,  Prev: Entorno de Ejecuci�n,  Up: Top
6622
662333 Miscel�nea de opciones
6624*************************
6625
6626* Menu:
6627
6628* Introducci�n a la miscel�nea de opciones::
6629* Share::
6630* Funciones y variables para la miscel�nea de opciones::
6631
6632
6633File: maxima.info,  Node: Introducci�n a la miscel�nea de opciones,  Next: Share,  Prev: Miscel�nea de opciones,  Up: Miscel�nea de opciones
6634
663533.1 Introducci�n a la miscel�nea de opciones
6636=============================================
6637
6638En esta secci�n se comentan varias opciones que tienen un efecto global
6639sobre le comportamiento de Maxima.  Tambi�n se comentan varias listas,
6640como la de las funciones definidas por el usuario.
6641
6642
6643File: maxima.info,  Node: Share,  Next: Funciones y variables para la miscel�nea de opciones,  Prev: Introducci�n a la miscel�nea de opciones,  Up: Miscel�nea de opciones
6644
664533.2 Share
6646==========
6647
6648El directorio "share" de Maxima contiene programas y ficheros de inter�s
6649para los usuarios de Maxima, pero no forman parte del n�cleo de Maxima.
6650Estos programas se cargan en memoria con llamadas a las funciones 'load'
6651o 'setup_autoload'.
6652
6653El c�digo ':lisp *maxima-sharedir*' muestra la localizaci�n del
6654directorio "share" dentro del sistema de ficheros del usuario.
6655
6656El c�digo 'printfile ("share.usg")' muestra una lista actualizada de
6657paquetes en "share".  Los usuarios pueden encontrar m�s informaci�n
6658accediendo directamente a los contenidos del directorio "share".
6659
6660
6661File: maxima.info,  Node: Funciones y variables para la miscel�nea de opciones,  Prev: Share,  Up: Miscel�nea de opciones
6662
666333.3 Funciones y variables para la miscel�nea de opciones
6664=========================================================
6665
6666 -- Variable del sistema: askexp
6667     Cuando se invoca a 'asksign', la expresi�n que se va a analizar es
6668     precisamente 'askexp'.
6669
6670 -- Variable optativa: genindex
6671     Valor por defecto: 'i'
6672
6673     La variable 'genindex' es el prefijo alfab�tico utilizado para
6674     generar la siguiente variable de sumaci�n en caso de necesidad.
6675
6676 -- Variable optativa: gensumnum
6677     Valor por defecto: 0
6678
6679     La variable 'gensumnum' es el sufijo num�rico utilizado para
6680     generar la siguiente variable de sumaci�n.  Si vale 'false'
6681     entonces el �ndice consistir� solamente de 'genindex', sin sufijo
6682     num�rico.
6683
6684 -- Funci�n: gensym ()
6685 -- Funci�n: gensym (<x>)
6686
6687     'gensym()' crea y devuelve una nueva s�mbolo o variable sin valor
6688     asignado.
6689
6690     El nombre del nuevo s�mbolo est� formado por la concatenaci�n de un
6691     prefijo, cuyo valor por defecto es "g", y de un sufijo, el cual es
6692     la representaci�n decimal de un n�mero que coincide, por defecto,
6693     con el valor de un contador interno de Lisp.
6694
6695     En caso de suministrar el argumento <x>, siendo este una cadena, se
6696     utilizar� como prefijo en lugar de "g", lo cual tendr� efecto s�lo
6697     para esta llamada a 'gensym'·
6698
6699     En caso de suministrar el argumento <x>, siendo este un n�mero
6700     entero, se utilizar� como sufijo en lugar del contador interno de
6701     Lisp, lo cual tendr� efecto s�lo para esta llamada a 'gensym'·
6702
6703     Si no se suministra el sufijo en forma expl�cita, y s�lo en este
6704     caso, el contador interno sufrir� un incremento despu�s de haber
6705     sido utilizado.
6706
6707     Ejemplos:
6708
6709          (%i1) gensym();
6710          (%o1)                         g887
6711          (%i2) gensym("new");
6712          (%o2)                        new888
6713          (%i3) gensym(123);
6714          (%o3)                         g123
6715
6716 -- Variable opcional: packagefile
6717     Valor por defecto: 'false'
6718
6719     Los autores de paquetes que utilizan 'save' o 'translate' para
6720     crear librer�as para otros usuarios pueden hacer la asignaci�n
6721     'packagefile: true' para prevenir que se a�ada informaci�n a las
6722     listas con informaci�n del sistema de Maxima, como 'values' o
6723     'functions'.
6724
6725 -- Funci�n: remvalue (<nombre_1>, ..., <nombre_n>)
6726 -- Funci�n: remvalue (all)
6727
6728     Elimina del sistema los valores de las variable de usuario
6729     <nombre_1>, ..., <nombre_n> (incluso las que tienen sub�ndices).
6730
6731     La llamada 'remvalue (all)' elimina los valores de todas las
6732     variables en 'values', la lista de todas las variables a las que el
6733     usuario a dado alg�n nombre, pero no de aqu�llas a las que Maxima
6734     asigna autom�ticamente un valor.
6735
6736     V�ase tambi�n 'values'.
6737
6738 -- Funci�n: rncombine (<expr>)
6739
6740     Transforma <expr> combinando todos los t�rminos de <expr> que
6741     tengan denominadores id�nticos o que difieran unos de otros por
6742     factores num�ricos.  Su comportamiento es diferente al de la
6743     funci�n 'combine', que combina t�rminos con iguales denominadores.
6744
6745     Haciendo 'pfeformat: true' y utilizando 'combine' se consiguen
6746     resultados similares a aqu�llos que se pueden obtener con
6747     'rncombine', pero 'rncombine' realiza el paso adicional de
6748     multiplicar denominadores num�ricos.  Esto da como resultado
6749     expresiones en las que se pueden reconocer algunas cancelaciones.
6750
6751     Antes de utilizar esta funci�n ejec�tese 'load(rncomb)'.
6752
6753 -- Funci�n: setup_autoload (<nombre_fichero>, <funci�n_1>, ...,
6754          <funci�n_n>)
6755
6756     Especifica que si alguna de las funciones <function_1>, ...,
6757     <function_n> es referenciada pero todav�a no ha sido definida, se
6758     cargar� <nombre_fichero> mediante una llamada a 'load'.  El
6759     <nombre_fichero> normalmente contendr� las definiciones de las
6760     funciones especificadas, aunque esto no es imperativo.
6761
6762     La funci�n 'setup_autoload' no opera con arreglos de funciones.
6763
6764     La funci�n 'setup_autoload' no eval�a sus argumentos.
6765
6766     Ejemplo:
6767
6768          (%i1) legendre_p (1, %pi);
6769          (%o1)                  legendre_p(1, %pi)
6770          (%i2) setup_autoload ("specfun.mac", legendre_p, ultraspherical);
6771          (%o2)                         done
6772          (%i3) ultraspherical (2, 1/2, %pi);
6773          Warning - you are redefining the Macsyma function ultraspherical
6774          Warning - you are redefining the Macsyma function legendre_p
6775                                      2
6776                           3 (%pi - 1)
6777          (%o3)            ------------ + 3 (%pi - 1) + 1
6778                                2
6779          (%i4) legendre_p (1, %pi);
6780          (%o4)                          %pi
6781          (%i5) legendre_q (1, %pi);
6782                                        %pi + 1
6783                                %pi log(-------)
6784                                        1 - %pi
6785          (%o5)                 ---------------- - 1
6786                                       2
6787
6788 -- Funci�n: tcl_output (<list>, <i0>, <skip>)
6789 -- Funci�n: tcl_output (<list>, <i0>)
6790 -- Funci�n: tcl_output ([<list_1>, ..., <list_n>], <i>)
6791
6792     Imprime los elementos de una lista encerr�ndolos con llaves '{ }',
6793     de forma apropiada para ser utilizado en un programa en el lenguaje
6794     Tcl/Tk.
6795
6796     'tcl_output (<list>, <i0>, <skip>)' imprime <list>, empezando por
6797     el elemento <i0> siguiendo luego con los elementos '<i0> + <skip>',
6798     '<i0> + 2 <skip>', etc.
6799
6800     'tcl_output (<list>, <i0>)' equivale a 'tcl_output (<list>, <i0>,
6801     2)'.
6802
6803     'tcl_output ([<list_1>, ..., <list_n>], <i>)' imprime los
6804     <i>-�simos elementos de <list_1>, ..., <list_n>.
6805
6806     Ejemplos:
6807
6808          (%i1) tcl_output ([1, 2, 3, 4, 5, 6], 1, 3)$
6809
6810           {1.000000000     4.000000000
6811           }
6812          (%i2) tcl_output ([1, 2, 3, 4, 5, 6], 2, 3)$
6813
6814           {2.000000000     5.000000000
6815           }
6816          (%i3) tcl_output ([3/7, 5/9, 11/13, 13/17], 1)$
6817
6818           {((RAT SIMP) 3 7) ((RAT SIMP) 11 13)
6819           }
6820          (%i4) tcl_output ([x1, y1, x2, y2, x3, y3], 2)$
6821
6822           {$Y1 $Y2 $Y3
6823           }
6824          (%i5) tcl_output ([[1, 2, 3], [11, 22, 33]], 1)$
6825
6826           {SIMP 1.000000000     11.00000000
6827           }
6828
6829
6830File: maxima.info,  Node: Reglas y patrones,  Next: Conjuntos,  Prev: Miscel�nea de opciones,  Up: Top
6831
683234 Reglas y patrones
6833********************
6834
6835* Menu:
6836
6837* Introducci�n a reglas y patrones::
6838* Funciones y variables sobre reglas y patrones::
6839
6840
6841File: maxima.info,  Node: Introducci�n a reglas y patrones,  Next: Funciones y variables sobre reglas y patrones,  Prev: Reglas y patrones,  Up: Reglas y patrones
6842
684334.1 Introducci�n a reglas y patrones
6844=====================================
6845
6846Esta secci�n describe las reglas de simplificaci�n y los patrones de
6847comparaci�n definidos por el usuario.  Hay dos grupos de funciones que
6848implementan diferentes esquemas de comparaci�n de patrones.  En un grupo
6849est�n 'tellsimp', 'tellsimpafter', 'defmatch', 'defrule', 'apply1',
6850'applyb1' y 'apply2'.  En el otro, se encuentran 'let' y 'letsimp'.
6851Ambos esquemas definen patrones en t�rminos de variables de patrones
6852declaradas mediante 'matchdeclare'.
6853
6854Las reglas de comparaci�n de patrones definidas por 'tellsimp' y
6855'tellsimpafter' se aplican autom�ticamente por el simplificador de
6856Maxima.  Las reglas definidas por 'defmatch', 'defrule' y 'let' se
6857aplican previa llamada a una funci�n.
6858
6859Hay otros mecanismos para las reglas; las relativas a polinomios se
6860controlan mediante 'tellrat' y las del �lgebra conmutativa y no
6861conmutativa se definen en el paquete 'affine'.
6862
6863
6864File: maxima.info,  Node: Funciones y variables sobre reglas y patrones,  Prev: Introducci�n a reglas y patrones,  Up: Reglas y patrones
6865
686634.2 Funciones y variables sobre reglas y patrones
6867==================================================
6868
6869 -- Funci�n: apply1 (<expr>, <regla_1>, ..., <regla_n>)
6870
6871     Aplica de forma repetida la <regla_1> a <expr> hasta que falla, a
6872     continuaci�n aplica repetidamente la misma regla a todas las
6873     subexpresiones de <expr>, de izquierda a derecha, hasta que la
6874     <regla_1> haya fallado en todas las subexpresiones.  Ll�mese
6875     <expr_2> al resultado de transformar <expr> de esta forma.
6876     Entonces la <regla_2> se aplica de la misma manera comenzando en el
6877     nivel superior de <expr_2>.  Cuando la <regla_n> falla en la �ltima
6878     expresi�n, se devuelve el resultado.
6879
6880     'maxapplydepth' es el nivel de las subexpresiones m�s internas
6881     procesadas por 'apply1' y 'apply2'.
6882
6883     V�ase tambi�n 'applyb1', 'apply2' y 'let'.
6884
6885 -- Funci�n: apply2 (<expr>, <regla_1>, ..., <regla_n>)
6886
6887     Si la <regla_1> falla en una subexpresi�n dada, entonces se aplica
6888     la <regla_2> repetidamente, etc.  S�lo si todas las reglas fallan
6889     en una subexpresi�n ser�n aplicadas todas las reglas de forma
6890     repetida a la siguiente subexpresi�n.  Si alguna de las reglas
6891     tiene �xito entonces la misma subexpresi�n es reprocesada,
6892     comenzando por la primera regla.
6893
6894     'maxapplydepth' es el nivel de las subexpresiones m�s internas
6895     procesadas por 'apply1' y 'apply2'.
6896
6897     V�ase tambi�n 'applyb1' y 'let'.
6898
6899 -- Funci�n: applyb1 (<expr>, <regla_1>, ..., <regla_n>)
6900
6901     Aplica la <regla_1> reiteradamente hasta la subexpresi�n m�s
6902     interna de <expr> hasta que falle, a continuaci�n pasa a aplicar la
6903     misma regla en un nivel superior (esto es, en subexpresiones m�s
6904     grandes), hasta que la <regla_1> falle en la expresi�n de nivel m�s
6905     alto.  Despu�s se aplica la <regla_2> de la misma manera al
6906     resultado obtenido de <regla_1>.  Tras la aplicaci�n de la
6907     <regla_n> a la expresi�n de mayor nivel, se devuelve el resultado.
6908
6909     La funci�n 'applyb1' es similar a 'apply1' pero opera de
6910     abajo-arriba, en lugar de arriba-abajo.
6911
6912     'maxapplyheight' es la m�xima altura a la que llega 'applyb1' antes
6913     de terminar su cometido.
6914
6915     V�ase tambi�n 'apply1', 'apply2' y 'let'.
6916
6917 -- Variable opcional: current_let_rule_package
6918     Valor por defecto: 'default_let_rule_package'
6919
6920     La variable 'current_let_rule_package' es el nombre del paquete de
6921     reglas que est�n utilizando las funciones del paquete 'let'
6922     ('letsimp', etc.), a menos que se especifique otro paquete de
6923     reglas.  A esta variable se le puede asignar el nombre de cualquier
6924     paquete de reglas definido por medio de la instrucci�n 'let'.
6925
6926     Si se hace la llamada 'letsimp (expr, rule_pkg_name)', el paquete
6927     de reglas 'rule_pkg_name' ser� utilizado �nicamente para esa
6928     llamada y el valor de 'current_let_rule_package' no cambia.
6929
6930 -- Variable opcional: default_let_rule_package
6931     Valor por defecto: 'default_let_rule_package'
6932
6933     La variable 'default_let_rule_package' es el nombre del paquete de
6934     reglas utilizado cuando el usuario no especifica otro
6935     expl�citamente con 'let' o cambiando el valor de
6936     'current_let_rule_package'.
6937
6938 -- Funci�n: defmatch (<nombre_prog>, <patr�n>, <x_1>, ..., <x_n>)
6939 -- Funci�n: defmatch (<progname>, <pattern>)
6940
6941     Define una funci�n '<nombre_prog>(<expr>, <x_1>, ..., <x_n>)' que
6942     analiza si <expr> coincide con el <patr�n>.
6943
6944     El argumento <patr�n> es una expresi�n que contiene los argumentos
6945     de patr�n <x_1>, ..., <x_n> y algunas variables de patr�n.  Los
6946     argumentos de patr�n se dan de forma expl�cita como argumentos a
6947     'defmatch', mientras que las variables de patr�n se declaran
6948     mediante la funci�n 'matchdeclare'.  Cualquier variable no
6949     declarada bien como variable patr�n en 'matchdeclare', bien como
6950     argumento patr�n en 'defmatch' se hace coincidir con ella misma.
6951
6952     El primer argumento de la funci�n definida <nombre_prog> es una
6953     expresi�n a ser comparada con el patr�n y los dem�s argumentos son
6954     los argumentos que se corresponden con las variables ficticias
6955     <x_1>, ..., <x_n> del patr�n.
6956
6957     Si el resultado de la comparaci�n es positivo, <nombre_prog>
6958     devuelve una lista de ecuaciones cuyos miembros izquierdos son los
6959     argumentos y variables de patr�n, y cuyos miembros derechos son las
6960     subexpresiones en las que se han producido las coincidencias con
6961     patrones.  A las variables de patr�n, no a los argumentos, se les
6962     asignan las subexpresiones con las que coinciden.  Si la
6963     comparaci�n falla, <nombre_prog> devuelve 'false'.
6964
6965     Un patr�n literal, es decir, que no contiene ni argumentos ni
6966     variables de patr�n, devuelve 'true' en caso de coincidencia.
6967
6968     A literal pattern (that is, a pattern which contains neither
6969     pattern arguments nor pattern variables) returns 'true' if the
6970     match succeeds.
6971
6972     V�ase tambi�n 'matchdeclare', 'defrule', 'tellsimp' y
6973     'tellsimpafter'.
6974
6975     Ejemplos:
6976
6977     Define una funci�n 'linearp(expr, x)' que comprueba si 'expr' es de
6978     la forma 'a*x + b', donde ni 'a' ni 'b' contienen a 'x' y 'a' es no
6979     nulo.  La funci�n definida reconoce expresiones lineales respecto
6980     de cualquier variable, pues el argumento de patr�n 'x' es pasado a
6981     'defmatch'.
6982
6983          (%i1) matchdeclare (a, lambda ([e], e#0 and freeof(x, e)),
6984                              b, freeof(x));
6985          (%o1)                         done
6986          (%i2) defmatch (linearp, a*x + b, x);
6987          (%o2)                        linearp
6988          (%i3) linearp (3*z + (y + 1)*z + y^2, z);
6989                                   2
6990          (%o3)              [b = y , a = y + 4, x = z]
6991          (%i4) a;
6992          (%o4)                         y + 4
6993          (%i5) b;
6994                                          2
6995          (%o5)                          y
6996          (%i6) x;
6997          (%o6)                           x
6998
6999     Define una funci�n 'linearp(expr)' que comprueba si 'expr' es de la
7000     forma 'a*x + b', donde ni 'a' ni 'b' contienen a 'x' y 'a' es no
7001     nulo.  La funci�n definida s�lo reconoce expresiones lineales
7002     �nicamente respecto de 'x', pues no se le pasa a 'defmatch' nig�n
7003     argumento de patr�n
7004
7005          (%i1) matchdeclare (a, lambda ([e], e#0 and freeof(x, e)),
7006                              b, freeof(x));
7007          (%o1)                         done
7008          (%i2) defmatch (linearp, a*x + b);
7009          (%o2)                        linearp
7010          (%i3) linearp (3*z + (y + 1)*z + y^2);
7011          (%o3)                         false
7012          (%i4) linearp (3*x + (y + 1)*x + y^2);
7013                                       2
7014          (%o4)                  [b = y , a = y + 4]
7015
7016     Define una funci�n 'checklimits(expr)' que comprueba si 'expr' es
7017     una integral definida.
7018
7019          (%i1) matchdeclare ([a, f], true);
7020          (%o1)                         done
7021          (%i2) constinterval (l, h) := constantp (h - l);
7022          (%o2)        constinterval(l, h) := constantp(h - l)
7023          (%i3) matchdeclare (b, constinterval (a));
7024          (%o3)                         done
7025          (%i4) matchdeclare (x, atom);
7026          (%o4)                         done
7027          (%i5) simp : false;
7028          (%o5)                         false
7029          (%i6) defmatch (checklimits, 'integrate (f, x, a, b));
7030          (%o6)                      checklimits
7031          (%i7) simp : true;
7032          (%o7)                         true
7033          (%i8) 'integrate (sin(t), t, %pi + x, 2*%pi + x);
7034                                 x + 2 %pi
7035                                /
7036                                [
7037          (%o8)                 I          sin(t) dt
7038                                ]
7039                                /
7040                                 x + %pi
7041          (%i9) checklimits (%);
7042          (%o9)    [b = x + 2 %pi, a = x + %pi, x = t, f = sin(t)]
7043
7044 -- Funci�n: defrule (<nombre_regla>, <patr�n>, <reemplazamiento>)
7045
7046     Define y da nombre a una regla de reemplazamiento para el patr�n
7047     dado.  Si la regla <nombre_regla> es aplicada a una expresi�n (por
7048     'apply1', 'applyb1' o 'apply2'), cada subexpresi�n que coincida con
7049     el patr�n ser� reemplazada por el contenido de <reemplazamiento>.
7050
7051     Las propias reglas pueden ser tratadas como funciones que
7052     transforman una expresi�n mediante una operaci�n consistente en la
7053     b�squeda de una coincidencia y posterior aplicaci�n de un
7054     reemplazamiento.  Si la comparaci�n falla, la funci�n que
7055     implementa la regla devuelve 'false'.
7056
7057 -- Funci�n: disprule (<nombre_regla_1>, ..., <nombre_regla_n>)
7058 -- Funci�n: disprule (all)
7059
7060     Muestra las reglas de <nombre_regla_1>, ..., <nombre_regla_n>, tal
7061     como son devueltas por 'defrule', 'tellsimp' o 'tellsimpafter', o
7062     un patr�n definido por 'defmatch'.  Cada regla se muestra con una
7063     etiqueta de expresi�n intermedia ('%t').
7064
7065     La llamada 'disprule (all)' muestra todas las reglas.
7066
7067     La funci�n 'disprule' no eval�a sus argumentos y devuelve la lista
7068     de etiquetas de expresiones intermedias correspondientes a las
7069     reglas mostradas.
7070
7071     V�ase tambi�n 'letrules', que muestra las reglas definidas por
7072     'let'.
7073
7074     Ejemplos:
7075
7076          (%i1) tellsimpafter (foo (x, y), bar (x) + baz (y));
7077          (%o1)                   [foorule1, false]
7078          (%i2) tellsimpafter (x + y, special_add (x, y));
7079          (%o2)                   [+rule1, simplus]
7080          (%i3) defmatch (quux, mumble (x));
7081          (%o3)                         quux
7082          (%i4) disprule (foorule1, "+rule1", quux);
7083          (%t4)        foorule1 : foo(x, y) -> baz(y) + bar(x)
7084
7085          (%t5)          +rule1 : y + x -> special_add(x, y)
7086
7087          (%t6)                quux : mumble(x) -> []
7088
7089          (%o6)                    [%t4, %t5, %t6]
7090          (%i6) ''%;
7091          (%o6) [foorule1 : foo(x, y) -> baz(y) + bar(x),
7092               +rule1 : y + x -> special_add(x, y), quux : mumble(x) -> []]
7093
7094 -- Funci�n: let (<prod>, <repl>, <predname>, <arg_1>, ..., <arg_n>)
7095 -- Funci�n: let ([<prod>, <repl>, <predname>, <arg_1>, ..., <arg_n>],
7096          <nombre_paquete>)
7097
7098     Define una regla de sustituci�n para 'letsimp' tal que <prod> es
7099     sustituido por <repl>, donde <prod> es un producto de potencias
7100     positivas o negativas de los t�rminos siguientes:
7101
7102        * �tomos que 'letsimp' buscar� a menos que antes de llamar a
7103          'letsimp' se utilice la funci�n 'matchdeclare' para asociar un
7104          predicado con el �tomo.  En este caso 'letsimp' har� coincidir
7105          el �tomo con cualquier t�rmino del producto que satisfaga el
7106          predicado.
7107        * Expresiones b�sicas como 'sin(x)', 'n!', 'f(x,y)', etc.  Como
7108          en el caso anterior, 'letsimp' buscar� coincidencias exactas,
7109          a menos que se utilice 'matchdeclare' para asociar un
7110          predicado con el argumento de la expresi�n b�sica ('sin(x)',
7111          'n!', 'f(x,y)', ...).
7112
7113     Si se incluye un predicado en la funci�n 'let' seguido de una lista
7114     de argumentos, una coincidencia aceptable (es decir, una que fuese
7115     aceptada si se hubiese omitido el predicado) se aceptar� s�lo si
7116     'predname (arg_1', ..., arg_n')' vale 'true', donde <arg_i'> es el
7117     valor coincidente con <arg_i>.  El argumento <arg_i> puede ser el
7118     nombre de cualquier �tomo o el argumento de cualquier expresi�n
7119     b�sica que aparezca en <prod>.  <repl> puede ser cualquier
7120     expresi�n racional.  Si cualquiera de los �tomos o argumentos de
7121     <prod> aparece en <repl> se llevan a cabo las sustituciones
7122     correspondientes.
7123
7124     La variable global 'letrat' controla la simplificaci�n de los
7125     cocientes por 'letsimp'.  Cuando 'letrat' vale 'false', 'letsimp'
7126     simplifica separadamente el numerador y denominador de <expr> y no
7127     simplifica el cociente.  Sustituciones como que 'n!/n' se reduzca a
7128     '(n-1)!' ya no se realizar�n.  Cuando 'letrat' vale 'true',
7129     entonces se simplifican el numerador, el denominador y el cociente,
7130     en este orden.
7131
7132     Estas funciones de sustituci�n permiten al usuario trabajar con
7133     varios paquetes de reglas al mismo tiempo.  Cada paquete de reglas
7134     puede contener cierto n�mero de reglas 'let' que son referenciadas
7135     por un nombre dado por el usuario.  'let ([<prod>, <repl>,
7136     <predname>, <arg_1>, ..., <arg_n>], <nombre_paquete>)' a�ade la
7137     regla <predname> al paquete de reglas <nombre_paquete>.  'letsimp
7138     (<expr>, <package_name>)' aplica las reglas de <nombre_paquete>.
7139     La llamada 'letsimp (<expr>, <nombre_paquete1>, <nombre_paquete2>,
7140     ...)' es equivalente a 'letsimp (<expr>, <nombre_paquete1>)'
7141     seguida de 'letsimp (%, <nombre_paquete2>)', ....
7142
7143     'current_let_rule_package' es el nombre del paquete de reglas que
7144     se est� utilizando.  A esta variable se le puede asignar el nombre
7145     de cualquier paquete de reglas definido mediante el comando 'let'.
7146     Siempre que una de las funciones incluidas en el paquete 'let' sean
7147     invocadas sin nombre de paquete, se utilizar� el paquete cuyo
7148     nombre se guarde en 'current_let_rule_package'.  Si se hace una
7149     llamada tal como 'letsimp (<expr>, <rule_pkg_name>)', el paquete de
7150     reglas <rule_pkg_name> es utilizado solamente para ese comando
7151     'letsimp', sin efectuarse cambios en 'current_let_rule_package'.  A
7152     menos que se indique otra cosa, 'current_let_rule_package' toma por
7153     defecto el valor de 'default_let_rule_package'.
7154
7155          (%i1) matchdeclare ([a, a1, a2], true)$
7156          (%i2) oneless (x, y) := is (x = y-1)$
7157          (%i3) let (a1*a2!, a1!, oneless, a2, a1);
7158          (%o3)         a1 a2! --> a1! where oneless(a2, a1)
7159          (%i4) letrat: true$
7160          (%i5) let (a1!/a1, (a1-1)!);
7161                                  a1!
7162          (%o5)                   --- --> (a1 - 1)!
7163                                  a1
7164          (%i6) letsimp (n*m!*(n-1)!/m);
7165          (%o6)                      (m - 1)! n!
7166          (%i7) let (sin(a)^2, 1 - cos(a)^2);
7167                                  2               2
7168          (%o7)                sin (a) --> 1 - cos (a)
7169          (%i8) letsimp (sin(x)^4);
7170                                  4           2
7171          (%o8)                cos (x) - 2 cos (x) + 1
7172
7173 -- Variable opcional: letrat
7174     Valor por defecto: 'false'
7175
7176     Cuando 'letrat' vale 'false', 'letsimp' simplifica separadamente el
7177     numerador y denominador de una fracci�n sin simplificar luego el
7178     cociente.
7179
7180     Cuando 'letrat' vale 'true', se simplifican el numerador,
7181     denominador y cociente, por este orden.
7182
7183          (%i1) matchdeclare (n, true)$
7184          (%i2) let (n!/n, (n-1)!);
7185                                   n!
7186          (%o2)                    -- --> (n - 1)!
7187                                   n
7188          (%i3) letrat: false$
7189          (%i4) letsimp (a!/a);
7190                                         a!
7191          (%o4)                          --
7192                                         a
7193          (%i5) letrat: true$
7194          (%i6) letsimp (a!/a);
7195          (%o6)                       (a - 1)!
7196
7197 -- Funci�n: letrules ()
7198 -- Funci�n: letrules (<nombre_paquete>)
7199
7200     Muestra las reglas de un paquete de reglas.  La llamada 'letrules
7201     ()' muestra las reglas del paquete de reglas actual.  La llamada
7202     'letrules (<nombre_paquete>)' muestra las reglas de
7203     <nombre_paquete>.
7204
7205     El paquete de reglas actual tiene su nombre almacenado en by
7206     'current_let_rule_package'.  A menos que se indique de otra manera,
7207     'current_let_rule_package' toma por defecto el valor de
7208     'default_let_rule_package'.
7209
7210     V�ase tambi�n 'disprule', que muestra las reglas definidas por
7211     'tellsimp' y 'tellsimpafter'.
7212
7213 -- Funci�n: letsimp (<expr>)
7214 -- Funci�n: letsimp (<expr>, <nombre_paquete>)
7215 -- Funci�n: letsimp (<expr>, <nombre_paquete_1>, ...,
7216          <nombre_paquete_n>)
7217
7218     Aplica repetidamente las reglas definidas por 'let' hasta que no se
7219     puedan hacer m�s cambios en <expr>.
7220
7221     La llamada 'letsimp (<expr>)' utiliza las reglas de
7222     'current_let_rule_package'.
7223
7224     La llamada 'letsimp (<expr>, <nombre_paquete>)' utiliza las reglas
7225     de <nombre_paquete> sin efectuar cambios en
7226     'current_let_rule_package'.
7227
7228     La llamada 'letsimp (<expr>, <nombre_paquete_1>, ...,
7229     <nombre_paquete_n>)' es equivalente a 'letsimp (<expr>,
7230     <nombre_paquete_1>', seguida de 'letsimp (%, <nombre_paquete_2>)' y
7231     as� sucesivamente.
7232
7233 -- Variable opcional: let_rule_packages
7234     Valor por defecto: '[default_let_rule_package]'
7235
7236     La variable 'let_rule_packages' guarda una lista con todos los
7237     paquetes de reglas definidos por el usuario, junto con el paquete
7238     por defecto 'default_let_rule_package'.
7239
7240 -- Funci�n: matchdeclare (<a_1>, <pred_1>, ..., <a_n>, <pred_n>)
7241     Asocia un predicado <pred_k> con una variable o lista de variables
7242     <a_k>, de forma que <a_k> se comparar� con expresiones para las
7243     cuales el predicado devuelva algo que no sea 'false'.
7244
7245     Un predicado puede ser el nombre de una funci�n, una expresi�n
7246     lambda, una llamada a funci�n, una llamada a una expresi�n lambda
7247     sin el �ltimo argumento, 'true' o 'all'.  Cualquier expresi�n se
7248     hace coincidir con 'true' o 'all'.
7249
7250     Si el predicado se especifica como una llamada a funci�n o a una
7251     expresi�n lambda, la expresi�n a ser analizada es a�adida a la
7252     lista de argumentos, siendo los argumentos evaluados en el momento
7253     de ser evaluada la comparaci�n.  En cambio, si el predicado se
7254     especifica como un nombre de funci�n o como una expresi�n lambda,
7255     la expresi�n a ser analizada ser� su �nico argumento.  No es
7256     necesario definir una funci�n de predicado cuando se hace una
7257     llamada a 'matchdeclare'; el predicado no se eval�a hasta que se
7258     ensaya una comparaci�n.
7259
7260     Un predicado puede devolver tanto una expresi�n booleana, como
7261     'true' o 'false'.  Las expresiones booleanas se eval�an con 'is'
7262     dentro de la regla, por lo que no es necesario llamar a 'is' desde
7263     dentro del predicado.
7264
7265     Si una expresi�n satisface un predicado, se asigna a la variable de
7266     comparaci�n la expresi�n, excepto cuando las variables de
7267     comparaci�n son operandos de sumas '+' o multiplicaciones '*'.
7268     Solamente las sumas y multiplicaciones son tratadas de forma
7269     especial; los dem�s operadores n-arios (tanto los del sistema como
7270     los definidos por el usuario) son tratados como funciones
7271     ordinarias.
7272
7273     En el caso de sumas y multiplicaciones, a la variable de
7274     comparaci�n se le puede asignar una expresi�n simple que satisfaga
7275     el predicado de comparaci�n, o una suma o producto,
7276     respectivamente, de tales expresiones.  Los predicados son
7277     evaluados en el orden en el que sus variables asociadas aparecen en
7278     el patr�n de comparaci�n, y un t�rmino que satisfaga m�s de un
7279     predicado es tomado por el primer predicado que satisfaga.  Cada
7280     predicado se compara con todos los operandos de la suma o producto
7281     antes de ser evaluado el siguiente predicado.  Adem�s, si 0 o 1,
7282     respectivamente, satisface un predicado de comparaci�n, y no hay
7283     otros t�rminos que lo satisfagan, se asignar� el 0 o 1 a la
7284     variable de comparaci�n asociada al predicado.
7285
7286     El algoritmo para procesar patrones de suma y multiplicaci�n hace
7287     que los resultados de algunas comparaciones dependan del orden de
7288     los t�rminos en el patr�n de comparaci�n y en la expresi�n a ser
7289     comparada.  Sin embargo, si todos los predicados de comparaci�n son
7290     mutuamente excluyentes, el resultado de la comparaci�n no depende
7291     para nada de la ordenaci�n, puesto que un predicado de comparaci�n
7292     no puede aceptar t�rminos aceptados por otros predicados.
7293
7294     Invocando 'matchdeclare' con una variable <a> como argumento cambia
7295     la propiedad de 'matchdeclare' para <a>, si ya hab�a una declarada;
7296     solamente el 'matchdeclare' m�s reciente est� activo cuando se
7297     define una regla.  Cambios posteriores en la propiedad de
7298     'matchdeclare' (via 'matchdeclare' o 'remove') no afectan a las
7299     reglas existentes.
7300
7301     'propvars (matchdeclare)' devuelve la lista de todas las variables
7302     para las cuales hay una propiedad de 'matchdeclare'.  La llamada
7303     'printprops (<a>, matchdeclare)' devuelve el predicado para la
7304     variable 'a'.  La llamada 'printprops (all, matchdeclare)' devuelve
7305     la lista de predicados de todas las variables de 'matchdeclare'.
7306     La llamada 'remove (<a>, matchdeclare)' borra la propiedad
7307     'matchdeclare' de <a>.
7308
7309     Las funciones 'defmatch', 'defrule', 'tellsimp', 'tellsimpafter' y
7310     'let' construyen reglas que analizan expresiones mediante patrones.
7311
7312     'matchdeclare' no eval�a sus argumentos y siempre devuelve 'done'.
7313
7314     Ejemplos:
7315
7316     Un predicado puede ser el nombre de una funci�n, una expresi�n
7317     lambda, una llamada a funci�n, una llamada a una expresi�n lambda
7318     sin el �ltimo argumento, 'true' o 'all'.
7319
7320          (%i1) matchdeclare (aa, integerp);
7321          (%o1)                         done
7322          (%i2) matchdeclare (bb, lambda ([x], x > 0));
7323          (%o2)                         done
7324          (%i3) matchdeclare (cc, freeof (%e, %pi, %i));
7325          (%o3)                         done
7326          (%i4) matchdeclare (dd, lambda ([x, y], gcd (x, y) = 1) (1728));
7327          (%o4)                         done
7328          (%i5) matchdeclare (ee, true);
7329          (%o5)                         done
7330          (%i6) matchdeclare (ff, all);
7331          (%o6)                         done
7332
7333     Si una expresi�n satisface un predicado, se asigna a la variable de
7334     comparaci�n la expresi�n.
7335
7336          (%i1) matchdeclare (aa, integerp, bb, atom);
7337          (%o1)                         done
7338          (%i2) defrule (r1, bb^aa, ["integer" = aa, "atom" = bb]);
7339                              aa
7340          (%o2)        r1 : bb   -> [integer = aa, atom = bb]
7341          (%i3) r1 (%pi^8);
7342          (%o3)               [integer = 8, atom = %pi]
7343
7344     En el caso de sumas y multiplicaciones, a la variable de
7345     comparaci�n se le puede asignar una expresi�n simple que satisfaga
7346     el predicado de comparaci�n, o una suma o producto,
7347     respectivamente, de tales expresiones.
7348
7349          (%i1) matchdeclare (aa, atom, bb, lambda ([x], not atom(x)));
7350          (%o1)                         done
7351          (%i2) defrule (r1, aa + bb,
7352                        ["all atoms" = aa, "all nonatoms" = bb]);
7353          bb + aa partitions `sum'
7354          (%o2)  r1 : bb + aa -> [all atoms = aa, all nonatoms = bb]
7355          (%i3) r1 (8 + a*b + sin(x));
7356          (%o3)     [all atoms = 8, all nonatoms = sin(x) + a b]
7357          (%i4) defrule (r2, aa * bb,
7358                         ["all atoms" = aa, "all nonatoms" = bb]);
7359          bb aa partitions `product'
7360          (%o4)   r2 : aa bb -> [all atoms = aa, all nonatoms = bb]
7361          (%i5) r2 (8 * (a + b) * sin(x));
7362          (%o5)    [all atoms = 8, all nonatoms = (b + a) sin(x)]
7363
7364 -- Variable opcional: maxapplydepth
7365     Valor por defecto: 10000
7366
7367     La variable 'maxapplydepth' es la m�xima profundidad a la que van a
7368     introducirse 'apply1' y 'apply2'.
7369
7370 -- Variable opcional: maxapplyheight
7371     Valor por defecto: 10000
7372
7373     La variable 'maxapplyheight' es la m2'axima altura a la que
7374     escalar� 'applyb1' antes de detenerse.
7375
7376 -- Funci�n: remlet (<prod>, <nombre>)
7377 -- Funci�n: remlet ()
7378 -- Funci�n: remlet (all)
7379 -- Funci�n: remlet (all, <nombre>)
7380
7381     Elimina la �ltima regla de sustituci�n <prod> -> repl que haya sido
7382     definida por la funci�n 'let'.  Si se suministar el nombre la regla
7383     ser� borrada del paquete con ese mismo nombre.
7384
7385     Las llamadas 'remlet()' y 'remlet(all)' eliminan todas las reglas
7386     de sustituci�n del paquete de reglas actual.  Si se suministra el
7387     nombre de un paquete de reglas, como en 'remlet (all, <nombre>)',
7388     el paquete de reglas con ese <nombre> es tambi�n eliminado.
7389
7390     Si es necesario cambiar una sustituci�n haciendo uso de la misma
7391     producci�n, no es necesario llamar a 'remlet', simplemente
7392     redef�nase la sustituci�n utilizando la misma producci�n con la
7393     funci�n 'let' junto con el nuevo reemplazamiento y/o nombre de
7394     predicado.  De ser llamado nuevamente 'remlet (<prod>)' la
7395     sustituci�n original ser�a recuperada.
7396
7397     V�ase tambi�n 'remrule', que elimina una regla definida por
7398     'tellsimp' o 'tellsimpafter'.
7399
7400 -- Funci�n: remrule (<op>, <nombre_regla>)
7401 -- Funci�n: remrule (<op>, all)
7402
7403     Elimina las reglas previamente definidas por 'tellsimp' o
7404     'tellsimpafter'.
7405
7406     La llamada 'remrule (<op>, <nombre_regla>)' elimina la regla de
7407     nombre <nombre_regla> del operador <op>.
7408
7409     Independientemente de que <op> sea un operador propio de Maxima o
7410     haya sido definido por el usario (como los establecidos por
7411     'infix', 'prefix', etc.), tanto <op> como <rulename> deben ir
7412     encerrados entre comillas dobles.
7413
7414     La llamada 'remrule (<function>, all)' borra todas las reglas para
7415     el operador <op>.
7416
7417     V�ase tambi�n 'remlet', que elimina una regla definida mediante
7418     'let'.
7419
7420     Ejemplos:
7421
7422          (%i1) tellsimp (foo (aa, bb), bb - aa);
7423          (%o1)                   [foorule1, false]
7424          (%i2) tellsimpafter (aa + bb, special_add (aa, bb));
7425          (%o2)                   [+rule1, simplus]
7426          (%i3) infix ("@@");
7427          (%o3)                          @@
7428          (%i4) tellsimp (aa @@ bb, bb/aa);
7429          (%o4)                   [@@rule1, false]
7430          (%i5) tellsimpafter (quux (%pi, %e), %pi - %e);
7431          (%o5)                  [quuxrule1, false]
7432          (%i6) tellsimpafter (quux (%e, %pi), %pi + %e);
7433          (%o6)             [quuxrule2, quuxrule1, false]
7434          (%i7) [foo (aa, bb), aa + bb, aa @@ bb, quux (%pi, %e),
7435                 quux (%e, %pi)];
7436                                               bb
7437          (%o7) [bb - aa, special_add(aa, bb), --, %pi - %e, %pi + %e]
7438                                               aa
7439          (%i8) remrule (foo, foorule1);
7440          (%o8)                          foo
7441          (%i9) remrule ("+", ?\+rule1);
7442          (%o9)                           +
7443          (%i10) remrule ("@@", ?\@\@rule1);
7444          (%o10)                         @@
7445          (%i11) remrule (quux, all);
7446          (%o11)                        quux
7447          (%i12) [foo (aa, bb), aa + bb, aa @@ bb, quux (%pi, %e),
7448                  quux (%e, %pi)];
7449          (%o12) [foo(aa, bb), bb + aa, aa @@ bb, quux(%pi, %e),
7450                                                   quux(%e, %pi)]
7451
7452 -- Funci�n: tellsimp (<patr�n>, <reemplazamiento>)
7453
7454     La funci�n 'tellsimp' es similar a 'tellsimpafter' pero coloca
7455     nueva informaci�n antes que la antigua, de manera que se aplica
7456     antes que las reglas de simplificaci�n de Maxima.
7457
7458     La funci�n 'tellsimp' se utiliza cuando es importante utilizar la
7459     expresi�n antes de que el simplificador opere sobre ella; por
7460     ejemplo, cuando el simplificador ya "sabe" algo sobre una
7461     expresi�n, pero lo que devuelve no es lo que quiere el usuario.  En
7462     cambio, cuando el simplificador ya "sabe" algo sobre una expresi�n
7463     pero lo que devuelve no es lo suficiente para el usuario, entonces
7464     �ste podr� estar interesado en utilizar 'tellsimpafter'.
7465
7466     El patr�n no puede ser una suma, ni un producto, ni una variable ni
7467     un n�mero.
7468
7469     'rules' es la lista de reglas definidas por 'defrule', 'defmatch',
7470     'tellsimp' y 'tellsimpafter'.
7471
7472     Ejemplos:
7473
7474          (%i1) matchdeclare (x, freeof (%i));
7475          (%o1)                         done
7476          (%i2) %iargs: false$
7477          (%i3) tellsimp (sin(%i*x), %i*sinh(x));
7478          (%o3)                 [sinrule1, simp-%sin]
7479          (%i4) trigexpand (sin (%i*y + x));
7480          (%o4)         sin(x) cos(%i y) + %i cos(x) sinh(y)
7481          (%i5) %iargs:true$
7482          (%i6) errcatch(0^0);
7483           0
7484          0  has been generated
7485          (%o6)                          []
7486          (%i7) ev (tellsimp (0^0, 1), simp: false);
7487          (%o7)                  [^rule1, simpexpt]
7488          (%i8) 0^0;
7489          (%o8)                           1
7490          (%i9) remrule ("^", %th(2)[1]);
7491          (%o9)                           ^
7492          (%i10) tellsimp (sin(x)^2, 1 - cos(x)^2);
7493          (%o10)                 [^rule2, simpexpt]
7494          (%i11) (1 + sin(x))^2;
7495                                                2
7496          (%o11)                    (sin(x) + 1)
7497          (%i12) expand (%);
7498                                             2
7499          (%o12)               2 sin(x) - cos (x) + 2
7500          (%i13) sin(x)^2;
7501                                            2
7502          (%o13)                     1 - cos (x)
7503          (%i14) kill (rules);
7504          (%o14)                        done
7505          (%i15) matchdeclare (a, true);
7506          (%o15)                        done
7507          (%i16) tellsimp (sin(a)^2, 1 - cos(a)^2);
7508          (%o16)                 [^rule3, simpexpt]
7509          (%i17) sin(y)^2;
7510                                            2
7511          (%o17)                     1 - cos (y)
7512
7513 -- Funci�n: tellsimpafter (<patr�n>, <reemplazamiento>)
7514
7515     Define una regla de simplificaci�n que el simplificador aplicar�
7516     despu�s de las reglas de simplificaci�n propias de de Maxima.  El
7517     <patr�n> es una expresi�n que contiene variables de patr�n
7518     (declaradas por 'matchdeclare') junto con otros �tomos y
7519     operadores.  El contenido de <reemplazamiento> sustituye una
7520     expresi�n que coincida con el patr�n; a las variables de patr�n en
7521     <reemplazamiento> se les asignan los valores coincidentes en la
7522     expresi�n.
7523
7524     El <patr�n> puede ser una expresi�n no at�mica en la que el
7525     operador principal no sea una variable de patr�n; la regla de
7526     simplificaci�n se asocia con el operador principal.  Los nombres de
7527     las funciones (con una excepci�n que se indica m�s abajo), listas y
7528     arrays pueden aparecer en el <patr�n> como operador principal s�lo
7529     como literales (no variables de patrones); esto excluye expresiones
7530     como 'aa(x)' y 'bb[y]', si tanto 'aa' como 'bb' son patrones de
7531     variables.  Nombres de funciones, listas y arrays que sean
7532     variables de patr�n pueden aparecer como operadores que no sean el
7533     operador principal de <patr�n>.
7534
7535     Hay una excepci�n a la regla indicada m�s arriba concerniente a los
7536     nombres de funciones.  El nombre de una funci�n subindicada en una
7537     expresi�n tal como 'aa[x](y)' puede ser una variable de patr�n
7538     porque el operador principal no es 'aa' sino el �tomo de Lisp
7539     'mqapply'.  Esta es una consecuencia de la representaci�n de
7540     expresiones que contienen funciones subindicadas.
7541
7542     Las reglas de simplificaci�n se aplican tras las evaluaciones (a
7543     menos que se supriman con el ap�strofo o la variable 'noeval').
7544     Las reglas establecidas por 'tellsimpafter' se aplican en el orden
7545     en que han sido definidas y despu�s de las reglas propias de
7546     Maxima.  Las reglas se aplican de abajo arriba, esto es, se aplican
7547     primero a las subexpresiones antes que a toda la expresi�n.  Puede
7548     ser necesario simplificar repetidamente un resultado (por ejemplo,
7549     mediante el operador de doble comilla simple '''' o la variable
7550     'infeval') para asegurar que se aplican todas las reglas.
7551
7552     Las variables de patr�n se tratan como variables locales en las
7553     reglas de simplificaci�n.  Una vez definida una regla, el valor de
7554     una variable de patr�n no afecta a la regla, ni se ve influenciada
7555     poe �sta.  Una asignaci�n a una variable de patr�n que resulta de
7556     la aplicaci�n exitosa de una regla no afecta a la asignaci�n actual
7557     de la variable de patr�n.  Sin embargo, como cualquier otro �tomo
7558     de Maxima, las propiedades de las variables de patr�n (tal como se
7559     definen con 'put' y sus funciones relacionadas) son globales.
7560
7561     La regla construida por 'tellsimpafter' es nombrada detr�s del
7562     operador principal de <patr�n>.  Reglas para operadores de Maxima y
7563     operadores definidos por el usuario con 'infix', 'prefix',
7564     'postfix', 'matchfix' y 'nofix', tienen nombres que son cadenas
7565     alfanum�ricas de Maxima.  Reglas para otras funciones tienen
7566     nombres que son identificadores ordinarios de Maxima.
7567
7568     El tratamiento de formas nominales y verbales es hasta cierto punto
7569     confuso.  Si se define una regla para una forma nominal (o verbal)
7570     y ya existe una regla para la correspondiente forma verbal (o
7571     nominal), la regla reci�n definida se aplica a ambas formas
7572     (nominal y verbal).  Si no existe regla para una forma verbal (o
7573     nominal) la regla reci�n definida se aplica �nicamente a la forma
7574     nominal (o verbal).
7575
7576     La regla construida por 'tellsimpafter' es una t�pica funci�n de
7577     Lisp.  Si el nombre de la regla es '$foorule1', la sentencia ':lisp
7578     (trace $foorule1)' hace una traza de la funci�n y ':lisp
7579     (symbol-function '$foorule1)' muestra su definici�n.
7580
7581     La funci�n 'tellsimpafter' no eval�a sus argumentos y devuelve la
7582     lista de reglas para el operador principal de <patr�n>, incluida la
7583     regla reci�n establecida.
7584
7585     V�anse tambi�n 'matchdeclare', 'defmatch', 'defrule', 'tellsimp',
7586     'let', 'kill', 'remrule' y 'clear_rules'.
7587
7588     Ejemplos:
7589
7590     <pattern> puede ser cualquier expresi�n no at�mica en la que el
7591     operador principal no sea una variable de patr�n.
7592
7593          (%i1) matchdeclare (aa, atom, [ll, mm], listp, xx, true)$
7594          (%i2) tellsimpafter (sin (ll), map (sin, ll));
7595          (%o2)                 [sinrule1, simp-%sin]
7596          (%i3) sin ([1/6, 1/4, 1/3, 1/2, 1]*%pi);
7597                              1  sqrt(2)  sqrt(3)
7598          (%o3)              [-, -------, -------, 1, 0]
7599                              2     2        2
7600          (%i4) tellsimpafter (ll^mm, map ("^", ll, mm));
7601          (%o4)                  [^rule1, simpexpt]
7602          (%i5) [a, b, c]^[1, 2, 3];
7603                                          2   3
7604          (%o5)                      [a, b , c ]
7605          (%i6) tellsimpafter (foo (aa (xx)), aa (foo (xx)));
7606          (%o6)                   [foorule1, false]
7607          (%i7) foo (bar (u - v));
7608          (%o7)                    bar(foo(u - v))
7609
7610     Las reglas se aplican en el orden en que se definen.  Si dos reglas
7611     coinciden con una expresi�n, se aplica aqu�lla que haya sido
7612     definida en primer lugar.
7613
7614          (%i1) matchdeclare (aa, integerp);
7615          (%o1)                         done
7616          (%i2) tellsimpafter (foo (aa), bar_1 (aa));
7617          (%o2)                   [foorule1, false]
7618          (%i3) tellsimpafter (foo (aa), bar_2 (aa));
7619          (%o3)              [foorule2, foorule1, false]
7620          (%i4) foo (42);
7621          (%o4)                       bar_1(42)
7622
7623     Las variables de patr�n se tratan como variables locales en las
7624     reglas de simplificaci�n.  (Comp�rese con 'defmatch', que trata las
7625     variables de patr�n como globales.)
7626
7627          (%i1) matchdeclare (aa, integerp, bb, atom);
7628          (%o1)                         done
7629          (%i2) tellsimpafter (foo(aa, bb), bar('aa=aa, 'bb=bb));
7630          (%o2)                   [foorule1, false]
7631          (%i3) bb: 12345;
7632          (%o3)                         12345
7633          (%i4) foo (42, %e);
7634          (%o4)                 bar(aa = 42, bb = %e)
7635          (%i5) bb;
7636          (%o5)                         12345
7637
7638     Como cualquier otro �tomo, las propiedades de las variables de
7639     patr�n son globales, incluso cuando sus valores sean locales.  En
7640     este ejemplo se declara una propiedad de asignaci�n a treav�s de
7641     'define_variable'.  Esta es una propiedad del �tomo 'bb' en todo
7642     Maxima.
7643
7644          (%i1) matchdeclare (aa, integerp, bb, atom);
7645          (%o1)                         done
7646          (%i2) tellsimpafter (foo(aa, bb), bar('aa=aa, 'bb=bb));
7647          (%o2)                   [foorule1, false]
7648          (%i3) foo (42, %e);
7649          (%o3)                 bar(aa = 42, bb = %e)
7650          (%i4) define_variable (bb, true, boolean);
7651          (%o4)                         true
7652          (%i5) foo (42, %e);
7653          Error: bb was declared mode boolean, has value: %e
7654           -- an error.  Quitting.  To debug this try debugmode(true);
7655
7656     Las reglas se nombran despu�s de los operadores principales.  Los
7657     nombres de reglas tanto para las funciones de Maxima como para las
7658     definidas por el usuario son cadenas alfanum�ricas, mientras que
7659     los nombres de las otras funciones son identificadores t�picos.
7660
7661          (%i1) tellsimpafter (foo (%pi + %e), 3*%pi);
7662          (%o1)                   [foorule1, false]
7663          (%i2) tellsimpafter (foo (%pi * %e), 17*%e);
7664          (%o2)              [foorule2, foorule1, false]
7665          (%i3) tellsimpafter (foo (%i ^ %e), -42*%i);
7666          (%o3)         [foorule3, foorule2, foorule1, false]
7667          (%i4) tellsimpafter (foo (9) + foo (13), quux (22));
7668          (%o4)                   [+rule1, simplus]
7669          (%i5) tellsimpafter (foo (9) * foo (13), blurf (22));
7670          (%o5)                  [*rule1, simptimes]
7671          (%i6) tellsimpafter (foo (9) ^ foo (13), mumble (22));
7672          (%o6)                  [^rule1, simpexpt]
7673          (%i7) rules;
7674          (%o7) [trigrule0, trigrule1, trigrule2, trigrule3, trigrule4,
7675          htrigrule1, htrigrule2, htrigrule3, htrigrule4, foorule1,
7676          foorule2, foorule3, +rule1, *rule1, ^rule1]
7677          (%i8) foorule_name: first (%o1);
7678          (%o8)                       foorule1
7679          (%i9) plusrule_name: first (%o4);
7680          (%o9)                        +rule1
7681          (%i10) [?mstringp (foorule_name), symbolp (foorule_name)];
7682          (%o10)                    [false, true]
7683          (%i11) [?mstringp (plusrule_name), symbolp (plusrule_name)];
7684          (%o11)                    [true, true]
7685          (%i12) remrule (foo, foorule1);
7686          (%o12)                         foo
7687          (%i13) remrule ("^", "^rule1");
7688          (%o13)                          ^
7689
7690     Un ejemplo de producto anticonmutativo.
7691
7692          (%i1) gt (i, j) := integerp(j) and i < j;
7693          (%o1)           gt(i, j) := integerp(j) and i < j
7694          (%i2) matchdeclare (i, integerp, j, gt(i));
7695          (%o2)                         done
7696          (%i3) tellsimpafter (s[i]^^2, 1);
7697          (%o3)                 [^^rule1, simpncexpt]
7698          (%i4) tellsimpafter (s[i] . s[j], -s[j] . s[i]);
7699          (%o4)                   [.rule1, simpnct]
7700          (%i5) s[1] . (s[1] + s[2]);
7701          (%o5)                    s  . (s  + s )
7702                                    1     2    1
7703          (%i6) expand (%);
7704          (%o6)                      1 - s  . s
7705                                          2    1
7706          (%i7) factor (expand (sum (s[i], i, 0, 9)^^5));
7707          (%o7) 100 (s  + s  + s  + s  + s  + s  + s  + s  + s  + s )
7708                      9    8    7    6    5    4    3    2    1    0
7709
7710 -- Funci�n: clear_rules ()
7711
7712     Ejecuta 'kill (rules)' y despu�s inicializa el siguiente n�mero de
7713     regla a 1 para la adici�n '+', multiplicaci�n '*' y exponenciaci�n
7714     '^'.
7715
7716