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