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: Conjuntos, Next: Definici�n de Funciones, Prev: Reglas y patrones, Up: Top 13 1435 Conjuntos 15************ 16 17* Menu: 18 19* Introducci�n a los conjuntos:: 20* Funciones y variables para los conjuntos:: 21 22 23File: maxima.info, Node: Introducci�n a los conjuntos, Next: Funciones y variables para los conjuntos, Prev: Conjuntos, Up: Conjuntos 24 2535.1 Introducci�n a los conjuntos 26================================= 27 28Maxima dispone de funciones para realizar operaciones con conjuntos, 29como la intersecci�n o la uni�n. Los conjuntos deben ser finitos y 30definidos por enumeraci�n. Maxima trata a los conjuntos y a las listas 31como objectos de distinta naturaleza, lo que permite trabajar con 32conjuntos cuyos elementos puedan ser tambi�n conjuntos o listas. 33 34Adem�s de funciones para operar con conjuntos finitos, Maxima dispone 35tambi�n de algunas funciones sobre combinatoria, como los n�meros de 36Stirling de primera y segunda especie, n�meros de Bell, coeficientes 37multinomiales, particiones de enteros no negativos y algunos otros. 38Maxima tambi�n define la funci�n delta de Kronecker. 39 4035.1.1 Utilizaci�n 41------------------ 42 43Para construir un conjunto cuyos elementos sean 'a_1, ..., a_n', se 44utiliza la instrucci�n 'set(a_1, ..., a_n)' o '{a_1, ..., a_n}'; para 45formar un conjunto vac�o, basta con hacer 'set()' o '{}'. Para 46introducir conjuntos en Maxima, 'set (...)' y '{ ... }' son 47equivalentes. Los conjuntos se muestran siempre con llave. 48 49Si un elemento se indica m�s de una vez, el proceso de simplificaci�n 50elimina los elementos redundantes. 51 52 (%i1) set(); 53 (%o1) {} 54 (%i2) set(a, b, a); 55 (%o2) {a, b} 56 (%i3) set(a, set(b)); 57 (%o3) {a, {b}} 58 (%i4) set(a, [b]); 59 (%o4) {a, [b]} 60 (%i5) {}; 61 (%o5) {} 62 (%i6) {a, b, a}; 63 (%o6) {a, b} 64 (%i7) {a, {b}}; 65 (%o7) {a, {b}} 66 (%i8) {a, [b]}; 67 (%o8) {a, [b]} 68 69Dos elementos candidatos a formar parte de un conjunto, <x> e <y>, son 70redundantes, esto es, se consideran el mismo elemento a efectos de 71consruir el conjunto, si y s�lo si 'is (<x> = <y>)' devuelve el valor 72'true'. N�tese que 'is (equal (<x>, <y>))' puede devolver 'true' y 'is 73(<x> = <y>)' retornar 'false'; en cuyo caso los elementos <x> e <y> se 74considerar�an distintos. 75 76 (%i1) x: a/c + b/c; 77 b a 78 (%o1) - + - 79 c c 80 (%i2) y: a/c + b/c; 81 b a 82 (%o2) - + - 83 c c 84 (%i3) z: (a + b)/c; 85 b + a 86 (%o3) ----- 87 c 88 (%i4) is (x = y); 89 (%o4) true 90 (%i5) is (y = z); 91 (%o5) false 92 (%i6) is (equal (y, z)); 93 (%o6) true 94 (%i7) y - z; 95 b + a b a 96 (%o7) - ----- + - + - 97 c c c 98 (%i8) ratsimp (%); 99 (%o8) 0 100 (%i9) {x, y, z}; 101 b + a b a 102 (%o9) {-----, - + -} 103 c c c 104 105Para formar un conjunto a partir de los miembros de una lista �sese 106'setify'. 107 108 (%i1) setify([b, a]); 109 (%o1) {a, b} 110 111Los elementos 'x' e 'y' de un conjunto se consideran iguales si 'is(x = 112y)' devuelve el valor 'true'. As�, 'rat(x)' y 'x' se consideran el 113mismo elemento de un conjunto; consecuentemente, 114 115 (%i1) {x, rat(x)}; 116 (%o1) {x} 117 118Adem�s, puesto que 'is((x-1)*(x+1) = x^2 - 1)' devuelve 'false', 119'(x-1)*(x+1)' y 'x^2-1' se consideran elementos diferentes; as� 120 121 (%i1) {(x - 1)*(x + 1), x^2 - 1}; 122 2 123 (%o1) {(x - 1) (x + 1), x - 1} 124 125Para reducir este conjunto a otro unitario, aplicar 'rat' a cada 126elemento del conjunto: 127 128 (%i1) {(x - 1)*(x + 1), x^2 - 1}; 129 2 130 (%o1) {(x - 1) (x + 1), x - 1} 131 (%i2) map (rat, %); 132 2 133 (%o2)/R/ {x - 1} 134 135Para eliminar redundancias con otros conjuntos, ser� necesario utilizar 136otras funciones de simplificaci�n. He aqu� un ejemplo que utiliza 137'trigsimp': 138 139 (%i1) {1, cos(x)^2 + sin(x)^2}; 140 2 2 141 (%o1) {1, sin (x) + cos (x)} 142 (%i2) map (trigsimp, %); 143 (%o2) {1} 144 145Se entiende que un conjunto est� simplificado cuando entre sus elementos 146no hay redundancias y se hayan ordenados. La versi�n actual de las 147funciones para conjuntos utiliza la funci�n 'orderlessp' de Maxima para 148ordenar sus elementos; sin embargo, futuras versiones de las funciones 149para operar con conjuntos podr�n utilizar otras funciones de ordenaci�n. 150 151Algunas operaciones con conjuntos, tales como la sustituci�n, fuerzan 152autom�ticamente una re-simplificaci�n; por ejemplo, 153 154 (%i1) s: {a, b, c}$ 155 (%i2) subst (c=a, s); 156 (%o2) {a, b} 157 (%i3) subst ([a=x, b=x, c=x], s); 158 (%o3) {x} 159 (%i4) map (lambda ([x], x^2), set (-1, 0, 1)); 160 (%o4) {0, 1} 161 162Maxima considera a las listas y conjuntos como objetos diferentes; 163funciones tales como 'union' y 'intersection' emitir�n un error si 164alguno de sus argumentos no es un conjunto. Si se necesita aplicar una 165funci�n de conjunto a una lista, se deber� utilizar la funci�n 'setify' 166para convertirla previamente en conjunto. As�, 167 168 (%i1) union ([1, 2], {a, b}); 169 Function union expects a set, instead found [1,2] 170 -- an error. Quitting. To debug this try debugmode(true); 171 (%i2) union (setify ([1, 2]), {a, b}); 172 (%o2) {1, 2, a, b} 173 174Para extraer todos los elementos de un conjunto 's' que satisfagan un 175predicado 'f', �sese 'subset(s,f)'. (Un predicado es una funci�n 176booleana.) Por ejemplo, para encontrar las ecuaciones en un conjunto 177dado que no dependan de la variable 'z', se har� 178 179 (%i1) subset ({x + y + z, x - y + 4, x + y - 5}, 180 lambda ([e], freeof (z, e))); 181 (%o1) {- y + x + 4, y + x - 5} 182 183La secci�n 'Funciones y variables para los conjuntos' incluye una lista 184completa de funciones para operar con conjuntos en Maxima. 185 18635.1.2 Iteraciones con elementos 187-------------------------------- 188 189Hay dos formas para operar iterativamente sobre los elementos de un 190conjunto. Una es utilizar 'map'; por ejemplo: 191 192 (%i1) map (f, {a, b, c}); 193 (%o1) {f(a), f(b), f(c)} 194 195La otra forma consiste en hacer uso de la construcci�n 'for <x> in <s> 196do' 197 198 (%i1) s: {a, b, c}; 199 (%o1) {a, b, c} 200 (%i2) for si in s do print (concat (si, 1)); 201 a1 202 b1 203 c1 204 (%o2) done 205 206Las funciones de Maxima 'first' y 'rest' funcionan tambi�n con 207conjuntos. En este caso, 'first' devuelve el primer elemento que se 208muestra del conjunto, el cual puede depender de la implementaci�n del 209sistema. Si 's' es un conjunto, entonces 'rest(s)' equivale a 'disjoin 210(first(s), s)'. Hay otras funciones que trabajan correctamente con 211conjuntos. En pr�ximas versiones de las funciones para operar con 212conjuntos es posible que 'first' y 'rest' trabajen de modo diferente o 213que ya no lo hagan en absoluto. 214 21535.1.3 Fallos 216------------- 217 218Las funciones para operar con conjuntos utilizan la funci�n 'orderlessp' 219de Maxima para ordenar los elementos de los conjuntos, as� como la 220funci�n 'like' de Lisp para decidir sobre la igualdad de dichos 221elementos. Ambas funciones tienen fallos que son conocidos y que pueden 222aflorar si se trabaja con conjuntos que tengan elementos en formato de 223listas o matrices y que contengan expresiones racionales can�nicas 224(CRE). Un ejemplo es 225 226 (%i1) {[x], [rat (x)]}; 227 Maxima encountered a Lisp error: 228 229 The value #:X1440 is not of type LIST. 230 231 Automatically continuing. 232 To reenable the Lisp debugger set *debugger-hook* to nil. 233 234Esta expresi�n provoca una parada de Maxima junto con la emisi�n de un 235mensaje de error, el cual depender� de la versi�n de Lisp que utilice 236Maxima. Otro ejemplo es 237 238 (%i1) setify ([[rat(a)], [rat(b)]]); 239 Maxima encountered a Lisp error: 240 241 The value #:A1440 is not of type LIST. 242 243 Automatically continuing. 244 To reenable the Lisp debugger set *debugger-hook* to nil. 245 246Estos fallos son causados por fallos en 'orderlessp' y 'like', no por 247fallos cuyo origen se encuentre en las funciones para conjuntos. Para 248ilustrarlo, se pueden ejecutar las siguientes expresiones 249 250 (%i1) orderlessp ([rat(a)], [rat(b)]); 251 Maxima encountered a Lisp error: 252 253 The value #:B1441 is not of type LIST. 254 255 Automatically continuing. 256 To reenable the Lisp debugger set *debugger-hook* to nil. 257 (%i2) is ([rat(a)] = [rat(a)]); 258 (%o2) false 259 260Hasta que estos errores no se corrijan, no es aconsejable construir 261conjuntos que tengan por elementos listas o matrices que contengan 262expresiones en forma CRE; sin embargo, un conjunto con elementos de la 263forma CRE no deber�an dar problemas: 264 265 (%i1) {x, rat (x)}; 266 (%o1) {x} 267 268La funci�n 'orderlessp' de Maxima tiene otro fallo que puede causar 269problemas con las funciones para conjuntos, en concreto, que el 270predicado de ordenaci�n 'orderlessp' no es transitivo. El ejemplo m�s 271simple que ilustra este punto es 272 273 (%i1) q: x^2$ 274 (%i2) r: (x + 1)^2$ 275 (%i3) s: x*(x + 2)$ 276 (%i4) orderlessp (q, r); 277 (%o4) true 278 (%i5) orderlessp (r, s); 279 (%o5) true 280 (%i6) orderlessp (q, s); 281 (%o6) false 282 283El fallo puede causar problemas con todas las funciones para conjuntos, 284as� como tambi�n con otras funciones de Maxima. Es probable, pero no 285seguro, que este fallo se puede evitar si todos los elementos del 286conjunto est�n en la forma de expresi�n racional can�nica (CRE) o han 287sido simplificados con 'ratsimp'. 288 289Los mecanismos 'orderless' y 'ordergreat' de Maxima son incompatibles 290con las funciones para conjuntos. Si se necesitan utilizar 'orderless' 291o 'ordergreat', h�gase antes de construir los conjuntos y no se utilice 292la instrucci�n 'unorder'. 293 294Se ruega a todo usuario que crea haber encontrado un fallo en las 295funciones para conjuntos que lo comunique en la base de datos de Maxima. 296V�ase 'bug_report'. 297 29835.1.4 Autores 299-------------- 300 301Stavros Macrakis de Cambridge, Massachusetts y Barton Willis de la 302University of Nebraska at Kearney (UNK). 303 304 305File: maxima.info, Node: Funciones y variables para los conjuntos, Prev: Introducci�n a los conjuntos, Up: Conjuntos 306 30735.2 Funciones y variables para los conjuntos 308============================================= 309 310 -- Funci�n: adjoin (<x>, <a>) 311 312 Calcula la uni�n del conjunto <a> y '{<x>}'. 313 314 La funci�n 'adjoin' emite un mensaje de error si <a> no es un 315 conjunto literal. 316 317 Las sentencias 'adjoin(<x>, <a>)' y 'union(set(<x>), <a>)' son 318 equivalentes, aunque 'adjoin' puede ser algo m�s r�pida que 319 'union'. 320 321 V�ase tambi�n 'disjoin'. 322 323 Ejemplos: 324 325 (%i1) adjoin (c, {a, b}); 326 (%o1) {a, b, c} 327 (%i2) adjoin (a, {a, b}); 328 (%o2) {a, b} 329 330 -- Funci�n: belln (<n>) 331 332 Representa el n-�simo n�mero de Bell, de modo que 'belln(n)' es el 333 n�mero de particiones de un conjunto de <n> elementos. 334 335 El argumento <n> debe ser un entero no negativo. 336 337 La funci�n 'belln' se distribuye sobre ecuaciones, listas, matrices 338 y conjuntos. 339 340 Ejemplos: 341 342 'belln' se aplica a enteros no negativos, 343 344 (%i1) makelist (belln (i), i, 0, 6); 345 (%o1) [1, 1, 2, 5, 15, 52, 203] 346 (%i2) is (cardinality (set_partitions ({})) = belln (0)); 347 (%o2) true 348 (%i3) is (cardinality (set_partitions ({1, 2, 3, 4, 5, 6})) 349 = belln (6)); 350 (%o3) true 351 352 Si <n> no es un entero no negativo, la funci�n 'belln(n)' no hace 353 c�lculo alguno. 354 355 (%i1) [belln (x), belln (sqrt(3)), belln (-9)]; 356 (%o1) [belln(x), belln(sqrt(3)), belln(- 9)] 357 358 -- Funci�n: cardinality (<a>) 359 360 Devuelve el n�mero de elementos del conjunto <a>. 361 362 La funci�n 'cardinality' ignora los elementos redundantes, incluso 363 cuando la simplificaci�n est� desabilitada. 364 365 Ejemplos: 366 367 (%i1) cardinality ({}); 368 (%o1) 0 369 (%i2) cardinality ({a, a, b, c}); 370 (%o2) 3 371 (%i3) simp : false; 372 (%o3) false 373 (%i4) cardinality ({a, a, b, c}); 374 (%o4) 3 375 376 -- Funci�n: cartesian_product (<b_1>, ... , <b_n>) 377 378 Devuelve un conjunto formado por listas de la forma '[<x_1>, ..., 379 <x_n>]', siendo <x_1>, ..., <x_n> elementos de los conjuntos <b_1>, 380 ... , <b_n>, respectivamente. 381 382 La funci�n 'cartesian_product' emite un mensaje de error si alguno 383 de sus argumentos no es un conjunto literal. 384 385 Ejemplos: 386 387 (%i1) cartesian_product ({0, 1}); 388 (%o1) {[0], [1]} 389 (%i2) cartesian_product ({0, 1}, {0, 1}); 390 (%o2) {[0, 0], [0, 1], [1, 0], [1, 1]} 391 (%i3) cartesian_product ({x}, {y}, {z}); 392 (%o3) {[x, y, z]} 393 (%i4) cartesian_product ({x}, {-1, 0, 1}); 394 (%o4) {[x, - 1], [x, 0], [x, 1]} 395 396 -- Funci�n: disjoin (<x>, <a>) 397 398 Devuelve el conjunto <a> sin el elemento <x>. Si <x> no es 399 elemento de <a>, entonces el resultado es el propio <a>. 400 401 La funci�n 'disjoin' emite un mensaje de error si <a> no es un 402 conjunto literal. 403 404 Las sentencias 'disjoin(<x>, <a>)', 'delete(<x>, <a>)' y 405 'setdifference(<a>, set(<x>))' son todas ellas equivalentes; pero 406 en general, 'disjoin' ser� m�s r�pida que las otras. 407 408 Ejemplos: 409 410 (%i1) disjoin (a, {a, b, c, d}); 411 (%o1) {b, c, d} 412 (%i2) disjoin (a + b, {5, z, a + b, %pi}); 413 (%o2) {5, %pi, z} 414 (%i3) disjoin (a - b, {5, z, a + b, %pi}); 415 (%o3) {5, %pi, b + a, z} 416 417 -- Funci�n: disjointp (<a>, <b>) 418 419 Devuelve 'true' si y s�lo si los conjuntos <a> y <b> son disjuntos. 420 421 La funci�n 'disjointp' emite un mensaje de error si <a> o <b> no 422 son conjuntos literales. 423 424 Ejemplos: 425 426 (%i1) disjointp ({a, b, c}, {1, 2, 3}); 427 (%o1) true 428 (%i2) disjointp ({a, b, 3}, {1, 2, 3}); 429 (%o2) false 430 431 -- Funci�n: divisors (<n>) 432 433 Calcula el conjunto de divisores de <n>. 434 435 La sentencia 'divisors(<n>)' devuelve un conjunto de enteros si <n> 436 es un entero no nulo. El conjunto de divisores incluye los 437 elementos 1 y <n>. Los divisores de un entero negativo son los 438 divisores de su valor absoluto. 439 440 La funci�n 'divisors' se distribuye sobre las ecuaciones, listas, 441 matrices y conjuntos. 442 443 Ejemplos: 444 445 Se puede comprobar que 28 es un n�mero perfecto: la suma de sus 446 divisores (excepto �l mismo) es 28. 447 448 (%i1) s: divisors(28); 449 (%o1) {1, 2, 4, 7, 14, 28} 450 (%i2) lreduce ("+", args(s)) - 28; 451 (%o2) 28 452 453 La funci�n 'divisors' es simplificadora. Haciendo la sustituci�n 454 de 'a' por 8 en 'divisors(a)' devuelve los divisores sin tener que 455 reevaluar 'divisors(8)', 456 457 (%i1) divisors (a); 458 (%o1) divisors(a) 459 (%i2) subst (8, a, %); 460 (%o2) {1, 2, 4, 8} 461 462 La funci�n 'divisors' se distribuye sobre ecuaciones, listas, 463 matrices y conjuntos. 464 465 (%i1) divisors (a = b); 466 (%o1) divisors(a) = divisors(b) 467 (%i2) divisors ([a, b, c]); 468 (%o2) [divisors(a), divisors(b), divisors(c)] 469 (%i3) divisors (matrix ([a, b], [c, d])); 470 [ divisors(a) divisors(b) ] 471 (%o3) [ ] 472 [ divisors(c) divisors(d) ] 473 (%i4) divisors ({a, b, c}); 474 (%o4) {divisors(a), divisors(b), divisors(c)} 475 476 -- Funci�n: elementp (<x>, <a>) 477 478 Devuelve 'true' si y s�lo si <x> es miembro del conjunto <a>. 479 480 La funci�n 'elementp' emite un mensaje de error si <a> no es un 481 conjunto literal. 482 483 Ejemplos: 484 485 (%i1) elementp (sin(1), {sin(1), sin(2), sin(3)}); 486 (%o1) true 487 (%i2) elementp (sin(1), {cos(1), cos(2), cos(3)}); 488 (%o2) false 489 490 -- Funci�n: emptyp (<a>) 491 Devuelve 'true' si y s�lo si <a> es el conjunto vac�o o la lista 492 vac�a. 493 494 Ejemplos: 495 496 (%i1) map (emptyp, [{}, []]); 497 (%o1) [true, true] 498 (%i2) map (emptyp, [a + b, {{}}, %pi]); 499 (%o2) [false, false, false] 500 501 -- Funci�n: equiv_classes (<s>, <F>) 502 503 Devuelve el conjunto de las clases de equivalencia del conjunto <s> 504 respecto de la relaci�n de equivalencia <F>. 505 506 El argumento <F> es una funci�n de dos variables definida sobre el 507 producto cartesiano <s> por <s>. El valor devuelto por <F> debe 508 ser 'true' o 'false', o bien una expresi�n <expr> tal que 509 'is(<expr>)' tome el valor 'true' o 'false'. 510 511 Si <F> no es una relaci�n de equivalencia, 'equiv_classes' la 512 acepta sin emitir ning�n mensaje de error, pero el resultado ser� 513 incorrecto en general. 514 515 Ejemplos: 516 517 La relaci�n de equivalencia es una expresi�n lambda que devuelve 518 'true' o 'false', 519 520 (%i1) equiv_classes ({1, 1.0, 2, 2.0, 3, 3.0}, 521 lambda ([x, y], is (equal (x, y)))); 522 (%o1) {{1, 1.0}, {2, 2.0}, {3, 3.0}} 523 524 La relaci�n de equivalencia es el nombre de una funci�n relacional 525 en la que 'is' eval�a a 'true' o 'false', 526 527 (%i1) equiv_classes ({1, 1.0, 2, 2.0, 3, 3.0}, equal); 528 (%o1) {{1, 1.0}, {2, 2.0}, {3, 3.0}} 529 530 Las clases de equivalencia son n�meros que difieren en un m�ltiplo 531 de 3. 532 533 (%i1) equiv_classes ({1, 2, 3, 4, 5, 6, 7}, 534 lambda ([x, y], remainder (x - y, 3) = 0)); 535 (%o1) {{1, 4, 7}, {2, 5}, {3, 6}} 536 537 -- Funci�n: every (<f>, <s>) 538 -- Funci�n: every (<f>, <L_1>, ..., <L_n>) 539 540 Devuelve 'true' si el predicado <f> vale 'true' para todos los 541 argumentos dados. 542 543 Dado un conjunto como segundo argumento, 'every(<f>, <s>)' devuelve 544 'true' si 'is(<f>(<a_i>))' devuelve 'true' para todos los <a_i> 545 pertenecientes <s>. La funci�n 'every' puede evaluar o no <f> para 546 todos los <a_i> pertenecientes <s>. Puesto que los conjuntos no 547 est�n ordenados, 'every' puede evaluar '<f>(<a_i>)' en cualquier 548 orden. 549 550 Dada una o m�s listas como argumentos, 'every(<f>, <L_1>, ..., 551 <L_n>)' devuelve 'true' si 'is(<f>(<x_1>, ..., <x_n>))' devuelve 552 'true' para todo <x_1>, ..., <x_n> en <L_1>, ..., <L_n>, 553 respectivamente. La funci�n 'every' puede evaluar o no <f> para 554 cualquier combinaci�n de <x_1>, ..., <x_n>; adem�s, 'every' eval�a 555 las listas en el orden creciente del �ndice. 556 557 Dado un conjunto vac�o '{}' o lista vac�a '[]' como argumentos, 558 'every' devuelve 'false'. 559 560 Si la variable global 'maperror' vale 'true', todas las listas 561 <L_1>, ..., <L_n> deben ser de igual longitud. Si 'maperror' vale 562 'false', los argumentos en forma de listas se truncan para igualar 563 sus longitudes a la de la lista m�s corta. 564 565 Los valores que devuelve el predicado <f> cuando toman (mediante 566 'is') un valor diferente a 'true' y 'false' se controlan con la 567 variable global 'prederror'. Si 'prederror' vale 'true', tales 568 valores se consideran como 'false' y la respuesta de 'every' es 569 'false'. Si 'prederror' vale 'false', tales valores se consideran 570 como desconocidos ('unknown') y la respuesta de 'every' es 571 'unknown'. 572 573 Ejemplos: 574 575 Se aplica 'every' a un �nico conjunto. El predicado es una funci�n 576 de un argumento. 577 578 (%i1) every (integerp, {1, 2, 3, 4, 5, 6}); 579 (%o1) true 580 (%i2) every (atom, {1, 2, sin(3), 4, 5 + y, 6}); 581 (%o2) false 582 583 Se aplica 'every' a dos listas. El predicado es una funci�n de dos 584 argumentos. 585 586 (%i1) every ("=", [a, b, c], [a, b, c]); 587 (%o1) true 588 (%i2) every ("#", [a, b, c], [a, b, c]); 589 (%o2) false 590 591 Las respuestas del predicado <f> que se eval�an a cualquier cosa 592 diferente de 'true' y 'false' est�n controlados por la variable 593 global 'prederror'. 594 595 (%i1) prederror : false; 596 (%o1) false 597 (%i2) map (lambda ([a, b], is (a < b)), [x, y, z], 598 [x^2, y^2, z^2]); 599 (%o2) [unknown, unknown, unknown] 600 (%i3) every ("<", [x, y, z], [x^2, y^2, z^2]); 601 (%o3) unknown 602 (%i4) prederror : true; 603 (%o4) true 604 (%i5) every ("<", [x, y, z], [x^2, y^2, z^2]); 605 (%o5) false 606 607 -- Funci�n: extremal_subset (<s>, <f>, max) 608 -- Funci�n: extremal_subset (<s>, <f>, min) 609 610 Calcula el subconjunto de <s> para el cual la funci�n <f> toma sus 611 valores mayor y menor. 612 613 La sentencia 'extremal_subset(<s>, <f>, max)' devuelve el 614 subconjunto del conjunto o lista <s> para el cual la funci�n real 615 <f> toma su valor m�ximo. 616 617 La sentencia 'extremal_subset(<s>, <f>, min)' devuelve el 618 subconjunto del conjunto o lista <s> para el cual la funci�n real 619 <f> toma su valor m�nimo. 620 621 Ejemplos 622 623 (%i1) extremal_subset ({-2, -1, 0, 1, 2}, abs, max); 624 (%o1) {- 2, 2} 625 (%i2) extremal_subset ({sqrt(2), 1.57, %pi/2}, sin, min); 626 (%o2) {sqrt(2)} 627 628 -- Funci�n: flatten (<expr>) 629 630 Recoge los argumentos de subexpresiones con el mismo operador que 631 <expr> y construye con ellas otra expresi�n a partir de estos 632 argumentos. 633 634 Aquellas subexpresiones en las que el operador es diferente del 635 operador principal de 'expr' se copian sin modificarse, incluso 636 cuando ellas mismas contengan subexpresiones en las que el operador 637 sea el mismo que el de 'expr'. 638 639 Es posible que 'flatten' construya expresiones en las que el n�mero 640 de argumentos difiera del n�mero admitido por el operador, lo cual 641 har� que se emita un mensaje de error. La funci�n 'flatten' no 642 intentar� detectar estas situaciones. 643 644 Las expresiones que tengan representaciones especiales, por ejemplo 645 las racionales can�nicas (CRE), no admiten que se aplique sobre 646 ellas la funci�n 'flatten'; en tales casos se devuelve el argumento 647 sin modificaci�n. 648 649 Ejemplos: 650 651 Aplicada a una lista, 'flatten' reune todos los elementos que son a 652 su vez listas. 653 654 (%i1) flatten ([a, b, [c, [d, e], f], [[g, h]], i, j]); 655 (%o1) [a, b, c, d, e, f, g, h, i, j] 656 657 Aplicado a un conjunto, 'flatten' reune todos los elementos que son 658 a su vez conjuntos. 659 660 (%i1) flatten ({a, {b}, {{c}}}); 661 (%o1) {a, b, c} 662 (%i2) flatten ({a, {[a], {a}}}); 663 (%o2) {a, [a]} 664 665 La funci�n 'flatten' es similar a la declaraci�n del operador 666 principal como n-ario. Sin embargo, 'flatten' no tiene efecto 667 alguno sobre subexpresiones que tengan un operador diferente del 668 principal, mientras que s� lo tiene una declaraci�n n-aria. 669 670 (%i1) expr: flatten (f (g (f (f (x))))); 671 (%o1) f(g(f(f(x)))) 672 (%i2) declare (f, nary); 673 (%o2) done 674 (%i3) ev (expr); 675 (%o3) f(g(f(x))) 676 677 La funci�n 'flatten' trata las funciones subindicadas como a 678 cualquier otro operador. 679 680 (%i1) flatten (f[5] (f[5] (x, y), z)); 681 (%o1) f (x, y, z) 682 5 683 684 Es posible que 'flatten' construya expresiones en las que el n�mero 685 de argumentos difiera del n�mero admitido por el operador. 686 687 (%i1) 'mod (5, 'mod (7, 4)); 688 (%o1) mod(5, mod(7, 4)) 689 (%i2) flatten (%); 690 (%o2) mod(5, 7, 4) 691 (%i3) ''%, nouns; 692 Wrong number of arguments to mod 693 -- an error. Quitting. To debug this try debugmode(true); 694 695 -- Funci�n: full_listify (<a>) 696 697 Sustituye los operadores de conjunto presentes en <a> por 698 operadores de listas, devolviendo el resultado. La funci�n 699 'full_listify' sustituye operadores de conjuntos en subexpresiones 700 anidadas, incluso cuando el operador principal no es 'set'. 701 702 La funci�n 'listify' sustituye �nicamente el operador principal. 703 704 Ejemplos: 705 706 (%i1) full_listify ({a, b, {c, {d, e, f}, g}}); 707 (%o1) [a, b, [c, [d, e, f], g]] 708 (%i2) full_listify (F (G ({a, b, H({c, d, e})}))); 709 (%o2) F(G([a, b, H([c, d, e])])) 710 711 -- Funci�n: fullsetify (<a>) 712 713 Si <a> es una lista, sustituye el operador de lista por el de 714 conjunto, aplicando posteriormente 'fullsetify' a todos los 715 elementos que son a su vez conjuntos. Si <a> no es una lista, se 716 devuelve sin cambio alguno. 717 718 La funci�n 'setify' sustituye solamente el operador principal. 719 720 Ejemplos: 721 722 En la salida '(%o2)' el argumento de 'f' no se convierte en 723 conjunto porque el operador principal de 'f([b])' no es una lista. 724 725 (%i1) fullsetify ([a, [a]]); 726 (%o1) {a, {a}} 727 (%i2) fullsetify ([a, f([b])]); 728 (%o2) {a, f([b])} 729 730 -- Funci�n: identity (<x>) 731 732 La funci�n 'identity' devuelve su argumento cualquiera que sea 733 �ste. 734 735 Ejemplos: 736 737 La funci�n 'identity' puede utilizarse como predicado cuando los 738 argumentos ya son valores booleanos. 739 740 (%i1) every (identity, [true, true]); 741 (%o1) true 742 743 -- Funci�n: integer_partitions (<n>) 744 -- Funci�n: integer_partitions (<n>, <len>) 745 746 Devuelve particiones enteras de <n>, esto es, listas de enteros 747 cuyas sumas son <n>. 748 749 La sentencia 'integer_partitions(<n>)' devuelve el conjunto de 750 todas las particiones del entero <n>. Cada partici�n es una lista 751 ordenada de mayor a menor. 752 753 La sentencia 'integer_partitions(<n>, <len>)' devuelve todas las 754 particiones de longitud <len> o menor; en este caso, se a�aden 755 ceros a cada partici�n con menos de <len> t�rminos para que todas 756 ellas sean de longitud <len>. Las particiones son listas ordenadas 757 de mayor a menor. 758 759 Una lista [a_1, ..., a_m] es una partici�n de un entero no negativo 760 n si (1) cada a_i es entero no nulo y (2) a_1 + ... + a_m = n. As�, 761 0 no tiene particiones. 762 763 Ejemplos: 764 765 (%i1) integer_partitions (3); 766 (%o1) {[1, 1, 1], [2, 1], [3]} 767 (%i2) s: integer_partitions (25)$ 768 (%i3) cardinality (s); 769 (%o3) 1958 770 (%i4) map (lambda ([x], apply ("+", x)), s); 771 (%o4) {25} 772 (%i5) integer_partitions (5, 3); 773 (%o5) {[2, 2, 1], [3, 1, 1], [3, 2, 0], [4, 1, 0], [5, 0, 0]} 774 (%i6) integer_partitions (5, 2); 775 (%o6) {[3, 2], [4, 1], [5, 0]} 776 777 Para encontrar todas las particiones que satisfagan cierta 778 condici�n, util�cese la funci�n 'subset'; he aqu� un ejemplo que 779 encuentra todas las particiones de 10 formadas por n�meros primos. 780 781 (%i1) s: integer_partitions (10)$ 782 (%i2) cardinality (s); 783 (%o2) 42 784 (%i3) xprimep(x) := integerp(x) and (x > 1) and primep(x)$ 785 (%i4) subset (s, lambda ([x], every (xprimep, x))); 786 (%o4) {[2, 2, 2, 2, 2], [3, 3, 2, 2], [5, 3, 2], [5, 5], [7, 3]} 787 788 -- Funci�n: intersect (<a_1>, ..., <a_n>) 789 Es una forma abreviada de la funci�n 'intersection'. 790 791 -- Funci�n: intersection (<a_1>, ..., <a_n>) 792 793 Devuelve el conjunto de todos los elementos que son comunes a los 794 conjuntos <a_1> a <a_n>. 795 796 Emite un mensaje de error en caso de que cualquiera de los <a_i> no 797 sea un conjunto. 798 799 Ejemplos: 800 801 (%i1) S_1 : {a, b, c, d}; 802 (%o1) {a, b, c, d} 803 (%i2) S_2 : {d, e, f, g}; 804 (%o2) {d, e, f, g} 805 (%i3) S_3 : {c, d, e, f}; 806 (%o3) {c, d, e, f} 807 (%i4) S_4 : {u, v, w}; 808 (%o4) {u, v, w} 809 (%i5) intersection (S_1, S_2); 810 (%o5) {d} 811 (%i6) intersection (S_2, S_3); 812 (%o6) {d, e, f} 813 (%i7) intersection (S_1, S_2, S_3); 814 (%o7) {d} 815 (%i8) intersection (S_1, S_2, S_3, S_4); 816 (%o8) {} 817 818 -- Funci�n: kron_delta (<x1>, <y1>, ..., <xp>, <yp>) 819 820 Es la funci�n delta de Kronecker. 821 822 La funci�n 'kron_delta' devuelve 1 cuando <xi> y <yi> son iguales 823 para todos los pares, devolviendo 0 si existe un par en el que <xi> 824 y <yi> no sean iguales. La igualdad se determina utilizando 825 'is(equal(xi,xj))' y la desigualdad con 'is(notequal(xi,xj))'. En 826 caso de un solo argumento, 'kron_delta' devuelve un mensaje de 827 error. 828 829 Ejemplos: 830 831 (%i1) kron_delta(a,a); 832 (%o1) 1 833 (%i2) kron_delta(a,b,a,b); 834 (%o2) kron_delta(a, b) 835 (%i3) kron_delta(a,a,b,a+1); 836 (%o3) 0 837 (%i4) assume(equal(x,y)); 838 (%o4) [equal(x, y)] 839 (%i5) kron_delta(x,y); 840 (%o5) 1 841 842 -- Funci�n: listify (<a>) 843 844 Si <a> es un conjunto, devuelve una lista con los elementos de <a>; 845 si <a> no es un conjunto, devuelve <a>. 846 847 La funci�n 'full_listify' sustituye todos los operadores de 848 conjunto en <a> por operadores de lista. 849 850 Ejemplos: 851 852 (%i1) listify ({a, b, c, d}); 853 (%o1) [a, b, c, d] 854 (%i2) listify (F ({a, b, c, d})); 855 (%o2) F({a, b, c, d}) 856 857 -- Funci�n: lreduce (<f>, <s>) 858 -- Funci�n: lreduce (<f>, <s>, <init>) 859 860 Ampl�a la funci�n binaria <F> a n-aria mediante composici�n, siendo 861 <s> una lista. 862 863 La sentencia 'lreduce(<F>, <s>)' devuelve 'F(... F(F(s_1, s_2), 864 s_3), ... s_n)'. Si se incluye el argumento opcional <s_0>, el 865 resultado equivale a 'lreduce(<F>, cons(<s_0>, <s>))'. 866 867 La funci�n <F> se aplica primero a los elementos del extremo 868 izquierdo de la lista, de ah� el nombre 'lreduce', (left reduce). 869 870 V�anse tambi�n 'rreduce', 'xreduce' y 'tree_reduce'. 871 872 Ejemplos: 873 874 La funci�n 'lreduce' sin el argumento opcional, 875 876 (%i1) lreduce (f, [1, 2, 3]); 877 (%o1) f(f(1, 2), 3) 878 (%i2) lreduce (f, [1, 2, 3, 4]); 879 (%o2) f(f(f(1, 2), 3), 4) 880 881 La funci�n 'lreduce' con el argumento opcional, 882 883 (%i1) lreduce (f, [1, 2, 3], 4); 884 (%o1) f(f(f(4, 1), 2), 3) 885 886 La funci�n 'lreduce' aplicada a operadores binarios de Maxima. El 887 s�mbolo '/' es el operador divisi�n. 888 889 (%i1) lreduce ("^", args ({a, b, c, d})); 890 b c d 891 (%o1) ((a ) ) 892 (%i2) lreduce ("/", args ({a, b, c, d})); 893 a 894 (%o2) ----- 895 b c d 896 897 -- Funci�n: makeset (<expr>, <x>, <s>) 898 899 Genera un conjunto cuyos miembros se generan a partir de la 900 expresi�n <expr>, siendo <x> una lista de variables de <expr> y <s> 901 un conjunto o lista de listas. Para generar los elementos del 902 conjunto, se eval�a <expr> asignando a las variables de <x> los 903 elementos de <s> en paralelo. 904 905 Los elementos de <s> deben tener la misma longitud que <x>. La 906 lista de variables <x> debe ser una lista de s�mbolos sin 907 sub�ndices. Cuando se trate de un �nico s�mbolo, <x> debe 908 expresarse como una lista de un elemento y cada elemento de <s> 909 debe ser una lista de un s�lo elemento. 910 911 V�ase tambi�n 'makelist'. 912 913 Ejemplos: 914 915 (%i1) makeset (i/j, [i, j], [[1, a], [2, b], [3, c], [4, d]]); 916 1 2 3 4 917 (%o1) {-, -, -, -} 918 a b c d 919 (%i2) S : {x, y, z}$ 920 (%i3) S3 : cartesian_product (S, S, S); 921 (%o3) {[x, x, x], [x, x, y], [x, x, z], [x, y, x], [x, y, y], 922 [x, y, z], [x, z, x], [x, z, y], [x, z, z], [y, x, x], 923 [y, x, y], [y, x, z], [y, y, x], [y, y, y], [y, y, z], 924 [y, z, x], [y, z, y], [y, z, z], [z, x, x], [z, x, y], 925 [z, x, z], [z, y, x], [z, y, y], [z, y, z], [z, z, x], 926 [z, z, y], [z, z, z]} 927 (%i4) makeset (i + j + k, [i, j, k], S3); 928 (%o4) {3 x, 3 y, y + 2 x, 2 y + x, 3 z, z + 2 x, z + y + x, 929 z + 2 y, 2 z + x, 2 z + y} 930 (%i5) makeset (sin(x), [x], {[1], [2], [3]}); 931 (%o5) {sin(1), sin(2), sin(3)} 932 933 -- Funci�n: moebius (<n>) 934 935 Representa la funci�n de Moebius. 936 937 Si <n> es el producto de k n�meros primos diferentes, 938 'moebius(<n>)' devuelve (-1)^k, retornando 1 si <n> = 1 y 0 para 939 cualesquiera otros enteros positivos. 940 941 La funci�n de Moebius se distribuye respecto de ecuaciones, listas, 942 matrices y conjuntos. 943 944 Ejemplos: 945 946 (%i1) moebius (1); 947 (%o1) 1 948 (%i2) moebius (2 * 3 * 5); 949 (%o2) - 1 950 (%i3) moebius (11 * 17 * 29 * 31); 951 (%o3) 1 952 (%i4) moebius (2^32); 953 (%o4) 0 954 (%i5) moebius (n); 955 (%o5) moebius(n) 956 (%i6) moebius (n = 12); 957 (%o6) moebius(n) = 0 958 (%i7) moebius ([11, 11 * 13, 11 * 13 * 15]); 959 (%o7) [- 1, 1, 1] 960 (%i8) moebius (matrix ([11, 12], [13, 14])); 961 [ - 1 0 ] 962 (%o8) [ ] 963 [ - 1 1 ] 964 (%i9) moebius ({21, 22, 23, 24}); 965 (%o9) {- 1, 0, 1} 966 967 -- Funci�n: multinomial_coeff (<a_1>, ..., <a_n>) 968 -- Funci�n: multinomial_coeff () 969 970 Calcula el coeficiente multinomial. 971 972 Si todos los <a_k> son enteros no negativos, el coeficiente 973 multinomial es el n�mero de formas de colocar '<a_1> + ... + <a_n>' 974 objetos diferentes en n cajas con <a_k> elementos en la k-�sima 975 caja. En general, 'multinomial_coeff (<a_1>, ..., <a_n>)' calcula 976 '(<a_1> + ... + <a_n>)!/(<a_1>! ... <a_n>!)'. 977 978 Si no se dan argumentos, 'multinomial_coeff()' devuelve 1. 979 980 Se puede usar 'minfactorial' para simplificar el valor devuelto por 981 'multinomial_coeff'. 982 983 Ejemplos: 984 985 (%i1) multinomial_coeff (1, 2, x); 986 (x + 3)! 987 (%o1) -------- 988 2 x! 989 (%i2) minfactorial (%); 990 (x + 1) (x + 2) (x + 3) 991 (%o2) ----------------------- 992 2 993 (%i3) multinomial_coeff (-6, 2); 994 (- 4)! 995 (%o3) -------- 996 2 (- 6)! 997 (%i4) minfactorial (%); 998 (%o4) 10 999 1000 -- Funci�n: num_distinct_partitions (<n>) 1001 -- Funci�n: num_distinct_partitions (<n>, <list>) 1002 1003 Si <n> es un entero no negativo, devuelve el n�mero de particiones 1004 enteras distintas de <n>, en caso contrario 1005 'num_distinct_partitions' devuelve una forma nominal. 1006 1007 La sentencia 'num_distinct_partitions(<n>, list)' devuelve una 1008 lista con el n�mero de particiones distintas de 1, 2, 3, ..., <n>. 1009 1010 Una partici�n distinta de <n> es una lista de n�meros enteros 1011 positivos distintos k_1, ..., k_m tales que <n> = k_1 + ... + k_m. 1012 1013 Ejemplos: 1014 1015 (%i1) num_distinct_partitions (12); 1016 (%o1) 15 1017 (%i2) num_distinct_partitions (12, list); 1018 (%o2) [1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15] 1019 (%i3) num_distinct_partitions (n); 1020 (%o3) num_distinct_partitions(n) 1021 1022 -- Funci�n: num_partitions (<n>) 1023 -- Funci�n: num_partitions (<n>, <list>) 1024 1025 Si <n> es un entero no negativo, devuelve el n�mero de particiones 1026 enteras de <n>, en caso contrario 'num_partitions' devuelve una 1027 expresi�n nominal. 1028 1029 La sentencia 'num_partitions(<n>, list)' devuelve una lista con los 1030 n�meros de particiones enteras de 1, 2, 3, ..., <n>. 1031 1032 Siendo <n> un entero no negativo, 'num_partitions(<n>)' es igual a 1033 'cardinality(integer_partitions(<n>))'; sin embargo, 1034 'num_partitions' no construye el conjunto de particiones, por lo 1035 que es m�s r�pido. 1036 1037 Ejemplos: 1038 1039 (%i1) num_partitions (5) = cardinality (integer_partitions (5)); 1040 (%o1) 7 = 7 1041 (%i2) num_partitions (8, list); 1042 (%o2) [1, 1, 2, 3, 5, 7, 11, 15, 22] 1043 (%i3) num_partitions (n); 1044 (%o3) num_partitions(n) 1045 1046 -- Funci�n: partition_set (<a>, <f>) 1047 1048 Particiona el conjunto <a> respecto del predicado <f>. 1049 1050 La funci�n 'partition_set' devuelve una lista con dos conjuntos; el 1051 primer conjunto es el subconjunto de <a> para el cual el predicado 1052 <f> devuelve 'false' y el segundo contiene al resto de elementos de 1053 <a>. 1054 1055 La funci�n 'partition_set' no aplica 'is' al valor devuelto por 1056 <f>. 1057 1058 La funci�n 'partition_set' emite un mensaje de error si <a> no es 1059 un conjunto literal. 1060 1061 V�ase tambi�n 'subset'. 1062 1063 Ejemplos: 1064 1065 (%i1) partition_set ({2, 7, 1, 8, 2, 8}, evenp); 1066 (%o1) [{1, 7}, {2, 8}] 1067 (%i2) partition_set ({x, rat(y), rat(y) + z, 1}, 1068 lambda ([x], ratp(x))); 1069 (%o2)/R/ [{1, x}, {y, y + z}] 1070 1071 -- Funci�n: permutations (<a>) 1072 1073 Devuelve un conjunto con todas las permutaciones distintas de los 1074 miembros de la lista o conjunto <a>. Cada permutaci�n es una 1075 lista, no un conjunto. 1076 1077 Si <a> es una lista, sus miembros duplicados no son eliminados 1078 antes de buscar sus permutaciones. 1079 1080 Si <a> no es una lista o conjunto, 'permutations' emite un mensaje 1081 de error. 1082 1083 V�ase tambi�n 'random_permutation'. 1084 1085 Ejemplos: 1086 1087 (%i1) permutations ([a, a]); 1088 (%o1) {[a, a]} 1089 (%i2) permutations ([a, a, b]); 1090 (%o2) {[a, a, b], [a, b, a], [b, a, a]} 1091 1092 -- Funci�n: powerset (<a>) 1093 -- Funci�n: powerset (<a>, <n>) 1094 1095 Devuelve el conjunto de todos los subconjuntos del conjunto <a> o 1096 un sunconjunto de ellos. 1097 1098 La sentencia 'powerset(<a>)' devuelve el conjunto de todos los 1099 subconjuntos de <a>, que contendr� '2^cardinality(<a>)' elementos. 1100 1101 La sentencia 'powerset(<a>, <n>)' devuelve el conjunto de todos los 1102 subconjuntos de <a> de cardinalidad <n>. 1103 1104 La funci�n 'powerset' emite un mensaje de error si <a> no es un 1105 conjunto literal o si <n> no es un entero no negativo. 1106 1107 Ejemplos: 1108 1109 (%i1) powerset ({a, b, c}); 1110 (%o1) {{}, {a}, {a, b}, {a, b, c}, {a, c}, {b}, {b, c}, {c}} 1111 (%i2) powerset ({w, x, y, z}, 4); 1112 (%o2) {{w, x, y, z}} 1113 (%i3) powerset ({w, x, y, z}, 3); 1114 (%o3) {{w, x, y}, {w, x, z}, {w, y, z}, {x, y, z}} 1115 (%i4) powerset ({w, x, y, z}, 2); 1116 (%o4) {{w, x}, {w, y}, {w, z}, {x, y}, {x, z}, {y, z}} 1117 (%i5) powerset ({w, x, y, z}, 1); 1118 (%o5) {{w}, {x}, {y}, {z}} 1119 (%i6) powerset ({w, x, y, z}, 0); 1120 (%o6) {{}} 1121 1122 -- Funci�n: random_permutation (<a>) 1123 1124 Devuelve una permutaci�n aleatoria del conjunto o lista <a>, 1125 siguiendo el algoritmo de Knuth. 1126 1127 El valor devuelto es una lista nueva distinta del argumento, 1128 incluso cuando todos los elementos son iguales. Sin embargo, los 1129 elementos del argumento no se copian. 1130 1131 Ejemplos: 1132 1133 (%i1) random_permutation ([a, b, c, 1, 2, 3]); 1134 (%o1) [c, 1, 2, 3, a, b] 1135 (%i2) random_permutation ([a, b, c, 1, 2, 3]); 1136 (%o2) [b, 3, 1, c, a, 2] 1137 (%i3) random_permutation ({x + 1, y + 2, z + 3}); 1138 (%o3) [y + 2, z + 3, x + 1] 1139 (%i4) random_permutation ({x + 1, y + 2, z + 3}); 1140 (%o4) [x + 1, y + 2, z + 3] 1141 1142 -- Funci�n: rreduce (<f>, <s>) 1143 -- Funci�n: rreduce (<f>, <s>, <init>) 1144 1145 Ampl�a la funci�n binaria <F> a n-aria mediante composici�n, siendo 1146 <s> una lista. 1147 1148 La sentencia 'rreduce(<F>, <s>)' devuelve 'F(s_1, ... F(s_{n - 2}, 1149 F(s_{n - 1}, s_n)))'. Si se incluye el argumento opcional <s_{n + 1150 1}>, el resultado equivale a 'rreduce(<F>, endcons(<s_{n + 1}>, 1151 <s>))'. 1152 1153 La funci�n <F> se aplica primero a los elementos del extremo 1154 derecho de la lista, de ah� el nombre 'rreduce', (right reduce). 1155 1156 V�anse tambi�n 'lreduce', 'xreduce' y 'tree_reduce'. 1157 1158 Ejemplos: 1159 1160 La funci�n 'rreduce' sin el argumento opcional, 1161 1162 (%i1) rreduce (f, [1, 2, 3]); 1163 (%o1) f(1, f(2, 3)) 1164 (%i2) rreduce (f, [1, 2, 3, 4]); 1165 (%o2) f(1, f(2, f(3, 4))) 1166 1167 La funci�n 'rreduce' con el argumento opcional, 1168 1169 (%i1) rreduce (f, [1, 2, 3], 4); 1170 (%o1) f(1, f(2, f(3, 4))) 1171 1172 La funci�n 'rreduce' aplicada a operadores binarios de Maxima. El 1173 s�mbolo '/' es el operador divisi�n. 1174 1175 (%i1) rreduce ("^", args ({a, b, c, d})); 1176 d 1177 c 1178 b 1179 (%o1) a 1180 (%i2) rreduce ("/", args ({a, b, c, d})); 1181 a c 1182 (%o2) --- 1183 b d 1184 1185 -- Funci�n: setdifference (<a>, <b>) 1186 1187 Devuelve el conjunto con los elementos del conjunto <a> que no 1188 pertenecen al conjunto <b>. 1189 1190 La funci�n 'setdifference' emite un mensaje de error si <a> o <b> 1191 no son conjuntos. 1192 1193 Ejemplos: 1194 1195 (%i1) S_1 : {a, b, c, x, y, z}; 1196 (%o1) {a, b, c, x, y, z} 1197 (%i2) S_2 : {aa, bb, c, x, y, zz}; 1198 (%o2) {aa, bb, c, x, y, zz} 1199 (%i3) setdifference (S_1, S_2); 1200 (%o3) {a, b, z} 1201 (%i4) setdifference (S_2, S_1); 1202 (%o4) {aa, bb, zz} 1203 (%i5) setdifference (S_1, S_1); 1204 (%o5) {} 1205 (%i6) setdifference (S_1, {}); 1206 (%o6) {a, b, c, x, y, z} 1207 (%i7) setdifference ({}, S_1); 1208 (%o7) {} 1209 1210 -- Funci�n: setequalp (<a>, <b>) 1211 1212 Devuelve 'true' si los conjuntos <a> y <b> tienen el mismo n�mero 1213 de elementos y 'is (<x> = <y>)' vale 'true' para 'x' perteneciente 1214 a <a> e 'y' perteneciente a <b>, considerados en el orden que 1215 determina la funci�n 'listify'. En caso contrario, 'setequalp' 1216 devuelve 'false'. 1217 1218 Ejemplos: 1219 1220 (%i1) setequalp ({1, 2, 3}, {1, 2, 3}); 1221 (%o1) true 1222 (%i2) setequalp ({a, b, c}, {1, 2, 3}); 1223 (%o2) false 1224 (%i3) setequalp ({x^2 - y^2}, {(x + y) * (x - y)}); 1225 (%o3) false 1226 1227 -- Funci�n: setify (<a>) 1228 1229 Construye un conjunto con los miembros de la lista <a>. Los 1230 elementos duplicados de la lista <a> son borrados y ordenados de 1231 acuerdo con el predicado 'orderlessp'. 1232 1233 La funci�n 'setify' emite un mensaje de error si <a> no es un 1234 conjunto literal. 1235 1236 Ejemplos: 1237 1238 (%i1) setify ([1, 2, 3, a, b, c]); 1239 (%o1) {1, 2, 3, a, b, c} 1240 (%i2) setify ([a, b, c, a, b, c]); 1241 (%o2) {a, b, c} 1242 (%i3) setify ([7, 13, 11, 1, 3, 9, 5]); 1243 (%o3) {1, 3, 5, 7, 9, 11, 13} 1244 1245 -- Funci�n: setp (<a>) 1246 1247 Devuelve 'true' si y s�lo si <a> es un conjunto de Maxima. 1248 1249 La funci�n 'setp' devuelve 'true' tanto cuando el conjunto tiene 1250 como cuando no tiene elementos repetidos. 1251 1252 La funci�n 'setp' is equivalent to the Maxima function 'setp(a) := 1253 not atom(a) and op(a) = 'set'. 1254 1255 Ejemplos: 1256 1257 (%i1) simp : false; 1258 (%o1) false 1259 (%i2) {a, a, a}; 1260 (%o2) {a, a, a} 1261 (%i3) setp (%); 1262 (%o3) true 1263 1264 -- Funci�n: set_partitions (<a>) 1265 -- Funci�n: set_partitions (<a>, <n>) 1266 1267 Devuelve el conjunto de todas las particiones de <a> o un 1268 subconjunto de ellas. 1269 1270 La sentencia 'set_partitions(<a>, <n>)' devuelve un conjunto con 1271 todas las descomposiciones de <a> en <n> conjuntos no vac�os 1272 disjuntos. 1273 1274 La sentencia 'set_partitions(<a>)' devuelve el conjunto de todas 1275 las particiones. 1276 1277 La funci�n 'stirling2' devuelve la cardinalidad del conjunto de las 1278 particiones de un conjunto. 1279 1280 Se dice que un conjunto P es una partici�n del conjunto S si 1281 verifica 1282 1283 1. cada elemento de P es un conjunto no vac�o, 1284 2. los elementos de P son disjuntos, 1285 3. la uni�n de los elementos de P es igual a S. 1286 1287 Ejemplos: 1288 1289 El conjunto vac�o forma una partici�n de s� mismo, 1290 1291 (%i1) set_partitions ({}); 1292 (%o1) {{}} 1293 1294 La cardinalidad del conjunto de particiones de un conjunto puede 1295 calcularse con 'stirling2', 1296 1297 (%i1) s: {0, 1, 2, 3, 4, 5}$ 1298 (%i2) p: set_partitions (s, 3)$ 1299 (%i3) cardinality(p) = stirling2 (6, 3); 1300 (%o3) 90 = 90 1301 1302 Cada elemento de 'p' deber�a tener <n> = 3 miembros, 1303 1304 (%i1) s: {0, 1, 2, 3, 4, 5}$ 1305 (%i2) p: set_partitions (s, 3)$ 1306 (%i3) map (cardinality, p); 1307 (%o3) {3} 1308 1309 Por �ltimo, para cada miembro de 'p', la uni�n de sus elementos 1310 debe ser igual a 's', 1311 1312 (%i1) s: {0, 1, 2, 3, 4, 5}$ 1313 (%i2) p: set_partitions (s, 3)$ 1314 (%i3) map (lambda ([x], apply (union, listify (x))), p); 1315 (%o3) {{0, 1, 2, 3, 4, 5}} 1316 1317 -- Funci�n: some (<f>, <a>) 1318 -- Funci�n: some (<f>, <L_1>, ..., <L_n>) 1319 1320 Devuelve 'true' si el predicado <f> devuelve 'true' para al menos 1321 uno de sus argumentos. Si el segundo argumento es un conjunto, 1322 'some (<f>, <a>)' devuelve 'true' si '<f>(<a_i>)' devuelve tambi�n 1323 'true' para alguno de los <a_i> en <a>; puede ser que 'some' no 1324 eval�e <f> para todos los <a_i> de <s>. Puesto que los conjuntos 1325 no est�n ordenados, 'some' puede evaluar '<f>(<a_i>)' en cualquier 1326 orden. 1327 1328 Dada una o m�s listas como argumentos, 'some (<f>, <L_1>, ..., 1329 <L_n>)' devuelve 'true' si '<f>(<x_1>, ..., <x_n>)' devuelve 1330 tambi�n 'true' para al menos un <x_1>, ..., <x_n> de <L_1>, ..., 1331 <L_n>, respectivamente; puede ser que 'some' no eval�e <f> para 1332 todos las combinaciones <x_1>, ..., <x_n>. La funci�n 'some' 1333 eval�a las listas en el orden creciente de su �ndice 1334 1335 Dado un conjunto vac�o '{}' o una lista vac�a como argumentos, 1336 'some' devuelve 'false'. 1337 1338 Si la variable global 'maperror' vale 'true', todas las listas 1339 <L_1>, ..., <L_n> deben tener igual n�mero de elementos. Si 1340 'maperror' vale 'false', los argumentos se truncan para tener todos 1341 el n�mero de elementos de la lista m�s corta. 1342 1343 Los valores que devuelve el predicado <f> cuando toman (mediante 1344 'is') un valor diferente a 'true' y 'false' se controlan con la 1345 variable global 'prederror'. Si 'prederror' vale 'true', tales 1346 valores se consideran como 'false'. Si 'prederror' vale 'false', 1347 tales valores se consideran como desconocidos ('unknown'). 1348 1349 Ejemplos: 1350 1351 La funci�n 'some' aplicada a un �nico conjunto. El predicado es 1352 una funci�n de un argumento, 1353 1354 (%i1) some (integerp, {1, 2, 3, 4, 5, 6}); 1355 (%o1) true 1356 (%i2) some (atom, {1, 2, sin(3), 4, 5 + y, 6}); 1357 (%o2) true 1358 1359 La funci�n 'some' aplicada a dos listas. El predicado es una 1360 funci�n de dos argumentos, 1361 1362 (%i1) some ("=", [a, b, c], [a, b, c]); 1363 (%o1) true 1364 (%i2) some ("#", [a, b, c], [a, b, c]); 1365 (%o2) false 1366 1367 Las respuestas del predicado <f> que se eval�an a cualquier cosa 1368 diferente de 'true' y 'false' est�n controlados por la variable 1369 global 'prederror'. 1370 1371 (%i1) prederror : false; 1372 (%o1) false 1373 (%i2) map (lambda ([a, b], is (a < b)), [x, y, z], 1374 [x^2, y^2, z^2]); 1375 (%o2) [unknown, unknown, unknown] 1376 (%i3) some ("<", [x, y, z], [x^2, y^2, z^2]); 1377 (%o3) unknown 1378 (%i4) some ("<", [x, y, z], [x^2, y^2, z + 1]); 1379 (%o4) true 1380 (%i5) prederror : true; 1381 (%o5) true 1382 (%i6) some ("<", [x, y, z], [x^2, y^2, z^2]); 1383 (%o6) false 1384 (%i7) some ("<", [x, y, z], [x^2, y^2, z + 1]); 1385 (%o7) true 1386 1387 -- Funci�n: stirling1 (<n>, <m>) 1388 1389 Es el n�mero de Stirling de primera especie. 1390 1391 Si tanto <n> como <m> son enteros no negativos, el valor que toma 1392 'stirling1 (<n>, <m>)' es el n�mero de permutaciones de un conjunto 1393 de <n> elementos con <m> ciclos. Para m�s detalles, v�ase Graham, 1394 Knuth and Patashnik Concrete Mathematics. Maxima utiliza una 1395 relaci�n recursiva para definir 'stirling1 (<n>, <m>)' para <m> 1396 menor que 0; no est� definida para <n> menor que 0 ni para 1397 argumentos no enteros. 1398 1399 La funci�n 'stirling1' es simplificadora. Maxima reconoce las 1400 siguientes identidades: 1401 1402 1. stirling1(0, n) = kron_delta(0, n) (Ref. [1]) 1403 2. stirling1(n, n) = 1 (Ref. [1]) 1404 3. stirling1(n, n - 1) = binomial(n, 2) (Ref. [1]) 1405 4. stirling1(n + 1, 0) = 0 (Ref. [1]) 1406 5. stirling1(n + 1, 1) = n! (Ref. [1]) 1407 6. stirling1(n + 1, 2) = 2^n - 1 (Ref. [1]) 1408 1409 Estas identidades se aplican cuando los argumentos son enteros 1410 literales o s�mbolos declarados como enteros y el primer argumento 1411 es no negativo. La funci�n 'stirling1' no simplifica para 1412 argumentos no enteros. 1413 1414 Referencias: 1415 1416 [1] Donald Knuth, The Art of Computer Programming, Tercera Edici�n, 1417 Volumen 1, Secci�n 1.2.6, Ecuaciones 48, 49 y 50. 1418 1419 Ejemplos: 1420 1421 (%i1) declare (n, integer)$ 1422 (%i2) assume (n >= 0)$ 1423 (%i3) stirling1 (n, n); 1424 (%o3) 1 1425 1426 La funci�n 'stirling1' no simplifica en caso de argumentos no 1427 enteros, 1428 1429 (%i1) stirling1 (sqrt(2), sqrt(2)); 1430 (%o1) stirling1(sqrt(2), sqrt(2)) 1431 1432 Maxima aplicas algunas identidades a 'stirling1', 1433 1434 (%i1) declare (n, integer)$ 1435 (%i2) assume (n >= 0)$ 1436 (%i3) stirling1 (n + 1, n); 1437 n (n + 1) 1438 (%o3) --------- 1439 2 1440 (%i4) stirling1 (n + 1, 1); 1441 (%o4) n! 1442 1443 -- Funci�n: stirling2 (<n>, <m>) 1444 1445 Es el n�mero de Stirling de segunda especie. 1446 1447 Si <n> y <m> son enteros no negativos, 'stirling2 (<n>, <m>)' es el 1448 n�mero de formas en las que se puede particionar un conjunto de 1449 cardinal <n> en <m> subconjuntos disjuntos. Maxima utiliza una 1450 relaci�n recursiva para definir 'stirling2 (<n>, <m>)' con <m> 1451 menor que 0; la funci�n no est� definida para <n> menor que 0 ni 1452 para argumentos no enteros. 1453 1454 La funci�n 'stirling2' es simplificadora. Maxima reconoce las 1455 siguientes identidades: 1456 1457 1. stirling2(0, n) = kron_delta(0, n) (Ref. [1]) 1458 2. stirling2(n, n) = 1 (Ref. [1]) 1459 3. stirling2(n, n - 1) = binomial(n, 2) (Ref. [1]) 1460 4. stirling2(n + 1, 1) = 1 (Ref. [1]) 1461 5. stirling2(n + 1, 2) = 2^n - 1 (Ref. [1]) 1462 6. stirling2(n, 0) = kron_delta(n, 0) (Ref. [2]) 1463 7. stirling2(n, m) = 0 when m > n (Ref. [2]) 1464 8. stirling2(n, m) = sum((-1)^(m - k) binomial(m k) k^n,i,1,m) / 1465 m! si m y n son enteros y n no negativo. (Ref. [3]) 1466 1467 Estas identidades se aplican cuando los argumentos son enteros 1468 literales o s�mbolos declarados como enteros y el primer argumento 1469 es no negativo. La funci�n 'stirling2' no simplifica para 1470 argumentos no enteros. 1471 1472 Referencias: 1473 1474 [1] Donald Knuth. The Art of Computer Programming, Tercera 1475 Edici�n, Volumen 1, Secci�n 1.2.6, Ecuaciones 48, 49 y 50. 1476 1477 [2] Graham, Knuth y Patashnik. Concrete Mathematics, Tabla 264. 1478 1479 [3] Abramowitz y Stegun. Handbook of Mathematical Functions, 1480 Secci�n 24.1.4. 1481 1482 Ejemplos: 1483 1484 (%i1) declare (n, integer)$ 1485 (%i2) assume (n >= 0)$ 1486 (%i3) stirling2 (n, n); 1487 (%o3) 1 1488 1489 La funci�n 'stirling2' no simplifica en caso de argumentos no 1490 enteros, 1491 1492 (%i1) stirling2 (%pi, %pi); 1493 (%o1) stirling2(%pi, %pi) 1494 1495 Maxima aplicas algunas identidades a 'stirling2', 1496 1497 (%i1) declare (n, integer)$ 1498 (%i2) assume (n >= 0)$ 1499 (%i3) stirling2 (n + 9, n + 8); 1500 (n + 8) (n + 9) 1501 (%o3) --------------- 1502 2 1503 (%i4) stirling2 (n + 1, 2); 1504 n 1505 (%o4) 2 - 1 1506 1507 -- Funci�n: subset (<a>, <f>) 1508 1509 Devuelve el subconjunto del conjunto <a> que satisface el predicado 1510 <f>. 1511 1512 La funci�n 'subset' devuelve el conjunto que contiene a los 1513 elementos de <a> para los cuales <f> devuelve un resultado 1514 diferente de 'false'. La funci�n 'subset' no aplica 'is' al valor 1515 retornado por <f>. 1516 1517 La funci�n 'subset' emite un mensaje de error si <a> no es un 1518 conjunto literal. 1519 1520 V�ase tambi�n 'partition_set'. 1521 1522 Ejemplos: 1523 1524 (%i1) subset ({1, 2, x, x + y, z, x + y + z}, atom); 1525 (%o1) {1, 2, x, z} 1526 (%i2) subset ({1, 2, 7, 8, 9, 14}, evenp); 1527 (%o2) {2, 8, 14} 1528 1529 -- Funci�n: subsetp (<a>, <b>) 1530 1531 Devuelve 'true' si y s�lo si el conjunto <a> es un subconjunto de 1532 <b>. 1533 1534 La funci�n 'subsetp' emite un mensaje de error si cualesquiera <a> 1535 o <b> no es un conjunto literal. 1536 1537 Ejemplos: 1538 1539 (%i1) subsetp ({1, 2, 3}, {a, 1, b, 2, c, 3}); 1540 (%o1) true 1541 (%i2) subsetp ({a, 1, b, 2, c, 3}, {1, 2, 3}); 1542 (%o2) false 1543 1544 -- Funci�n: symmdifference (<a_1>, ..., <a_n>) 1545 1546 Devuelve la diferencia sim�trica de los conjuntos ' <a_1>, ..., 1547 <a_n>'. 1548 1549 Dados dos argumentos, 'symmdifference (<a>, <b>)' equivale a 'union 1550 (setdifference (<a>, <b>), setdifference (<b>, <a>))'. 1551 1552 La funci�n 'symmdifference' emite un mensaje de error si alguno de 1553 su argumentos no es un conjunto literal. 1554 1555 Ejemplos: 1556 1557 (%i1) S_1 : {a, b, c}; 1558 (%o1) {a, b, c} 1559 (%i2) S_2 : {1, b, c}; 1560 (%o2) {1, b, c} 1561 (%i3) S_3 : {a, b, z}; 1562 (%o3) {a, b, z} 1563 (%i4) symmdifference (); 1564 (%o4) {} 1565 (%i5) symmdifference (S_1); 1566 (%o5) {a, b, c} 1567 (%i6) symmdifference (S_1, S_2); 1568 (%o6) {1, a} 1569 (%i7) symmdifference (S_1, S_2, S_3); 1570 (%o7) {1, b, z} 1571 (%i8) symmdifference ({}, S_1, S_2, S_3); 1572 (%o8) {1,b, z} 1573 1574 -- Funci�n: tree_reduce (<F>, <s>) 1575 -- Funci�n: tree_reduce (<F>, <s>, <s_0>) 1576 1577 Ampl�a la funci�n binaria <F> a n-aria, siendo <s> una lista. 1578 1579 La funci�n 'tree_reduce' equivale a lo suguiente: Aplicar <F> a 1580 pares sucesivos de elementos para formar una nueva lista 1581 '[<F>(<s_1>, <s_2>), <F>(<s_3>, <s_4>), ...]', llevando el elemento 1582 final sin cambiar si el n�mero de elementos es impar; despu�s 1583 repetir hasta que la lista se reduzca a un �nico elemento, que es 1584 el valor de retorno. 1585 1586 Cuando est� presente el argumento opcional <s_0>, el resultado 1587 equivale a 'tree_reduce(<F>, cons(<s_0>, <s>)'. 1588 1589 Para la suma de n�meros decimales en coma flotante, 'tree_reduce' 1590 puede devolver una suma que tenga un error de redondeo menor que el 1591 conseguido por 'rreduce' o 'lreduce'. 1592 1593 Los elementos de <s> y los resultados parciales pueden colocarse en 1594 un �rbol binario de m�nima profundidad, de ah� el nombre de 1595 tree_reduce. 1596 1597 Ejemplos: 1598 1599 La funci�n 'tree_reduce' aplicada a una lista con un n�mero par de 1600 elementos, 1601 1602 (%i1) tree_reduce (f, [a, b, c, d]); 1603 (%o1) f(f(a, b), f(c, d)) 1604 1605 La funci�n 'tree_reduce' aplicada a una lista con un n�mero impar 1606 de elementos, 1607 1608 (%i1) tree_reduce (f, [a, b, c, d, e]); 1609 (%o1) f(f(f(a, b), f(c, d)), e) 1610 1611 -- Function: union (<a_1>, ..., <a_n>) 1612 1613 Devuelve la uni�n de los conjuntos <a_1> hasta <a_n>. 1614 1615 La sentencia 'union()' (sin argumentos) devuelve el conjunto vac�o. 1616 1617 La funci�n 'union' emite un mensaje de error si alguno de sus 1618 argumentos no es un conjunto literal. 1619 1620 Ejemplos: 1621 1622 (%i1) S_1 : {a, b, c + d, %e}; 1623 (%o1) {%e, a, b, d + c} 1624 (%i2) S_2 : {%pi, %i, %e, c + d}; 1625 (%o2) {%e, %i, %pi, d + c} 1626 (%i3) S_3 : {17, 29, 1729, %pi, %i}; 1627 (%o3) {17, 29, 1729, %i, %pi} 1628 (%i4) union (); 1629 (%o4) {} 1630 (%i5) union (S_1); 1631 (%o5) {%e, a, b, d + c} 1632 (%i6) union (S_1, S_2); 1633 (%o6) {%e, %i, %pi, a, b, d + c} 1634 (%i7) union (S_1, S_2, S_3); 1635 (%o7) {17, 29, 1729, %e, %i, %pi, a, b, d + c} 1636 (%i8) union ({}, S_1, S_2, S_3); 1637 (%o8) {17, 29, 1729, %e, %i, %pi, a, b, d + c} 1638 1639 -- Funci�n: xreduce (<F>, <s>) 1640 -- Funci�n: xreduce (<F>, <s>, <s_0>) 1641 1642 Ampl�a la funci�n <F> a n-aria mediante composici�n; si <F> ya es 1643 n-aria, aplica <F> a <s>. Si <F> no es n-aria, 'xreduce' equivale 1644 a 'lreduce'. El argumento <s> debe ser una lista. 1645 1646 Funciones n-arias reconocidas por Maxima son la suma '+', la 1647 multiplicaci�n '*', 'and', 'or', 'max', 'min' y 'append'. Las 1648 funciones tambi�n se pueden declarar n-arias mediante 'declare(<F>, 1649 nary)'; para estas funciones, 'xreduce' ser� m�s r�pida que 1650 'rreduce' o 'lreduce'. 1651 1652 Cuando est� presente el argumento opcional <s_0>, el resultado 1653 equivale a 'xreduce(<s>, cons(<s_0>, <s>))'. 1654 1655 La suma de n�meros decimales en coma flotante no es exactamente 1656 asociativa; a�n as�, 'xreduce' aplica la suma n-aria cuando <s> 1657 contiene n�meros en coma flotante. 1658 1659 Ejemplos: 1660 1661 La funci�n 'xreduce' aplicada a una funci�n n-aria; 'F' es invocada 1662 una s�la vez, con todos sus argumentos, 1663 1664 (%i1) declare (F, nary); 1665 (%o1) done 1666 (%i2) F ([L]) := L; 1667 (%o2) F([L]) := L 1668 (%i3) xreduce (F, [a, b, c, d, e]); 1669 (%o3) [[[[[("[", simp), a], b], c], d], e] 1670 1671 La funci�n 'xreduce' aplicada a una funci�n que se desconoce si es 1672 n-aria; 'G' es invocada varias veces, con dos argumentos de cada 1673 vez, 1674 1675 (%i1) G ([L]) := L; 1676 (%o1) G([L]) := L 1677 (%i2) xreduce (G, [a, b, c, d, e]); 1678 (%o2) [[[[[("[", simp), a], b], c], d], e] 1679 (%i3) lreduce (G, [a, b, c, d, e]); 1680 (%o3) [[[[a, b], c], d], e] 1681 1682 1683File: maxima.info, Node: Definici�n de Funciones, Next: Programaci�n, Prev: Conjuntos, Up: Top 1684 168536 Definici�n de Funciones 1686************************** 1687 1688* Menu: 1689 1690* Introducci�n a la definici�n de funciones:: 1691* Funciones:: 1692* Macros:: 1693* Funciones y variables para la definici�n de funciones:: 1694 1695 1696File: maxima.info, Node: Introducci�n a la definici�n de funciones, Next: Funciones, Prev: Definici�n de Funciones, Up: Definici�n de Funciones 1697 169836.1 Introducci�n a la definici�n de funciones 1699============================================== 1700 1701 1702File: maxima.info, Node: Funciones, Next: Macros, Prev: Introducci�n a la definici�n de funciones, Up: Definici�n de Funciones 1703 170436.2 Funciones 1705============== 1706 170736.2.1 Funciones ordinarias 1708--------------------------- 1709 1710Para definir una funci�n en Maxima es necesario utilizar el operador 1711':='. 1712 1713Por ejemplo, 1714 1715 f(x) := sin(x) 1716 1717define una funci�n 'f'. Tambi�n se pueden definir funciones an�nimas 1718utilizando 'lambda'; por ejemplo, 1719 1720 lambda ([i, j], ...) 1721 1722puede utilizarse en lugar de 'f' donde 1723 1724 f(i,j) := block ([], ...); 1725 map (lambda ([i], i+1), l) 1726 1727devolver�a una lista con todos sus elementos aumentados en una unidad. 1728 1729Tambi�n se puede definir una funci�n con un n�mero variable de 1730argumentos, sin m�s que a�adir un argumento final al que se le asigna 1731una lista con todos los argumentos adicionales.: 1732 1733 (%i1) f ([u]) := u; 1734 (%o1) f([u]) := u 1735 (%i2) f (1, 2, 3, 4); 1736 (%o2) [1, 2, 3, 4] 1737 (%i3) f (a, b, [u]) := [a, b, u]; 1738 (%o3) f(a, b, [u]) := [a, b, u] 1739 (%i4) f (1, 2, 3, 4, 5, 6); 1740 (%o4) [1, 2, [3, 4, 5, 6]] 1741 1742El miembro derecho de una funci�n debe ser una expresi�n. As�, si se 1743quiere una secuencia de expresiones, se debe hacer 1744 1745 f(x) := (expr1, expr2, ...., exprn); 1746 1747siendo el valor que alcance exprn el devuelto por la funci�n. 1748 1749Si se quiere hacer un 'return' desde alguna de las expresiones de la 1750funci�n, se debe utilizar la estructura 'block' junto con 'return'. Por 1751ejemplo, 1752 1753 block ([], expr1, ..., if (a > 10) then return(a), ..., exprn) 1754 1755es una expresi�n de pleno derecho, por lo que puede ocupar el lado 1756derecho de la definici�n de una funci�n. Aqu� puede ocurrir que el 1757retorno se produzca antes que se alcance la �ltima expresi�n. 1758 1759Los primeros corchetes del bloque ('[]') pueden contener una lista de 1760variables junto con posibles asignaciones, tal como '[a: 3, b, c: []]', 1761lo que provocar� que las tres variables 'a','b' y 'c' se consideren 1762locales y sean independientes de otras globales con el mismo nombre; las 1763variables locales s�lo estar�n activas mientras se ejecute el c�digo que 1764est� dentro de la estructura 'block', o dentro de funciones que son 1765llamadas desde dentro de 'block'. A esto se le llama asignaci�n 1766din�mica, pues las variables sobreviven desde el inicio del bloque hasta 1767que �ste deje de estar operativo. Una vez se salga del bloque los 1768valores originales de las variables, si es que los hab�a, quedan 1769restaurados. Es recomendable proteger las variables de esta forma. Se 1770tendr� en cuenta que las asignaciones a las variables del bloque se 1771hacen en paralelo, lo que significa que si como en el ejemplo anterior 1772se hace 'c: a' en el momento de entrar en el bloque, el valor de 'c' 1773ser� el que ten�a 'a' antes de entrar en el bloque, es decir, antes de 1774la asignaci�n 'a: 3'. As�, haciendo lo siguiente 1775 1776 block ([a: a], expr1, ... a: a+3, ..., exprn) 1777 1778se prevendr�a de que el valor externo de 'a' fuese alterado, pero 1779permitir�a acceder a �l desde dentro del bloque. La parte derecha de 1780las asignaciones se eval�a dentro de su contexto antes de hacer efectiva 1781la asignaci�n. Utilizando �nicamente 'block([x],..' har�a que 'x' se 1782tuviese a s� misma como valor, justo como si se acabase de iniciar una 1783nueva sesi�n de Maxima. 1784 1785Los valores de los argumentos de una func�n se tratan exactamente de la 1786misma forma que las variables de un bloque. As�, con 1787 1788 f(x) := (expr1, ..., exprn); 1789 1790y 1791 1792 f(1); 1793 1794se estar�a en un contexto similar para la evaluaci�n de las expresiones 1795como si se hubiera hecho 1796 1797 block ([x: 1], expr1, ..., exprn) 1798 1799Dentro de las funciones, cuando el lado derecho de la definici�n deba 1800ser evaluado ser� �til hacer uso de 'define' y posiblemente de 'buildq'. 1801 180236.2.2 Funciones array 1803---------------------- 1804 1805Una funci�n array almacena el valor de la funci�n la primera vez que es 1806invocada con un argumento dado, devolviendo el valor almacenado sin 1807recalcularlo cuando es llamada con ese mismo argumento. Estas funciones 1808reciben tambi�n el nombre de funciones memorizadoras. 1809 1810Los nombres de las funciones array son a�adidos a la lista global 1811'arrays', no a la lista global 'functions'. La funci�n 'arrayinfo' 1812devuelve la lista de argumentos para los que hay valores almacenados y 1813'listarray' devuelve precisamente estos valores almacenados. Las 1814funciones 'dispfun' y 'fundef' devuelven la definici�n de la funci�n 1815array. 1816 1817La funci�n 'arraymake' construye una llamada a una funci�n array, de 1818forma similar a como lo hace 'funmake' para las funciones ordinarias. 1819Por otro lado, 'arrayapply' aplica una funci�n array a sus argumentos, 1820tal como lo hace 'apply' con las funciones ordinarias. No existe para 1821las funciones array nada similar a 'map', aunque 'map(lambda([<x>], 1822<a>[<x>]), <L>)' o 'makelist(<a>[<x>], <x>, <L>)', siendo <L> una lista, 1823podr�an suplantar esta carencia. 1824 1825La funci�n 'remarray' borra la definici�n de una funci�n array, as� como 1826cualesquiera valores almacenados que tenga asociados, tal como 1827'remfunction' lo hace con las funciones ordinarias. 1828 1829La llamada 'kill(<a>[<x>])' borra el valor de la funci�n array <a> 1830almacenado para el argumento <x>; la pr�xima vez que se llame a <a> con 1831el argumento <x>, se recalcular� el valor correspondiente. Sin embargo, 1832no hay forma de borrar todos los valores almacenados de una sola vez, 1833excepto mediante 'kill(<a>)' o 'remarray(<a>)', con lo que se borra 1834tambi�n la definici�n de la propia funci�n. 1835 1836 1837File: maxima.info, Node: Macros, Next: Funciones y variables para la definici�n de funciones, Prev: Funciones, Up: Definici�n de Funciones 1838 183936.3 Macros 1840=========== 1841 1842 -- Funci�n: buildq (<L>, <expr>) 1843 Sustituye en paralelo las variables nombradas en la lista <L> en la 1844 expresi�n <expr>, sin evaluar �sta. La expresi�n resultante se 1845 simplifica pero no se eval�a hasta que 'buildq' termine de hacer 1846 las sustituciones. 1847 1848 Los elementos de <L> son s�mbolos o expresiones de asignaci�n del 1849 tipo '<symbol>: <value>', evaluadas en paralelo. Esto es, el valor 1850 de una variable en la parte derecha de una asignaci�n es el valor 1851 que toma dicha variable en el contexto desde el que se invoca a 1852 'buildq'. En caso de que a una variable de <L> no se le haga una 1853 signaci�n expl�cita, su valor en 'buildq' es el mismo que tiene en 1854 el contexto desde el que se llama a 'buildq'. 1855 1856 Las variables referenciadas en <L> se sustituyen en <expr> en 1857 paralelo. Esto es, la sustituci�n para cada variable se determina 1858 antes de que se hagan las sustituciones, de forma que la 1859 sustituci�n de una variable no tiene efecto alguno sobre las otras. 1860 1861 Si alguna variable <x> aparece como 'splice (<x>)' en <expr>, 1862 entonces a <x> se le debe asignar una lista, la cual ser� 1863 interpolada en <expr> en lugar de hacer una simple sustituci�n; ver 1864 ejemplo m�s abajo. 1865 1866 Cualesquiera otras variables de <expr> que no aparezcan en <L> se 1867 traspasan al resultado tal cual, incluso cuando tienen asignados 1868 valores en el contexto desde el que se llama a 'buildq'. 1869 1870 Ejemplos: 1871 1872 'a' queda asociada expl�citamente a 'x', mientras que 'b' tiene la 1873 misma asociaci�n (29) que en el contexto de llamada y 'c' es 1874 traspasado al resultado sin ser sustituido. La expresi�n 1875 resultante no se eval�a hasta que no se le obligue a ello mediante 1876 la evaluaci�n expl�cita '''%'. 1877 1878 (%i1) (a: 17, b: 29, c: 1729)$ 1879 (%i2) buildq ([a: x, b], a + b + c); 1880 (%o2) x + c + 29 1881 (%i3) ''%; 1882 (%o3) x + 1758 1883 1884 En este ejemplo, 'e' se asocia a una lista, la cual aparece como 1885 tal en los argumentos de 'foo' e interpolada en los argumentos de 1886 'bar'. 1887 1888 (%i1) buildq ([e: [a, b, c]], foo (x, e, y)); 1889 (%o1) foo(x, [a, b, c], y) 1890 (%i2) buildq ([e: [a, b, c]], bar (x, splice (e), y)); 1891 (%o2) bar(x, a, b, c, y) 1892 1893 Como se ve a continuaci�n, el resultado se simplifica tras las 1894 sustituciones. Si la simplificaci�n se realizase antes que las 1895 sustituciones, ambos resultados ser�an iguales. 1896 1897 (%i1) buildq ([e: [a, b, c]], splice (e) + splice (e)); 1898 (%o1) 2 c + 2 b + 2 a 1899 (%i2) buildq ([e: [a, b, c]], 2 * splice (e)); 1900 (%o2) 2 a b c 1901 1902 Las variables de <L> se asocian en paralelo; si se hiciese 1903 secuencialmente, el primer resultado ser�a 'foo (b, b)'. Las 1904 sustituciones se llevan a cabo en paralelo. Comp�rese el segundo 1905 resultado con el resultado de 'subst', que hace las sustituciones 1906 de forma secuencial. 1907 1908 (%i1) buildq ([a: b, b: a], foo (a, b)); 1909 (%o1) foo(b, a) 1910 (%i2) buildq ([u: v, v: w, w: x, x: y, y: z, z: u], 1911 bar (u, v, w, x, y, z)); 1912 (%o2) bar(v, w, x, y, z, u) 1913 (%i3) subst ([u=v, v=w, w=x, x=y, y=z, z=u], 1914 bar (u, v, w, x, y, z)); 1915 (%o3) bar(u, u, u, u, u, u) 1916 1917 Se construye a continuaci�n un sistema de ecuaciones con algunas 1918 variables o expresiones en el lado izquierdo y sus valores en el 1919 derecho; 'macroexpand' muestra la expresi�n devuelta por 1920 'show_values'. 1921 1922 (%i1) show_values ([L]) ::= buildq ([L], map ("=", 'L, L)); 1923 (%o1) show_values([L]) ::= buildq([L], map("=", 'L, L)) 1924 (%i2) (a: 17, b: 29, c: 1729)$ 1925 (%i3) show_values (a, b, c - a - b); 1926 (%o3) [a = 17, b = 29, c - b - a = 1683] 1927 (%i4) macroexpand (show_values (a, b, c - a - b)); 1928 (%o4) map(=, '([a, b, c - b - a]), [a, b, c - b - a]) 1929 1930 Dada una funci�n con varios argumentos, se crea otra funci�n en la 1931 cual algunos argumentos son fijos. 1932 1933 (%i1) curry (f, [a]) := 1934 buildq ([f, a], lambda ([[x]], apply (f, append (a, x))))$ 1935 (%i2) by3 : curry ("*", 3); 1936 (%o2) lambda([[x]], apply(*, append([3], x))) 1937 (%i3) by3 (a + b); 1938 (%o3) 3 (b + a) 1939 1940 -- Funci�n: macroexpand (<expr>) 1941 Devuelve la macroexpansi�n de <expr>, sin evaluarla, cuando 'expr' 1942 es una llamada a una funci�n macro; en caso contrario, 1943 'macroexpand' devuelve <expr>. 1944 1945 Si la expansi�n de <expr> devuelve otra llamada a una funci�n 1946 macro, esta llamada tambi�n se expande. 1947 1948 La funci�n 'macroexpand' no eval�a su argumento. Sin embargo, si 1949 la expansi�n de una llamada a funci�n macro tiene efectos 1950 laterales, �stos se ejecutan. 1951 1952 V�anse tambi�n '::=', 'macros' y 'macroexpand1'. 1953 1954 Ejemplos: 1955 1956 (%i1) g (x) ::= x / 99; 1957 x 1958 (%o1) g(x) ::= -- 1959 99 1960 (%i2) h (x) ::= buildq ([x], g (x - a)); 1961 (%o2) h(x) ::= buildq([x], g(x - a)) 1962 (%i3) a: 1234; 1963 (%o3) 1234 1964 (%i4) macroexpand (h (y)); 1965 y - a 1966 (%o4) ----- 1967 99 1968 (%i5) h (y); 1969 y - 1234 1970 (%o5) -------- 1971 99 1972 1973 -- Funci�n: macroexpand1 (<expr>) 1974 Devuelve la macroexpansi�n de <expr>, sin evaluarla, cuando 'expr' 1975 es una llamada a una funci�n macro; en caso contrario, 1976 'macroexpand1' devuelve <expr>. 1977 1978 La funci�n 'macroexpand1' no eval�a su argumento. Sin embargo, si 1979 la expansi�n de una llamada a funci�n macro tiene efectos 1980 laterales, �stos se ejecutan. 1981 1982 Si la expansi�n de <expr> devuelve otra llamada a una funci�n 1983 macro, esta llamada no se expande. 1984 1985 V�anse tambi�n '::=', 'macros' y 'macroexpand'. 1986 1987 Ejemplos: 1988 1989 (%i1) g (x) ::= x / 99; 1990 x 1991 (%o1) g(x) ::= -- 1992 99 1993 (%i2) h (x) ::= buildq ([x], g (x - a)); 1994 (%o2) h(x) ::= buildq([x], g(x - a)) 1995 (%i3) a: 1234; 1996 (%o3) 1234 1997 (%i4) macroexpand1 (h (y)); 1998 (%o4) g(y - a) 1999 (%i5) h (y); 2000 y - 1234 2001 (%o5) -------- 2002 99 2003 2004 -- Variable global: macros 2005 Valor por defecto: '[]' 2006 2007 La variable 'macros' es la lista de las funciones macro definidas 2008 por el usuario. El operador de definici�n de funciones macro '::=' 2009 coloca la nueva funci�n macro en esta lista, mientras que 'kill', 2010 'remove' y 'remfunction' eliminan las funciones macro de la lista. 2011 2012 V�ase tambi�n 'infolists'. 2013 2014 -- Funci�n: splice (<a>) 2015 2016 Interpola la lista nombrada por el �tomo <a> dentro de una 2017 expresi�n, pero s�lo si 'splice' aparece dentro de 'buildq'; en 2018 otro caso, 'splice' se considera una funci�n no definida. Si <a> 2019 aparece dentro de 'buildq' sin 'splice', entonces queda sustituida 2020 por una lista dentro del resultado. El argumento de 'splice' debe 2021 ser un �tomo, no pudiendo ser una lista literal ni una expresi�n 2022 que devuelva una lista. 2023 2024 Normalmente 'splice' suministra los argumentos para una funci�n u 2025 operador. Para una funci�n 'f', la expresi�n 'f (splice (<a>))' 2026 dentro de 'buildq' se convierte en 'f (<a>[1], <a>[2], <a>[3], 2027 ...)'. Dado un operador 'o', la expresi�n '"o" (splice (<a>)' 2028 dentro de 'buildq' se convierte en '"o" (<a>[1], <a>[2], <a>[3], 2029 ...)', donde 'o' puede ser cualquier tipo de operador, normalmente 2030 uno que admita varios argumentos. N�tese que el operador debe ir 2031 encerrado entre comillas dobles '"'. 2032 2033 Ejemplos: 2034 2035 (%i1) buildq ([x: [1, %pi, z - y]], foo (splice (x)) / length (x)); 2036 foo(1, %pi, z - y) 2037 (%o1) ----------------------- 2038 length([1, %pi, z - y]) 2039 (%i2) buildq ([x: [1, %pi]], "/" (splice (x))); 2040 1 2041 (%o2) --- 2042 %pi 2043 (%i3) matchfix ("<>", "<>"); 2044 (%o3) <> 2045 (%i4) buildq ([x: [1, %pi, z - y]], "<>" (splice (x))); 2046 (%o4) <>1, %pi, z - y<> 2047 2048 2049File: maxima.info, Node: Funciones y variables para la definici�n de funciones, Prev: Macros, Up: Definici�n de Funciones 2050 205136.4 Funciones y variables para la definici�n de funciones 2052========================================================== 2053 2054 -- Funci�n: apply (<F>, [<x_1>, ..., <x_n>]) 2055 Construye y eval�a la expresi�n '<F>(<arg_1>, ..., <arg_n>)'. 2056 2057 La funci�n 'apply' no hace distinciones entre funciones array y 2058 funciones ordinarias; cuando <F> es el nombre de una funci�n array, 2059 'apply' eval�a '<F>(...)', esto es, hace una llamada con par�ntesis 2060 en lugar de corchetes. La funci�n 'arrayapply' eval�a una llamada 2061 a funci�n con corchetes para estos casos. 2062 2063 Ejemplos: 2064 2065 La funci�n 'apply' eval�a sus argumentos. En este ejemplo, 'min' 2066 se aplica al valor de 'L'. 2067 2068 (%i1) L : [1, 5, -10.2, 4, 3]; 2069 (%o1) [1, 5, - 10.2, 4, 3] 2070 (%i2) apply (min, L); 2071 (%o2) - 10.2 2072 2073 La funci�n 'apply' eval�a sus argumentos, incluso cuando la funci�n 2074 <F> no lo hace. 2075 2076 (%i1) F (x) := x / 1729; 2077 x 2078 (%o1) F(x) := ---- 2079 1729 2080 (%i2) fname : F; 2081 (%o2) F 2082 (%i3) dispfun (F); 2083 x 2084 (%t3) F(x) := ---- 2085 1729 2086 2087 (%o3) [%t3] 2088 (%i4) dispfun (fname); 2089 fname is not the name of a user function. 2090 -- an error. Quitting. To debug this try debugmode(true); 2091 (%i5) apply (dispfun, [fname]); 2092 x 2093 (%t5) F(x) := ---- 2094 1729 2095 2096 (%o5) [%t5] 2097 2098 La funci�n 'apply' eval�a el nombre de funci�n <F>. La comilla 2099 simple ''' evita la evaluaci�n. El nombre 'demoivre' corresponde a 2100 una variable global y tambi�n a una funci�n. 2101 2102 (%i1) demoivre; 2103 (%o1) false 2104 (%i2) demoivre (exp (%i * x)); 2105 (%o2) %i sin(x) + cos(x) 2106 (%i3) apply (demoivre, [exp (%i * x)]); 2107 demoivre evaluates to false 2108 Improper name or value in functional position. 2109 -- an error. Quitting. To debug this try debugmode(true); 2110 (%i4) apply ('demoivre, [exp (%i * x)]); 2111 (%o4) %i sin(x) + cos(x) 2112 2113 -- Funci�n: block ([<v_1>, ..., <v_m>], <expr_1>, ..., <expr_n>) 2114 -- Funci�n: block (<expr_1>, ..., <expr_n>) 2115 2116 La funci�n 'block' eval�a <expr_1>, ..., <expr_n> secuencialmente y 2117 devuelve el valor de la �ltima expresi�n evaluada. La secuencia 2118 puede alterarse con las funciones 'go', 'throw' y 'return'. La 2119 �ltima expresi�n es <expr_n> a menos que 'return' o una expresi�n 2120 que contenga un 'throw' sea evaluada. Las variables <v_1>, ..., 2121 <v_m> son locales en el bloque; �stas se distiguen de las globales 2122 que tengan el mismo nombre. Si no se declaran variables locales 2123 entonces se puede omitir la lista. Dentro del bloque, cualquier 2124 otra variable distinta de <v_1>, ..., <v_m> se considera global. 2125 2126 La funci�n 'block' guarda los valores actuales de las variables 2127 <v_1>, ..., <v_m>, si los tienen, a la entrada del bloque y luego 2128 las eval�a a s� mismas, es decir les saca el valor temporalmente. 2129 A las variables locales se les puede asignar cualquier valor dentro 2130 del bloque, pero al salir de �ste, los valores inicialmente 2131 almacenados quedan restaurados, al tiempo que los asignados dentro 2132 del bloque se pierden. 2133 2134 La declaraci�n 'local(<v_1>, ..., <v_m>)' dentro de un bloque 2135 almacena las propiedades asociadas a los s�mbolos <v_1>, ..., 2136 <v_m>, borra cualesquiera otras propiedades antes de evaluar las 2137 expresiones y restaura las propiedades guardadas antes de abandonar 2138 el bloque. Algunas declaraciones, como ':=', 'array', 2139 'dependencies', 'atvalue', 'matchdeclare', 'atomgrad', 'constant', 2140 'nonscalar', 'assume' y otras se implementan como propiedades de 2141 s�mbolos. El efecto producido por 'local' consiste en hacer que 2142 tales declaraciones tengan efecto s�lo dentro del bloque, en otro 2143 caso las declaraciones dentro del bloque tendr�an un efecto global 2144 que afectar�an al exterior de 'block'. 2145 2146 Un 'block' puede aparecer dentro de otro 'block'. Las variables 2147 locales se inicializan cada vez que se entra dentro de un nuevo 2148 bloque. Las variables locales de un bloque se consideran globales 2149 dentro de otro anidado dentro del primero. Si una variable es no 2150 local dentro de un bloque, su valor es el que le corresponde en el 2151 bloque superior. Este criterio se conoce con el nombre de "alcance 2152 din�mico". 2153 2154 El valor del bloque es el de la �ltima sentencia o el argumento de 2155 la funci�n 'return', que puede utilizarse para salir del bloque. 2156 La funci�n 'go' puede usarse para transferir el control a la 2157 sentencia del bloque que est� etiquetada con el argumento de 'go'. 2158 Para etiquetar una sentencia basta que vaya precedida de un 2159 argumento at�mico como cualquier otra sentencia dentro del bloque. 2160 Por ejemplo, 'block ([x], x:1, tururu, x: x+1, ..., go(tururu), 2161 ...)'. El argumento de 'go' debe ser el nombre de una etiqueta 2162 colocada dentro del bloque. No se puede utilzar 'go' para 2163 trasladarse a una etiqueta de un bloque que no sea el que contenga 2164 a 'go'. 2165 2166 Normalmente los bloques aparecer�n al lado derecho de las 2167 definiciones de funciones, pero tambi�n pueden utilizarse en otros 2168 contextos. 2169 2170 -- Funci�n: break (<expr_1>, ..., <expr_n>) 2171 2172 Calcula e imprime <expr_1>, ..., <expr_n> para luego provocar la 2173 detenci�n de Maxima, de modo que el usuario pueda examinar y 2174 cambiar el entorno de ejecuci�n. Pulsando posteriormente 'exit;' 2175 el c�lculo se reanuda. 2176 2177 -- Funci�n: catch (<expr_1>, ..., <expr_n>) 2178 2179 Eval�a <expr_1>, ..., <expr_n> una a una; si alguna de ellas 2180 conlleva la evaluaci�n de una expresi�n de la forma 'throw (arg)', 2181 entonces el valor de 'catch' es el de 'throw (arg)' y ya no se 2182 eval�an m�s expresiones. Esta respuesta pasa todos los niveles de 2183 anidamiento hasta el 'catch' m�s pr�ximo. Si no hay ning�n 'catch' 2184 que contenga un 'throw' se emite un mensaje de error. 2185 2186 Si la evaluaci�n de los argumentos no conlleva la evaluaci�n de 2187 ning�n 'throw', entonces el valor de 'catch' es el devuelto por 2188 <expr_n>. 2189 2190 (%i1) lambda ([x], if x < 0 then throw(x) else f(x))$ 2191 (%i2) g(l) := catch (map (''%, l))$ 2192 (%i3) g ([1, 2, 3, 7]); 2193 (%o3) [f(1), f(2), f(3), f(7)] 2194 (%i4) g ([1, 2, -3, 7]); 2195 (%o4) - 3 2196 2197 La funci�n 'g' devuelve las im�genes por 'f' de todos los elementos 2198 de la lista 'l' si �sta contiene �nicamente n�meros no negativos; 2199 si no es este el caso, entonces 'g' captura el primer negativo que 2200 encuentra y lo devuelve por medio del 'throw'. 2201 2202 -- Function: compfile (<filename>, <f_1>, ..., <f_n>) 2203 -- Function: compfile (<filename>, functions) 2204 -- Function: compfile (<filename>, all) 2205 2206 Traduce funciones de Maxima a c�digo Lisp, guard�ndolo luego en el 2207 fichero <filename>. 2208 2209 Con la llamada 'compfile(<filename>, <f_1>, ..., <f_n>)' se 2210 traducen las funciones especificadas, mientras que 2211 'compfile(<filename>, functions)' y 'compfile(<filename>, all)' 2212 traducen las funciones definidas por el usuario. 2213 2214 El c�digo Lisp traducido no se eval�a, ni el fichero de salida es 2215 procesado por el compilador de Lisp. La funci�n 'translate' crea y 2216 eval�a las traducciones Lisp, mientras que 'compile_file' traduce 2217 primero de Maxima a Lisp y luego ejecuta el compilador Lisp. 2218 2219 V�anse tambi�n 'translate', 'translate_file' y 'compile_file'. 2220 2221 -- Funci�n: compile (<f_1>, ..., <f_n>) 2222 -- Funci�n: compile (functions) 2223 -- Funci�n: compile (all) 2224 2225 Traduce las funciones de Maxima <f_1>, ..., <f_n> a Lisp, evaluando 2226 el c�digo resultante, y llama a la funci�n Lisp 'COMPILE' para cada 2227 funci�n traducida. La funci�n 'compile' devuelve una lista con los 2228 nombres de las funciones compiladas. 2229 2230 Las llamadas 'compile (all)' o 'compile (functions)' compilan todas 2231 las funciones definidas por el usuario. 2232 2233 La funci�n 'compile' no eval�a sus argumentos, pero con el operador 2234 comilla-comilla ('''') s� lo hace. 2235 2236 -- Funci�n: define (<f>(<x_1>, ..., <x_n>), <expr>) 2237 -- Funci�n: define (<f>[<x_1>, ..., <x_n>], <expr>) 2238 -- Funci�n: define (funmake (<f>, [<x_1>, ..., <x_n>]), <expr>) 2239 -- Funci�n: define (arraymake (<f>, [<x_1>, ..., <x_n>]), <expr>) 2240 -- Funci�n: define (ev (<expr_1>), <expr_2>) 2241 2242 Define una funci�n de nombre <f> con argumentos <x_1>, ..., <x_n> y 2243 cuerpo <expr>. 'define' eval�a siempre su segundo argumento, a 2244 menos que se indique lo contrario con el operador de comilla 2245 simple. La funci�n as� definida puede ser una funci�n ordinaria de 2246 Maxima (con sus argumentos encerrados entre par�ntesis) o una 2247 funci�n array (con sus argumentos encerrados entre corchetes). 2248 2249 Cuando el �ltimo o �nico argumento <x_n> es una lista de un solo 2250 elemento, la funci�n definida por 'define' acepta un n�mero 2251 variable de argumentos. Los valores de los argumentos se van 2252 asignando uno a uno a <x_1>, ..., <x_(n - 1)>, y los que queden, si 2253 los hay, se asignan a <x_n> en forma de lista. 2254 2255 Cuando el primer argumento de 'define' es una expresi�n de la forma 2256 '<f>(<x_1>, ..., <x_n>)' o '<f>[<x_1>, ..., <x_n>]', se eval�an los 2257 argumentos de la funci�n, pero no <f>, incluso cuando se trate de 2258 una funci�n o variable ya existente con ese nombre. 2259 2260 Cuando el primer argumento es una expresi�n con operador 'funmake', 2261 'arraymake' o 'ev', se eval�a este primer argumento, lo que permite 2262 calcular la funci�n. 2263 2264 Todas las definiciones de funciones aparecen en el mismo espacio de 2265 nombres; definiendo una funci�n 'f' dentro de otra funci�n 'g' no 2266 limita autom�ticamente el alcance de 'f' a 'g'. Sin embargo, 2267 'local(f)' hace que la definici�n de la funci�n 'f' sea efectiva 2268 s�lo dentro del bloque o expresi�n compuesta en el que aparece 2269 'local'. 2270 2271 Si un argumento formal <x_k> es un s�mbolo afectado por el operador 2272 comilla simple (expresi�n nominal), la funci�n definida por 2273 'define' no eval�a el correspondiente valor de argumento. En 2274 cualquier otro caso, los argumentos que se pasan son evaluados. 2275 2276 V�anse tambi�n ':=' y '::='. 2277 2278 Ejemplos: 2279 2280 'define' eval�a siempre su segundo argumento, a menos que se 2281 indique lo contrario con el operador de comilla simple. 2282 2283 (%i1) expr : cos(y) - sin(x); 2284 (%o1) cos(y) - sin(x) 2285 (%i2) define (F1 (x, y), expr); 2286 (%o2) F1(x, y) := cos(y) - sin(x) 2287 (%i3) F1 (a, b); 2288 (%o3) cos(b) - sin(a) 2289 (%i4) F2 (x, y) := expr; 2290 (%o4) F2(x, y) := expr 2291 (%i5) F2 (a, b); 2292 (%o5) cos(y) - sin(x) 2293 2294 La funci�n as� definida puede ser una funci�n ordinaria de Maxima o 2295 una funci�n array. 2296 2297 (%i1) define (G1 (x, y), x.y - y.x); 2298 (%o1) G1(x, y) := x . y - y . x 2299 (%i2) define (G2 [x, y], x.y - y.x); 2300 (%o2) G2 := x . y - y . x 2301 x, y 2302 2303 Cuando el �ltimo o �nico argumento <x_n> es una lista de un solo 2304 elemento, la funci�n definida por 'define' acepta un n�mero 2305 variable de argumentos. 2306 2307 (%i1) define (H ([L]), '(apply ("+", L))); 2308 (%o1) H([L]) := apply("+", L) 2309 (%i2) H (a, b, c); 2310 (%o2) c + b + a 2311 2312 Cuando el primer argumento es una expresi�n con operador 'funmake', 2313 'arraymake' o 'ev', se eval�a este primer argumento. 2314 2315 (%i1) [F : I, u : x]; 2316 (%o1) [I, x] 2317 (%i2) funmake (F, [u]); 2318 (%o2) I(x) 2319 (%i3) define (funmake (F, [u]), cos(u) + 1); 2320 (%o3) I(x) := cos(x) + 1 2321 (%i4) define (arraymake (F, [u]), cos(u) + 1); 2322 (%o4) I := cos(x) + 1 2323 x 2324 (%i5) define (foo (x, y), bar (y, x)); 2325 (%o5) foo(x, y) := bar(y, x) 2326 (%i6) define (ev (foo (x, y)), sin(x) - cos(y)); 2327 (%o6) bar(y, x) := sin(x) - cos(y) 2328 2329 -- Funci�n: define_variable (<name>, <default_value>, <mode>) 2330 2331 Introduce una variable global en el entorno de Maxima. La funci�n 2332 'define_variable' puede ser �til en los paquetes escritos por los 2333 usuarios que vayan a ser compilados o traducidos con frecuencia. 2334 2335 La funci�n 'define_variable' ejecuta los siguientes pasos: 2336 2337 1. 'mode_declare (<name>, <mode>)' declara el modo de <name> al 2338 traductor. V�ase 'mode_declare' para ver la lista de modos 2339 aceptables. 2340 2341 2. Si a�n no tiene asignaci�n, se le da a la variable 2342 <default_value> el valor <name>. 2343 2344 3. 'declare (<name>, special)' la declara como especial. 2345 2346 4. Asocia <name> a una funci�n de comprobaci�n para asegurar que 2347 a <name> s�lo se le asignan valores del modo declarado. 2348 2349 La propiedad 'value_check' se puede asociar a cualquier variable 2350 que haya sido definida mediante 'define_variable' en cualquiera de 2351 los modos diferentes a 'any'. La propiedad 'value_check' puede ser 2352 una expresi�n lambda o una funci�n de una variable, que ser� 2353 invocada al intentar asignar un valor a la variable; el argumento 2354 pasado a la funci�n 'value_check' es el valor que se le quiere 2355 asignar a la variable. 2356 2357 La funci�n 'define_variable' eval�a 'default_value' pero no 'name' 2358 ni 'mode'; el valor que devuelve es el valor actual de 'name', el 2359 cual es 'default_value' si a 'name' no se le ha aplicado ninguna 2360 asignaci�n, o el valor de dicha asignaci�n en caso contrario. 2361 2362 Ejemplos: 2363 2364 'foo' es una variable booleana con valor inicial 'true'. 2365 (%i1) define_variable (foo, true, boolean); 2366 (%o1) true 2367 (%i2) foo; 2368 (%o2) true 2369 (%i3) foo: false; 2370 (%o3) false 2371 (%i4) foo: %pi; 2372 Error: foo was declared mode boolean, has value: %pi 2373 -- an error. Quitting. To debug this try debugmode(true); 2374 (%i5) foo; 2375 (%o5) false 2376 2377 'bar' es una variable entera, cuyo valor habr� de ser primo. 2378 (%i1) define_variable (bar, 2, integer); 2379 (%o1) 2 2380 (%i2) qput (bar, prime_test, value_check); 2381 (%o2) prime_test 2382 (%i3) prime_test (y) := if not primep(y) then 2383 error (y, "is not prime."); 2384 (%o3) prime_test(y) := 2385 if not primep(y) then error(y, "is not prime.") 2386 (%i4) bar: 1439; 2387 (%o4) 1439 2388 (%i5) bar: 1440; 2389 1440 is not prime. 2390 #0: prime_test(y=1440) 2391 -- an error. Quitting. To debug this try debugmode(true); 2392 (%i6) bar; 2393 (%o6) 1439 2394 2395 'baz_quux' es una variable a la que no se le podr� asignar valor 2396 alguno. El modo 'any_check' es como 'any', pero 'any_check' activa 2397 el mecanismo 'value_check', cosa que 'any' no hace. 2398 (%i1) define_variable (baz_quux, 'baz_quux, any_check); 2399 (%o1) baz_quux 2400 (%i2) F: lambda ([y], if y # 'baz_quux then 2401 error ("Cannot assign to `baz_quux'.")); 2402 (%o2) lambda([y], if y # 'baz_quux 2403 then error(Cannot assign to `baz_quux'.)) 2404 (%i3) qput (baz_quux, ''F, value_check); 2405 (%o3) lambda([y], if y # 'baz_quux 2406 then error(Cannot assign to `baz_quux'.)) 2407 (%i4) baz_quux: 'baz_quux; 2408 (%o4) baz_quux 2409 (%i5) baz_quux: sqrt(2); 2410 Cannot assign to `baz_quux'. 2411 #0: lambda([y],if y # 'baz_quux then 2412 error("Cannot assign to `baz_quux'."))(y=sqrt(2)) 2413 -- an error. Quitting. To debug this try debugmode(true); 2414 (%i6) baz_quux; 2415 (%o6) baz_quux 2416 2417 -- Funci�n: dispfun (<f_1>, ..., <f_n>) 2418 -- Funci�n: dispfun (all) 2419 2420 Muestra la deficni�n de las funciones de usuario <f_1>, ..., <f_n>. 2421 Cada argumento puede ser el nombre de una macro (definida mediante 2422 '::='), una funci�n ordinaria (definida mediante ':=' o 'define'), 2423 una funci�n arreglo (definida mediante ':=' o 'define', pero 2424 encerrando los argumentos dentro de corchetes '[ ]'), una funci�n 2425 de sub�ndice (definida mediante ':=' o 'define', pero encerrando 2426 algunos argumentos entre corchetes y otros entre par�ntesis '( )'), 2427 una funci�n de sub�ndice seleccionada por un sub�ndice variable, o 2428 una funci�n de sub�ndice definida con un sub�ndice constante. 2429 2430 La llamada 'dispfun (all)' muestra todas las funciones de usuario 2431 tal como las dan las listas 'functions', 'arrays' y 'macros', 2432 omitiendo las funciones con sub�ndices definidas con sub�ndices 2433 constantes. 2434 2435 La funci�n 'dispfun' crea una etiqueta ('%t1', '%t2', etc.) para 2436 cada funci�n mostrada, y asigna la definici�n de la funci�n a la 2437 etiqueta. En contraste, 'fundef' devuelve las definiciones de las 2438 funciones. 2439 2440 La funci�n 'dispfun' no eval�a sus argumentos; el operador de 2441 comilla-comilla '''' permite la evaluaci�n. 2442 2443 La funci�n 'dispfun' devuelve la lista de etiquetas de expresiones 2444 intermedias correspondientes a las funciones mostradas. 2445 2446 Ejemplos: 2447 2448 (%i1) m(x, y) ::= x^(-y); 2449 - y 2450 (%o1) m(x, y) ::= x 2451 (%i2) f(x, y) := x^(-y); 2452 - y 2453 (%o2) f(x, y) := x 2454 (%i3) g[x, y] := x^(-y); 2455 - y 2456 (%o3) g := x 2457 x, y 2458 (%i4) h[x](y) := x^(-y); 2459 - y 2460 (%o4) h (y) := x 2461 x 2462 (%i5) i[8](y) := 8^(-y); 2463 - y 2464 (%o5) i (y) := 8 2465 8 2466 (%i6) dispfun (m, f, g, h, h[5], h[10], i[8]); 2467 - y 2468 (%t6) m(x, y) ::= x 2469 2470 - y 2471 (%t7) f(x, y) := x 2472 2473 - y 2474 (%t8) g := x 2475 x, y 2476 2477 - y 2478 (%t9) h (y) := x 2479 x 2480 2481 1 2482 (%t10) h (y) := -- 2483 5 y 2484 5 2485 2486 1 2487 (%t11) h (y) := --- 2488 10 y 2489 10 2490 2491 - y 2492 (%t12) i (y) := 8 2493 8 2494 2495 (%o12) [%t6, %t7, %t8, %t9, %t10, %t11, %t12] 2496 (%i12) ''%; 2497 - y - y - y 2498 (%o12) [m(x, y) ::= x , f(x, y) := x , g := x , 2499 x, y 2500 - y 1 1 - y 2501 h (y) := x , h (y) := --, h (y) := ---, i (y) := 8 ] 2502 x 5 y 10 y 8 2503 5 10 2504 2505 -- Funci�n: fullmap (<f>, <expr_1>, ...) 2506 Similar a 'map', pero conservar� el mapeado descendente de todas 2507 las subexpresiones hasta que los operadores principales ya no sean 2508 los mismos. 2509 2510 La funci�n 'fullmap' es utilizada por el simplificador de Maxima en 2511 algunas transformaciones matriciales, por lo que Maxima generar� en 2512 algunas ocasiones mensajes de error relacionados con 'fullmap' 2513 aunque el usuario no haya invocado expl�citamente esta funci�n. 2514 2515 (%i1) a + b * c; 2516 (%o1) b c + a 2517 (%i2) fullmap (g, %); 2518 (%o2) g(b) g(c) + g(a) 2519 (%i3) map (g, %th(2)); 2520 (%o3) g(b c) + g(a) 2521 2522 -- Funci�n: fullmapl (<f>, <list_1>, ...) 2523 Similar a 'fullmap', pero 'fullmapl' s�lo hace mapeo sobre listas y 2524 matrices. 2525 2526 (%i1) fullmapl ("+", [3, [4, 5]], [[a, 1], [0, -1.5]]); 2527 (%o1) [[a + 3, 4], [4, 3.5]] 2528 2529 -- Variable del sistema: functions 2530 Valor por defecto: '[]' 2531 2532 La variable 'functions' es una lista que contiene los nombres de 2533 las funciones ordinarias de Maxima. Una funci�n ordinaria es 2534 aquella que ha sido construida mediante cualquiera de los m�todos 2535 'define' o ':=' y que es invocada utilizando par�ntesis. Una 2536 funci�n puede definirse durante una sesi�n de Maxima o en un 2537 fichero que posteriormente ser� cargado en memoria por 'load' o 2538 'batch'. 2539 2540 Las funciones array, que son invocadas con corchetes ('F[x]'), y 2541 las funciones subindicadas, que son las invocadas con corchetes y 2542 par�ntesis ('F[x](y)') se registran en la variable global 'arrays', 2543 no en 'functions'. 2544 2545 Las funciones Lisp no se registran en ninguna lista. 2546 2547 Ejemplos: 2548 2549 (%i1) F_1 (x) := x - 100; 2550 (%o1) F_1(x) := x - 100 2551 (%i2) F_2 (x, y) := x / y; 2552 x 2553 (%o2) F_2(x, y) := - 2554 y 2555 (%i3) define (F_3 (x), sqrt (x)); 2556 (%o3) F_3(x) := sqrt(x) 2557 (%i4) G_1 [x] := x - 100; 2558 (%o4) G_1 := x - 100 2559 x 2560 (%i5) G_2 [x, y] := x / y; 2561 x 2562 (%o5) G_2 := - 2563 x, y y 2564 (%i6) define (G_3 [x], sqrt (x)); 2565 (%o6) G_3 := sqrt(x) 2566 x 2567 (%i7) H_1 [x] (y) := x^y; 2568 y 2569 (%o7) H_1 (y) := x 2570 x 2571 (%i8) functions; 2572 (%o8) [F_1(x), F_2(x, y), F_3(x)] 2573 (%i9) arrays; 2574 (%o9) [G_1, G_2, G_3, H_1] 2575 2576 -- Funci�n: fundef (<f>) 2577 2578 Devuelve la definici�n de la funci�n <f>. 2579 2580 Cada argumento puede ser el nombre de una macro (definida mediante 2581 '::='), una funci�n ordinaria (definida mediante ':=' o 'define'), 2582 una funci�n arreglo (definida mediante ':=' o 'define', pero 2583 encerrando los argumentos dentro de corchetes '[ ]'), una funci�n 2584 de sub�ndice (definida mediante ':=' o 'define', pero encerrando 2585 algunos argumentos entre corchetes y otros entre par�ntesis '( )'), 2586 una funci�n de sub�ndice seleccionada por un sub�ndice variable, o 2587 una funci�n de sub�ndice definida con un sub�ndice constante. 2588 2589 La funci�n 'fundef' no eval�a sus argumentos; el operador 2590 comilla-comilla '''' permite la evaluaci�n. 2591 2592 La llamada de funci�n 'fundef (<f>)' devuelve la definici�n de <f>. 2593 Por el contrario, 'dispfun (<f>)' crea una etiqueta intermedia y le 2594 asigna la definici�n a la etiqueta. 2595 2596 -- Funci�n: funmake (<F>, [<arg_1>, ..., <arg_n>]) 2597 2598 Devuelve una expresi�n '<F>(<arg_1>, ..., <arg_n>)'. El valor as� 2599 retornado es simplificado pero no evaluado, de forma que la funci�n 2600 <F> no es invocada, incluso cuando exista. 2601 2602 La funci�n 'funmake' no hace distinciones entre funciones array y 2603 funciones ordinarias; cuando <F> es el nombre de una funci�n array, 2604 'funmake' devuelve '<F>(...)', esto es, una llamada a funci�n con 2605 par�ntesis en lugar de corchetes. La funci�n 'arraymake' devuelve 2606 una llamada a funci�n con corchetes para estos casos. 2607 2608 La funci�n 'funmake' eval�a sus argumentos. 2609 2610 Ejemplos: 2611 2612 La funci�n 'funmake' aplicada a una funci�n ordinaria de Maxima. 2613 2614 (%i1) F (x, y) := y^2 - x^2; 2615 2 2 2616 (%o1) F(x, y) := y - x 2617 (%i2) funmake (F, [a + 1, b + 1]); 2618 (%o2) F(a + 1, b + 1) 2619 (%i3) ''%; 2620 2 2 2621 (%o3) (b + 1) - (a + 1) 2622 2623 La funci�n 'funmake' aplicada a una macro. 2624 2625 (%i1) G (x) ::= (x - 1)/2; 2626 x - 1 2627 (%o1) G(x) ::= ----- 2628 2 2629 (%i2) funmake (G, [u]); 2630 (%o2) G(u) 2631 (%i3) ''%; 2632 u - 1 2633 (%o3) ----- 2634 2 2635 2636 La funci�n 'funmake' aplicada a una funci�n subindicada. 2637 2638 (%i1) H [a] (x) := (x - 1)^a; 2639 a 2640 (%o1) H (x) := (x - 1) 2641 a 2642 (%i2) funmake (H [n], [%e]); 2643 n 2644 (%o2) lambda([x], (x - 1) )(%e) 2645 (%i3) ''%; 2646 n 2647 (%o3) (%e - 1) 2648 (%i4) funmake ('(H [n]), [%e]); 2649 (%o4) H (%e) 2650 n 2651 (%i5) ''%; 2652 n 2653 (%o5) (%e - 1) 2654 2655 La funci�n 'funmake' aplicada a un s�mbolo que no est� asociado a 2656 funci�n alguna. 2657 2658 (%i1) funmake (A, [u]); 2659 (%o1) A(u) 2660 (%i2) ''%; 2661 (%o2) A(u) 2662 2663 La funci�n 'funmake' eval�a sus argumentos, pero no el valor 2664 retornado. 2665 2666 (%i1) det(a,b,c) := b^2 -4*a*c; 2667 2 2668 (%o1) det(a, b, c) := b - 4 a c 2669 (%i2) (x : 8, y : 10, z : 12); 2670 (%o2) 12 2671 (%i3) f : det; 2672 (%o3) det 2673 (%i4) funmake (f, [x, y, z]); 2674 (%o4) det(8, 10, 12) 2675 (%i5) ''%; 2676 (%o5) - 284 2677 2678 Maxima simplifica el valor retornado de 'funmake'. 2679 2680 (%i1) funmake (sin, [%pi / 2]); 2681 (%o1) 1 2682 2683 -- Funci�n: lambda ([<x_1>, ..., <x_m>], <expr_1>, ..., <expr_n>) 2684 -- Function: lambda ([[<L>]], <expr_1>, ..., <expr_n>) 2685 -- Function: lambda ([<x_1>, ..., <x_m>, [<L>]], <expr_1>, ..., 2686 <expr_n>) 2687 Define y devuelve una expresi�n lambda (es decir, una funci�n 2688 an�nima). La funci�n puede tener argumentos <x_1>, ..., <x_m> y/o 2689 argumentos opcionales <L>, que aparecer�n dentro del cuerpo de la 2690 funci�n como una lista. El valor que devuelve la funci�n es 2691 <expr_n>. Una expresi�n lambda puede asignarse a una variable y 2692 ser evaluada como si fuese una funci�n ordinaria. Adem�s, puede 2693 aparecer en algunos contextos en los que sea necesario un nombre de 2694 funci�n. 2695 2696 Cuando se eval�a la funci�n, se crean las variables <x_1>, ..., 2697 <x_m> sin asignaci�n de valores. Una funci�n 'lambda' puede 2698 aparecer dentro de un 'block' o de otra 'lambda'. Las variables 2699 locales se inicializan cada vez que se entra dentro de un nuevo 2700 bloque o de otra funci�n 'lambda'. Las variables locales se 2701 consideran globales dentro de un bloque o funci�n 'lambda' anidado 2702 dentro del primero. Si una variable es no local dentro de un 2703 bloque o funci�n 'lambda', su valor es el que le corresponde en el 2704 bloque o funci�n 'lambda' superior. Este criterio se conoce con el 2705 nombre de "alcance din�mico". 2706 2707 Una vez establecidas las variables locales <expr_1> a <expr_n> son 2708 secuencialmente evaluadas. La variable especial '%%' representa el 2709 valor de la expresi�n inmediata anterior. Las sentencias 'throw' y 2710 'catch' pueden aparecer tambi�n en la lista de expresiones. 2711 2712 La funci�n 'return' no puede aparecer en una expresi�n 'lambda' a 2713 menos que se encuentre acotada dentro de un bloque ('block'), en 2714 cuyo caso 'return' establece el valor de retorno del bloque, pero 2715 no de la expresi�n 'lambda', a menos que el bloque resulte ser 2716 precisamente <expr_n>. De igual manera, 'go' no puede aparecer en 2717 una expresi�n 'lambda' si no es dentro de un 'block'. 2718 2719 Las funciones 'lambda' no eval�an sus argumentos; el operador 2720 comilla-comilla '''' permite su evaluaci�n. 2721 2722 Ejemplo: 2723 2724 * Una funci�n lambda puede asignarse a una variable y ser 2725 evaluada como si fuese una funci�n ordinaria. 2726 (%i1) f: lambda ([x], x^2); 2727 2 2728 (%o1) lambda([x], x ) 2729 (%i2) f(a); 2730 2 2731 (%o2) a 2732 * Una expresi�n lambda puede aparecer en algunos contextos en 2733 los que sea necesario un nombre de funci�n. 2734 (%i3) lambda ([x], x^2) (a); 2735 2 2736 (%o3) a 2737 (%i4) apply (lambda ([x], x^2), [a]); 2738 2 2739 (%o4) a 2740 (%i5) map (lambda ([x], x^2), [a, b, c, d, e]); 2741 2 2 2 2 2 2742 (%o5) [a , b , c , d , e ] 2743 * Los argumentos son variables locales. Otras variables se 2744 consideran globales. Las variables globales son evaluadas en 2745 el momento que lo es la expresi�n, a menos que la evaluaci�n 2746 de las mismas sea forzada, como cuando se hace uso de ''''. 2747 (%i6) a: %pi$ 2748 (%i7) b: %e$ 2749 (%i8) g: lambda ([a], a*b); 2750 (%o8) lambda([a], a b) 2751 (%i9) b: %gamma$ 2752 (%i10) g(1/2); 2753 %gamma 2754 (%o10) ------ 2755 2 2756 (%i11) g2: lambda ([a], a*''b); 2757 (%o11) lambda([a], a %gamma) 2758 (%i12) b: %e$ 2759 (%i13) g2(1/2); 2760 %gamma 2761 (%o13) ------ 2762 2 2763 * Las expresiones lambda pueden anidarse. Las variables locales 2764 de expresiones lambda exteriores se consideran globales en 2765 expresiones internas, a menos que se enmascaren con variables 2766 locales de igual nombre. 2767 (%i14) h: lambda ([a, b], h2: lambda ([a], a*b), h2(1/2)); 2768 1 2769 (%o14) lambda([a, b], h2 : lambda([a], a b), h2(-)) 2770 2 2771 (%i15) h(%pi, %gamma); 2772 %gamma 2773 (%o15) ------ 2774 2 2775 * Puesto que 'lambda' no eval�a sus argumentos, la expresi�n 2776 lambda 'i' de m�s abajo no define una funci�n del tipo 2777 "multiplicar por 'a'". Tal tipo de funci�n se puede definir a 2778 trav�s de 'buildq', como en la expresi�n lambda 'i2' de m�s 2779 abajo. 2780 (%i16) i: lambda ([a], lambda ([x], a*x)); 2781 (%o16) lambda([a], lambda([x], a x)) 2782 (%i17) i(1/2); 2783 (%o17) lambda([x], a x) 2784 (%i18) i2: lambda([a], buildq([a: a], lambda([x], a*x))); 2785 (%o18) lambda([a], buildq([a : a], lambda([x], a x))) 2786 (%i19) i2(1/2); 2787 x 2788 (%o19) lambda([x], -) 2789 2 2790 (%i20) i2(1/2)(%pi); 2791 %pi 2792 (%o20) --- 2793 2 2794 * Una expresi�n lambda puede tener un n�mero variable de 2795 argumentos, los cuales se indican mediante '[<L>]', bien sea 2796 solo o como un �ltimo argumento. Estos argumentos aparecer�n 2797 dentro del cuerpo de la funci�n en forma de lista. 2798 (%i1) f : lambda ([aa, bb, [cc]], aa * cc + bb); 2799 (%o1) lambda([aa, bb, [cc]], aa cc + bb) 2800 (%i2) f (foo, %i, 17, 29, 256); 2801 (%o2) [17 foo + %i, 29 foo + %i, 256 foo + %i] 2802 (%i3) g : lambda ([[aa]], apply ("+", aa)); 2803 (%o3) lambda([[aa]], apply(+, aa)) 2804 (%i4) g (17, 29, x, y, z, %e); 2805 (%o4) z + y + x + %e + 46 2806 2807 -- Funci�n: local (<v_1>, ..., <v_n>) 2808 2809 La declaraci�n 'local(<v_1>, ..., <v_m>)' dentro de un bloque 2810 almacena las propiedades asociadas a los s�mbolos <v_1>, ..., 2811 <v_m>, borra cualesquiera otras propiedades antes de evaluar las 2812 expresiones y restaura las propiedades guardadas antes de abandonar 2813 el bloque. 2814 2815 Algunas declaraciones, como ':=', 'array', 'dependencies', 2816 'atvalue', 'matchdeclare', 'atomgrad', 'constant', 'nonscalar', 2817 'assume' y otras se implementan como propiedades de s�mbolos. El 2818 efecto producido por 'local' consiste en hacer que tales 2819 declaraciones tengan efecto s�lo dentro del bloque, en otro caso 2820 las declaraciones dentro del bloque tendr�an un efecto global que 2821 afectar�an al exterior de 'block'. 2822 2823 La funci�n 'local' s�lo puede usarse dentro de un 'block', en el 2824 cuerpo de definici�n de funciones o de expresiones 'lambda' o en la 2825 funci�n 'ev', si�ndole permitido aparecer una s�la vez en cada una 2826 de ellas. 2827 2828 La funci�n 'local' no eval�a sus argumentos y devuelve 'done'. 2829 2830 Ejemplo: 2831 2832 Definici�n local de una funci�n. 2833 2834 (%i1) foo (x) := 1 - x; 2835 (%o1) foo(x) := 1 - x 2836 (%i2) foo (100); 2837 (%o2) - 99 2838 (%i3) block (local (foo), foo (x) := 2 * x, foo (100)); 2839 (%o3) 200 2840 (%i4) foo (100); 2841 (%o4) - 99 2842 2843 -- Variable opcional: macroexpansion 2844 Valor por defecto: 'false' 2845 2846 La variable 'macroexpansion' controla si la expansi�n (esto es, el 2847 valor de retorno) de una funci�n macro se sustituye por la llamada 2848 a la funci�n macro. Una sustituci�n puede acelerar futuras 2849 evaluaciones de la expresi�n, bajo el coste que implica tener que 2850 almacenar la expansi�n. 2851 2852 'false' 2853 La expansi�n de una funci�n macro no se sustituye por la 2854 llamada a la funci�n macro. 2855 'expand' 2856 La primera vez que se eval�a una llamada a funci�n macro se 2857 almacena la expansi�n. De esta manera la expansi�n no se 2858 recalcula en llamadas posteriores; cualesquiera efectos 2859 laterales (como 'print' o asignaciones a variables globales) 2860 tan solo tienen lugar la primera vez que la funci�n macro es 2861 evaluada. La expansi�n en una expresi�n no afecta a otras 2862 expresiones que llamen a la misma funci�n macro. 2863 'displace' 2864 La primera vez que se eval�a una llamada a una funci�n macro, 2865 la expansi�n se sustituye por la llamada, modificando as� la 2866 expresi�n desde la que se hizo la llamada a la funci�n macro. 2867 La expansi�n no se recalcula en llamadas posteriores; 2868 cualesquiera efectos laterales tan solo tienen lugar la 2869 primera vez que la funci�n macro es evaluada. La expansi�n en 2870 una expresi�n no afecta a otras expresiones que llamen a la 2871 misma funci�n macro. 2872 2873 Ejemplos: 2874 2875 Si 'macroexpansion' vale 'false', una funci�n macro es llamada cada 2876 vez que la expresi�n de llamada es evaluada. 2877 2878 (%i1) f (x) := h (x) / g (x); 2879 h(x) 2880 (%o1) f(x) := ---- 2881 g(x) 2882 (%i2) g (x) ::= block (print ("x + 99 is equal to", x), 2883 return (x + 99)); 2884 (%o2) g(x) ::= block(print("x + 99 is equal to", x), 2885 return(x + 99)) 2886 (%i3) h (x) ::= block (print ("x - 99 is equal to", x), 2887 return (x - 99)); 2888 (%o3) h(x) ::= block(print("x - 99 is equal to", x), 2889 return(x - 99)) 2890 (%i4) macroexpansion: false; 2891 (%o4) false 2892 (%i5) f (a * b); 2893 x - 99 is equal to x 2894 x + 99 is equal to x 2895 a b - 99 2896 (%o5) -------- 2897 a b + 99 2898 (%i6) dispfun (f); 2899 h(x) 2900 (%t6) f(x) := ---- 2901 g(x) 2902 2903 (%o6) done 2904 (%i7) f (a * b); 2905 x - 99 is equal to x 2906 x + 99 is equal to x 2907 a b - 99 2908 (%o7) -------- 2909 a b + 99 2910 2911 Si 'macroexpansion' vale 'expand', una funci�n macro tan solo es 2912 llamada una vez. 2913 2914 (%i1) f (x) := h (x) / g (x); 2915 h(x) 2916 (%o1) f(x) := ---- 2917 g(x) 2918 (%i2) g (x) ::= block (print ("x + 99 is equal to", x), 2919 return (x + 99)); 2920 (%o2) g(x) ::= block(print("x + 99 is equal to", x), 2921 return(x + 99)) 2922 (%i3) h (x) ::= block (print ("x - 99 is equal to", x), 2923 return (x - 99)); 2924 (%o3) h(x) ::= block(print("x - 99 is equal to", x), 2925 return(x - 99)) 2926 (%i4) macroexpansion: expand; 2927 (%o4) expand 2928 (%i5) f (a * b); 2929 x - 99 is equal to x 2930 x + 99 is equal to x 2931 a b - 99 2932 (%o5) -------- 2933 a b + 99 2934 (%i6) dispfun (f); 2935 h(x) 2936 (%t6) f(x) := ---- 2937 g(x) 2938 2939 (%o6) done 2940 (%i7) f (a * b); 2941 a b - 99 2942 (%o7) -------- 2943 a b + 99 2944 2945 Si 'macroexpansion' vale 'expand', una funci�n macro es llamada una 2946 vez y la expresi�n de llamada se modifica. 2947 2948 (%i1) f (x) := h (x) / g (x); 2949 h(x) 2950 (%o1) f(x) := ---- 2951 g(x) 2952 (%i2) g (x) ::= block (print ("x + 99 is equal to", x), return (x + 99)); 2953 (%o2) g(x) ::= block(print("x + 99 is equal to", x), 2954 return(x + 99)) 2955 (%i3) h (x) ::= block (print ("x - 99 is equal to", x), return (x - 99)); 2956 (%o3) h(x) ::= block(print("x - 99 is equal to", x), 2957 return(x - 99)) 2958 (%i4) macroexpansion: displace; 2959 (%o4) displace 2960 (%i5) f (a * b); 2961 x - 99 is equal to x 2962 x + 99 is equal to x 2963 a b - 99 2964 (%o5) -------- 2965 a b + 99 2966 (%i6) dispfun (f); 2967 x - 99 2968 (%t6) f(x) := ------ 2969 x + 99 2970 2971 (%o6) done 2972 (%i7) f (a * b); 2973 a b - 99 2974 (%o7) -------- 2975 a b + 99 2976 2977 -- Variable opcional: mode_checkp 2978 Valor por defecto: 'true' 2979 2980 Cuando 'mode_checkp' vale 'true', 'mode_declare' chequea los modos 2981 de las variables con valores asignados. 2982 2983 -- Variable opcional: mode_check_errorp 2984 Valor por defecto: 'false' 2985 2986 Cuando 'mode_check_errorp' vale 'true', 'mode_declare' llama a 2987 error. 2988 2989 -- Variable opcional: mode_check_warnp 2990 Valor por defecto: 'true' 2991 2992 Cuando 'mode_check_warnp' vale 'true', se detallan los errores de 2993 modo. 2994 2995 -- Funci�n: mode_declare (<y_1>, <modo_1>, ..., <y_n>, <modo_n>) 2996 2997 La funci�n 'mode_declare' se utiliza para declarar los modos de 2998 variables y funciones para la ulterior traducci�n a Lisp o 2999 compilaci�n de funciones. Se coloca habitualmente al comienzo de 3000 la definici�n de una funci�n, de un script en Maxima o se ejecuta 3001 en tiempo real. 3002 3003 Los argumentos de 'mode_declare' son pares formados por una 3004 variable y un modo, el cual debe ser 'boolean', 'fixnum', 'number', 3005 'rational' o 'float'. Cada variable puede ser sustituida por una 3006 lista de variables, en cuyo caso todas ellas tendr�n el mismo modo. 3007 3008 C�digo num�rico que utilice arreglos puede ejecutarse m�s r�pido 3009 declarando el tama�o que va a ocupar el arreglo, como en: 3010 3011 mode_declare (array (a [10, 10]), float) 3012 3013 para un arreglo de n�meros en coma flotante de dimensiones 10 x 10. 3014 3015 Se puede declarar el modo del resultado de una funci�n poniendo 3016 'function (f_1, f_2, ...)' como argumento; aqu� 'f_1', 'f_2', ... 3017 son los nombres de las funciones. Por ejemplo, la expresi�n 3018 3019 mode_declare ([function (f_1, f_2, ...)], fixnum) 3020 3021 declara que el valor a devolver por 'f_1', 'f_2', ... son enteros 3022 de modo "single-word". 3023 3024 El nombre 'modedeclare' es sin�nimo de 'mode_declare'. 3025 3026 -- Funci�n: mode_identity (<arg_1>, <arg_2>) 3027 Es una forma especial usada con 'mode_declare' y 'macros' para 3028 declarar, por ejemplo, una lista de listas de n�meros. 3029 3030 -- Funci�n: remfunction (<f_1>, ..., <f_n>) 3031 -- Funci�n: remfunction (all) 3032 Desliga las definiciones de funci�n de sus s�mbolos <f_1>, ..., 3033 <f_n>. Los argumentos pueden ser nombres de funciones ordinarias 3034 (creadas con ':=' o 'define') o de funciones macro (creadas con 3035 '::='). 3036 3037 La instrucci�n 'remfunction (all)' desliga todas las definiciones 3038 de funciones. 3039 3040 La funci�n 'remfunction' no eval�a sus argumentos. 3041 3042 La funci�n 'remfunction' devuelve una lista con los s�mbolos para 3043 los que la definici�n de funci�n fue desligada. Devuelve 'false' 3044 en el lugar de cualquier s�mbolo para el que no hay funci�n 3045 definida. 3046 3047 La funci�n 'remfunction' no se puede aplicar a arrays de funciones 3048 ni a funciones subindicadas. S� es aplicable en tales casos la 3049 funci�n 'remarray'. 3050 3051 -- Variable opcional: savedef 3052 Valor por defecto: 'true' 3053 3054 Si 'savedef' vale 'true', se mantiene la versi�n Maxima de una 3055 funci�n definida por el usuario cuando �sta se traduce, lo que 3056 permite mostrar su c�digo con 'dispfun' y que la funci�n pueda ser 3057 editada. 3058 3059 Si 'savedef' vale 'false', los nombres de las funciones traducidas 3060 se eliminan de la lista 'functions'. 3061 3062 -- Variable opcional: transcompile 3063 Valor por defecto: 'true' 3064 3065 Si 'transcompile' vale 'true', 'translate' y 'translate_file' 3066 generan declaraciones para hacer el c�digo traducido m�s apto para 3067 la compilaci�n. 3068 3069 La funci�n 'compfile' hace la asignaci�n 'transcompile: true'. 3070 3071 -- Funci�n: translate (<f_1>, ..., <f_n>) 3072 -- Funci�n: translate (functions) 3073 -- Funci�n: translate (all) 3074 3075 Traduce las funciones definidas por el usuario <f_1>, ..., <f_n> 3076 del lenguaje de Maxima a Lisp y eval�a las traducciones Lisp. 3077 Normalmente las funciones traducidas se ejecutan m�s rapidamente 3078 que las originales. 3079 3080 Las llamadas 'translate (all)' o 'translate (functions)' traducen 3081 todas las funciones de usuario. 3082 3083 Las funciones a ser traducidas deber�an incluir una llamada a 3084 'mode_declare' al comienzo siempre que sea posible, a fin de 3085 producir c�digo m�s eficiente. Por ejemplo: 3086 3087 f (x_1, x_2, ...) := block ([v_1, v_2, ...], 3088 mode_declare (v_1, modo_1, v_2, modo_2, ...), ...) 3089 3090 3091 donde <x_1>, <x_2>, ... son los par�metros que se pasan a la 3092 funci�n y <v_1>, <v_2>, ... son las variables locales. 3093 3094 Los nombres de las funciones traducidas son eliminados de la lista 3095 'functions' si 'savedef' vale 'false' (ver m�s abajo) y son 3096 a�adidos a las listas 'props'. 3097 3098 Las funciones no deber�an ser traducidas hasta no estar 3099 completamente depuradas. 3100 3101 Se supone que las expresiones est�n simplificadas; en caso de no 3102 estarlo, se generar� c�digo correcto pero ineficiente. As�, el 3103 usuario no deber�a asignar a 'simp' el valor 'false', el cual 3104 inhibe la simplificaci�n de la expresi�n a ser traducida. 3105 3106 Cuando la variable 'translate' vale 'true', se traducen 3107 autom�ticamente las funciones de usuario a Lisp. 3108 3109 N�tese que las funciones traducidas puede que no se ejecuten 3110 exactamente igual a como lo hac�an antes de la traducci�n, debido a 3111 posibles incompatibilidades entre las versiones de Maxima y Lisp. 3112 En general, la funci�n 'rat' con m�s de un argumento y la funci�n 3113 'ratvars' no deber�an utilizarse si algunas de las variables son 3114 declaradas como expresiones racionales can�nicas (CRE) mediante 3115 'mode_declare'. Adem�s, la asignaci�n 'prederror: false' no 3116 traducir�. 3117 3118 Si 'savedef' vale 'true', entonces la versi�n de Maxima de una 3119 funci�n de usuario permanecer� cuando la funci�n sea traducida por 3120 'translate'. Con esto se hace posible que se muestre la definici�n 3121 llamando a 'dispfun' y que la funci�n sea editada. 3122 3123 Si 'transrun' vale 'false' entonces las versiones interpretadas de 3124 todas las funciones ser�n ejecutadas en lugar de las versiones 3125 traducidas. 3126 3127 El resultado devuelto por 'translate' es una lista con los nombres 3128 de las funciones traducidas. 3129 3130 -- Funci�n: translate_file (<nombre_fichero_maxima>) 3131 -- Funci�n: translate_file (<nombre_fichero_maxima>, 3132 <nombre_fichero_lisp>) 3133 3134 Traduce un fichero en c�digo Maxima a un fichero en c�digo Lisp. 3135 La funci�n 'translate_file' devuelve una lista con los nombres de 3136 tres ficheros: el nombre del ficheero en Maxima, el nombre del 3137 fichero en Lisp y el nombre del fichero que contiene informaci�n 3138 adicional sobre la traducci�n. La funci�n 'translate_file' eval�a 3139 sus argumentos. 3140 3141 La llamada 'translate_file ("foo.mac"); load("foo.LISP")' es lo 3142 mismo que 'batch ("foo.mac")', excepto por la presencia de ciertas 3143 restricciones, como el uso de '''' y '%', por ejemplo. 3144 3145 La llamada 'translate_file (<nombre_fichero_maxima>)' traduce un 3146 fichero en Maxima, <nombre_fichero_maxima>, a otro en Lisp de 3147 nombre similar. Por ejemplo, 'foo.mac' se traduce en 'foo.LISP'. 3148 El nombre del fichero en Maxima puede incluir el nombre de un 3149 directorio, en cuyo caso el fichero de salida Lisp se guardar� en 3150 el mismo directorio desde el que se ley� la fuente Maxima. 3151 3152 La llamada 'translate_file (<nombre_fichero_maxima>, 3153 <nombre_fichero_lisp>)' traduce el fichero Maxima 3154 <nombre_fichero_maxima> en el fichero Lisp <nombre_fichero_lisp>. 3155 La funci�n 'translate_file' ignora la extensi�n del fichero, en 3156 caso de que exista, de 'nombre_fichero_lisp'; la extensi�n del 3157 fichero de salida Lisp ser� invariablemente 'LISP'. El nombre del 3158 fichero Lisp puede incluir la ruta del directorio, en cuyo caso se 3159 almacenar� en el directorio especificado. 3160 3161 La funci�n 'translate_file' tambi�n escribe un fichero de mensajes 3162 de avisos del traductor con diversos niveles de gravedad. La 3163 extensi�n de este fichero es 'UNLISP'. Este fichero puede contener 3164 informaci�n valiosa, aunque de dif�cil interpretaci�n, para 3165 detectar fallos en el c�digo traducido. El fichero 'UNLISP' se 3166 guarda siempre en el mismo directorio desde el que se ley� la 3167 fuente de Maxima. 3168 3169 La funci�n 'translate_file' emite c�digo Lisp que incluye algunas 3170 declaraciones y definiciones que entran en efecto tan pronto como 3171 el c�digo Lisp es compilado. V�ase 'compile_file' para m�s 3172 informaci�n sobre este particular. 3173 3174 V�anse tambi�n 'tr_array_as_ref', 'tr_bound_function_applyp', 3175 'tr_exponent', 'tr_file_tty_messagesp', 3176 'tr_float_can_branch_complex', 'tr_function_call_default', 3177 'tr_numer', 'tr_optimize_max_loop', 'tr_semicompile', 3178 'tr_state_vars', 'tr_warnings_get', 'tr_warn_bad_function_calls', 3179 'tr_warn_fexpr', 'tr_warn_meval', 'tr_warn_mode', 3180 'tr_warn_undeclared', y 'tr_warn_undefined_variable'. 3181 3182 -- Variable opcional: transrun 3183 Valor por defecto: 'true' 3184 3185 Si 'transrun' vale 'false' entonces se ejecutar�n las versiones 3186 interpretadas de todas las funciones, en lugar de las versiones 3187 traducidas. 3188 3189 -- Variable opcional: tr_array_as_ref 3190 Valor por defecto: 'true' 3191 3192 Si 'translate_fast_arrays' vale 'false', referencias de arreglos en 3193 el c�digo Lisp creadas por 'translate_file' se ven afectadas por 3194 'tr_array_as_ref'. 3195 3196 El valor de la variable 'tr_array_as_ref' no tiene ning�n efecto 3197 cuando 'translate_fast_arrays' vale 'true'. 3198 3199 -- Variable opcional: tr_bound_function_applyp 3200 Valor por defecto: 'true' 3201 3202 Si 'tr_bound_function_applyp' vale 'true', Maxima env�a un aviso si 3203 encuentra una variable con valor asignado que est� siendo utilizada 3204 como una funci�n. 'tr_bound_function_applyp' no influye en el 3205 c�digo generado bajo estas circunstancias. 3206 3207 Por ejemplo, una expresi�n como 'g (f, x) := f (x+1)' provocar� un 3208 mensaje de esta naturaleza. 3209 3210 -- Variable opcional: tr_file_tty_messagesp 3211 Valor por defecto: 'false' 3212 3213 Si 'tr_file_tty_messagesp' vale 'true', los mensajes generados por 3214 'translate_file' durante la traducci�n de un fichero se muestran en 3215 la consola y se insertan en el fichero UNLISP. Si vale 'false', los 3216 mensajes sobre la traducci�n del fichero s�lo se incorporan al 3217 fichero UNLISP. 3218 3219 -- Variable opcional: tr_float_can_branch_complex 3220 Valor por defecto: 'true' 3221 3222 Le dice al traductor de Maxima a Lisp que las funciones 'acos', 3223 'asin', 'asec' y 'acsc' pueden devolver valores complejos. 3224 3225 -- Variable opcional: tr_function_call_default 3226 Valor por defecto: 'general' 3227 3228 El valor 'false' significa llama a 'meval', 'expr' significa que 3229 Lisp asign� los argumentos de la funci�n, 'general', el valor por 3230 defecto, devuelve c�digo apropiado para 'mexprs' y 'mlexprs' pero 3231 no para 'macros'. La opci�n 'general' asegura que las asignaciones 3232 de las variables son correctas en el c�digo compilado. En modo 3233 'general', cuando se traduce F(X), si F es una variable con valor, 3234 entonces se entiende que se quiere calcular 'apply (f, [x])', y 3235 como tal se traduce, con el apropiado aviso. No es necesario 3236 desactivar esto. Con los valores por defecto la falta de mensajes 3237 de aviso implica compatibilidad completa entre el c�digo traducido 3238 y compilado con el interpretado por Maxima. 3239 3240 -- Variable opcional: tr_numer 3241 Valor por defecto: 'false' 3242 3243 Si 'tr_numer' vale 'true' se utilizan las propiedades num�ricas en 3244 aquellos �tomos que las posean, como en '%pi'. 3245 3246 -- Variable opcional: tr_optimize_max_loop 3247 Valor por defecto: 100 3248 3249 El valor de 'tr_optimize_max_loop' es el n�mero m�ximo de veces que 3250 el traductor repetir� la macro-expansi�n y la optimizaci�n en el 3251 tratamiento de una expresi�n. 3252 3253 -- Variable opcional: tr_semicompile 3254 Valor por defecto: 'false' 3255 3256 Si 'tr_semicompile' vale 'true', las salidas de 'translate_file' y 3257 'compfile' ser�n macro-expandidas pero no compiladas a c�digo 3258 m�quina por el compilador de Lisp. 3259 3260 -- Variable del sistema: tr_state_vars 3261 Valor por defecto: 3262 3263 [transcompile, tr_semicompile, tr_warn_undeclared, tr_warn_meval, 3264 tr_warn_fexpr, tr_warn_mode, tr_warn_undefined_variable, 3265 tr_function_call_default, tr_array_as_ref,tr_numer] 3266 3267 Es la lista de variables que afectan la forma en que se obtiene la 3268 salida del c�digo traducido. Esta informaci�n es �til para 3269 desarrolladores que pretendan corregir posibles fallos del 3270 traductor. Comparando el c�digo traducido con el que se deber�a 3271 obtener bajo unas ciertas condiciones, es posible hacer el 3272 seguimiento de los fallos. 3273 3274 -- Funci�n: tr_warnings_get () 3275 3276 Devuelve una lista con los avisos dados por el traductor. 3277 3278 -- Variable opcional: tr_warn_bad_function_calls 3279 Valor por defecto: 'true' 3280 3281 Devuelve un aviso cuando se hacen llamadas a funciones que quiz�s 3282 no sean correctas debido a declaraciones inapropiadas realizadas 3283 durante la traducci�n. 3284 3285 -- Variable opcional: tr_warn_fexpr 3286 Valor por defecto: 'compfile' 3287 3288 Devuelve un aviso si se encuentra con alguna FEXPR. Las FEXPR no 3289 deber�an aparecer en el c�digo traducido. 3290 3291 -- Variable opcional: tr_warn_meval 3292 Valor por defecto: 'compfile' 3293 3294 Devuelve un aviso si la funci�n 'meval' es llamada. Si 'meval' es 3295 invocada, es se�al de la presencia de problemas en la traducci�n. 3296 3297 -- Variable opcional: tr_warn_mode 3298 Valor por defecto: 'all' 3299 3300 Devuelve un aviso cuando a las variables se les asignan valores 3301 incompatibles con su modo. 3302 3303 -- Variable opcional: tr_warn_undeclared 3304 Valor por defecto: 'compile' 3305 3306 Determina cuando enviar mensajes sobre variables no declaradas. 3307 3308 -- Variable opcional: tr_warn_undefined_variable 3309 Valor por defecto: 'all' 3310 3311 Devuelve un aviso cuando se detectan variables globales no 3312 definidas. 3313 3314 -- Funci�n: compile_file (<nombre_fich>) 3315 -- Funci�n: compile_file (<nombre_fich>, <nombre_fich_compilado>) 3316 -- Funci�n: compile_file (<nombre_fich>, <nombre_fich_compilado>, 3317 <nombre_fich_lisp>) 3318 3319 Traduce el fichero Maxima <nombre_fich> a Lisp, ejecuta el 3320 compilador de Lisp y, en caso de ser exitosa la compilaci�n, carga 3321 el c�digo compilado en Maxima. 3322 3323 La funci�n 'compile_file' devuelve una lista con los nombres de 3324 tres ficheros: el fichero original en Maxima, la traducci�n Lisp, 3325 notas sobre la traducci�n y el c�digo compilado. Si la compilaci�n 3326 falla, el cuarto elemento es 'false'. 3327 3328 Algunas declaraciones y definiciones entran en efecto tan pronto 3329 como el c�digo Lisp es compilado (sin cargar el c�digo compilado). 3330 �stas incluyen funciones definidas con el operador ':=', macros 3331 definidas con el operador '::=', 'alias', 'declare', 3332 'define_variable', 'mode_declare' y 'infix', 'matchfix', 'nofix', 3333 'postfix', 'prefix' y 'compfile'. 3334 3335 Asignaciones y llamadas a funciones no se eval�an hasta que el 3336 c�digo compilado es cargado. En particular, dentro del fichero 3337 Maxima, asignaciones a los controles ("flags") de traducci�n 3338 ('tr_numer', etc.) no tienen efecto durante la traducci�n. 3339 3340 El <nombre_fich> no puede contener sentencias del tipo ':lisp'. 3341 3342 La funci�n 'compile_file' eval�a sus argumentos. 3343 3344 -- Funci�n: declare_translated (<f_1>, <f_2>, ...) 3345 3346 Cuando se traduce un fichero de c�digo Maxima a Lisp, es importante 3347 para el traductor saber qu� funciones de las que est�n en el 3348 fichero van a ser llamadas como traducidas o compiladas, y cu�les 3349 son simplemente funciones Maxima o que no est�n definidas. Se 3350 genera el c�digo '(MFUNCTION-CALL fn arg1 arg2 ...)' cuando el 3351 traductor no sabe si 'fn' va a ser una funci�n lisp. 3352 3353 3354File: maxima.info, Node: Programaci�n, Next: Depurado, Prev: Definici�n de Funciones, Up: Top 3355 335637 Programaci�n 3357*************** 3358 3359* Menu: 3360 3361* Lisp y Maxima:: 3362* Recolector de basura:: 3363* Introducci�n a la programaci�n:: 3364* Funciones y variables para la programaci�n:: 3365 3366 3367File: maxima.info, Node: Lisp y Maxima, Next: Recolector de basura, Prev: Programaci�n, Up: Programaci�n 3368 336937.1 Lisp y Maxima 3370================== 3371 3372Maxima fue escrito en Lisp, y es muy f�cil tener acceso a funciones y 3373variables Lisp desde Maxima y viceversa. Los s�mbolos Lisp y los 3374s�mblos Maxima est�n claramente diferenciados por medio de una 3375convenci�n de nombres. Un s�mblo Lisp el cual comienza con un signo 3376pesos '$' corresponde a un s�mbolo Maxima sin el signo pesos. Un 3377s�mbolo Maxima el cual comienza con un signo de cierre de interrogaci�n 3378'?' corresponde a un s�mbolo Lisp sin dicho signo. Por ejemplo, el 3379s�mbolo Maxima 'foo' corresponde a el s�mbolo Lisp '$FOO', mientras que 3380el s�mbolo Maxima '?foo' corresponde a el s�mbolo Lisp 'FOO', tenga en 3381cuenta que '?foo' esta escrito sin espacio entre '?' y 'foo'; de otra 3382manera se estar�a invocando a 'describe ("foo")'. 3383 3384El gui�n '-', asterisco '*', u otros car�cteres especiales en s�mbolos 3385Lisp deben ser escritos mediante un backslash '\' si aparecen en c�digo 3386Maxima. Por ejemplo, el identificador Lisp '*foo-bar*' se debe escribir 3387'?\*foo\-bar\*' en Maxima. 3388 3389Se puede ejecutar c�digo Lisp desde una sesi�n de Maxima. Una l�nea 3390Lisp (que contenga una o m�s formas) puede ser ejecutada por medio de un 3391comando especial ':lisp'. Por ejemplo, 3392 3393 (%i1) :lisp (foo $x $y) 3394 3395se llama a la funci�n Lisp 'foo' con variables Maxima 'x' y 'y' como 3396argumentos. La instrucci�n ':lisp' puede aparecer en el prompt 3397interactivo o en un archivo que sea procesado por 'batch' o 'demo', pero 3398no en un archivo que sea procesado por 'load', 'batchload', 3399'translate_file' o 'compile_file'. 3400 3401La funci�n 'to_lisp()' abre una sesi�n interactiva con el interprete 3402Lisp. Escribiendo '(to-maxima)' se cierra la sesi�n con Lisp y se 3403retorna a Maxima. 3404 3405Las funciones y variables Lisp las cuales esten para ser visibles en 3406Maxima como funciones y variables con nombres oridinarios (sin una 3407puntuaci�n especial), deben tener nombres tipo Lisp que comiencen con el 3408signo pesos '$'. 3409 3410Maxima distingue entre letras min�sculas y may�sculas en 3411identificadores. Existen algunas reglas que gobiernan la traducci�n de 3412nombres entre Lisp y Maxima. 3413 3414 1. Un identificador Lisp que no se encuentra encerrado en barras 3415 verticales corresponde a un identificador Maxima en min�scula. Que 3416 el idenficador Lisp est� en may�scula, min�scula o una combinaci�n 3417 de ambas, no afecta en nada. Por ejemplo, los identificadores Lisp 3418 '$foo', '$FOO', y '$Foo', todos corresponden al identificador 3419 Maxima 'foo'. Esto es as� porque '$foo', '$FOO' y '$Foo' se 3420 convierten por defecto al s�mbolo '$FOO' de Lisp. 3421 3422 2. Un identificador Lisp el cual se encuentre todo en may�scula o todo 3423 en min�scula y encerrado entre barras verticales corresponde a un 3424 identicador Maxima con el caso contrario. Esto es, de may�sculas 3425 cambia a min�sculas y de min�sculas cambia a may�sculas. E.g., el 3426 identificador Lisp '|$FOO|' y '|$foo|' corresponden los 3427 identificadores Maxima 'foo' y 'FOO', respectivamente. 3428 3. Un identificador Lisp el cual esta escrito mezclando letras 3429 may�sculas y min�sculas y se encuentra entre barras verticales 3430 corresponde a un identificador Maxima con la misma escritura. 3431 E.g., el identificador Lisp '|$Foo|' corresponde a el identificador 3432 Maxima 'Foo'. 3433 3434La macro Lisp '#$' permite el uso de expresiones Maxima dentro de c�digo 3435Lisp. '#$<expr>$' extiende a una expresi�n Lisp equivalente a la 3436expresi�n Maxima <expr>. 3437 3438 (msetq $foo #$[x, y]$) 3439 3440Esto tiene el mismo efecto que: 3441 3442 (%i1) foo: [x, y]; 3443 3444La funci�n Lisp 'displa' imprime una expresi�n en formato Maxima. 3445 3446 (%i1) :lisp #$[x, y, z]$ 3447 ((MLIST SIMP) $X $Y $Z) 3448 (%i1) :lisp (displa '((MLIST SIMP) $X $Y $Z)) 3449 [x, y, z] 3450 NIL 3451 3452Las funciones definidas en Maxima no son funciones Lisp ordinarias. La 3453funci�n Lisp 'mfuncall' llama a una funci�n Maxima. Por ejemplo: 3454 3455 (%i1) foo(x,y) := x*y$ 3456 (%i2) :lisp (mfuncall '$foo 'a 'b) 3457 ((MTIMES SIMP) A B) 3458 3459Algunas funciones Lisp son compartidas en el paquete Maxima, las cuales 3460se listan a continuaci�n: 3461 3462'complement', 'continue', '//', 'float', 'functionp', 'array', 'exp', 3463'listen', 'signum', 'atan', 'asin', 'acos', 'asinh', 'acosh', 'atanh', 3464'tanh', 'cosh', 'sinh', 'tan', 'break', y 'gcd'. 3465 3466 3467File: maxima.info, Node: Recolector de basura, Next: Introducci�n a la programaci�n, Prev: Lisp y Maxima, Up: Programaci�n 3468 346937.2 Recolector de basura 3470========================= 3471 3472La computaci�n simb�lica tiende a crear una buena cantidad de basura 3473(resultados temporales que ya no ser�n utilizados), y un manejo efectivo 3474de esto puede ser crucial para el t�rmino exitoso de algunos programas. 3475 3476Bajo GCL (GNU Common Lisp), en aquellos sistemas UNIX donde la llamada 3477al sistema mprotect est� disponible (incluyendo SUN OS 4.0 y algunas 3478variantes de BSD) se dispone de un recolector de basura estratificado. 3479V�ase la documentaci�n de GCL para ALLOCATE y GBC. A nivel Lisp, 3480ejecutando (setq si::*notify-gbc* t) pemitir� determinar qu� �reas 3481necesitan m�s espacio. 3482 3483En cuanto al resto de Lisps bajo los que funciona Maxima, se remite al 3484lector a la documentaci�n correspondiente para controlar la recolecci�n 3485de basura. 3486 3487 3488File: maxima.info, Node: Introducci�n a la programaci�n, Next: Funciones y variables para la programaci�n, Prev: Recolector de basura, Up: Programaci�n 3489 349037.3 Introducci�n a la programaci�n 3491=================================== 3492 3493Maxima dispone de los bucles 'do' para hacer iteraciones, as� como 3494estructuras m�s primitivas del estilo de 'go'. 3495 3496 3497File: maxima.info, Node: Funciones y variables para la programaci�n, Prev: Introducci�n a la programaci�n, Up: Programaci�n 3498 349937.4 Funciones y variables para la programaci�n 3500=============================================== 3501 3502 -- Funci�n: backtrace () 3503 -- Funci�n: backtrace (<n>) 3504 Devuelve la pila de llamadas, esto es, la lista de funciones que 3505 han llamado a la funci�n actualmente activa. 3506 3507 La llamada a 'backtrace()' devuelve la pila completa de llamadas. 3508 3509 Ejemplos: 3510 3511 (%i1) h(x) := g(x/7)$ 3512 (%i2) g(x) := f(x-11)$ 3513 (%i3) f(x) := e(x^2)$ 3514 (%i4) e(x) := (backtrace(), 2*x + 13)$ 3515 (%i5) h(10); 3516 #0: e(x=4489/49) 3517 #1: f(x=-67/7) 3518 #2: g(x=10/7) 3519 #3: h(x=10) 3520 9615 3521 (%o5) ---- 3522 49 3523 3524 La llamada 'backtrace (<n>)' devuelve las <n> funciones m�s 3525 recientes, incluyendo a la funci�n actualmente activa. 3526 3527 Ejemplos: 3528 3529 (%i1) h(x) := (backtrace(1), g(x/7))$ 3530 (%i2) g(x) := (backtrace(1), f(x-11))$ 3531 (%i3) f(x) := (backtrace(1), e(x^2))$ 3532 (%i4) e(x) := (backtrace(1), 2*x + 13)$ 3533 (%i5) h(10); 3534 #0: h(x=10) 3535 #0: g(x=10/7) 3536 #0: f(x=-67/7) 3537 #0: e(x=4489/49) 3538 9615 3539 (%o5) ---- 3540 49 3541 3542 -- Operador especial: do 3543 La sentencia 'do' se utiliza para realizar iteraciones. Debido a 3544 su generalidad la sentencia 'do' se describir� en dos partes. En 3545 primer lugar se mostrar� su forma m�s usual, an�loga a la de otros 3546 lenguajes de programaci�n (Fortran, Algol, PL/I, etc.); despu�s se 3547 mencionar�n otras formas de uso. 3548 3549 Hay tres variantes de esta sentencia que se diferencian entre s� 3550 �nicamente por las condiciones de fin de bucle. Son las 3551 siguientes: 3552 3553 * 'for <variable>: <valor_inicial> step <incremento> thru 3554 <l�mite> do <cuerpo>' 3555 * 'for <variable>: <valor_inicial> step <incremento> while 3556 <condici�n> do <cuerpo>' 3557 * 'for <variable>: <valor_inicial> step <incremento> unless 3558 <condici�n> do <cuerpo>' 3559 3560 El <valor_inicial>, el <incremento>, el <l�mite> y el <cuerpo> 3561 pueden ser cualquier tipo de expresi�n v�lida de Maxima. Si el 3562 incremento es igual a la unidad (1) entonces "'step 1'" puede 3563 omitirse. 3564 3565 La ejecuci�n de la sentencia 'do' se realiza asignando el 3566 valor_inicial a la variable (llamada de aqu� en adelante 3567 variable-control). A continuaci�n: (1) si la variable-control ha 3568 excedido el l�mite de la especificaci�n dada por un 'thru', o si la 3569 condici�n impuesta por 'unless' es verdadera ('true'), o si la 3570 condici�n dada por 'while' es falsa ('false') entonces la iteraci�n 3571 'do' termina. (2) El cuerpo se eval�a. (3) El incremento es 3572 sumado a la variable-control. El proceso de (1) a (3) se repite 3573 hasta que la condici�n de fin de iteraci�n se satisfaga. Tambi�n 3574 es posible especificar varias condiciones de terminaci�n del bucle, 3575 en cuyo caso 'do' terminar� cuando se satisfaga alguna de ellas. 3576 3577 En general la condici�n 'thru' se satisfar� cuando la 3578 variable-control sea mayor que el l�mite si el incremento es no 3579 negativo, o cuando la variable-control sea menor que el l�mite 3580 cuando el incremento es negativo. El incremento y el l�mite pueden 3581 ser expresiones no num�ricas, tanto en cuanto esta desigualdad 3582 pueda quedar determinada. Sin embargo, a menos que el incremento 3583 sea un n�mero negativo en el momento de comenzar el c�mputo de 3584 'do', Maxima supondr� que se evaluar� a una cantidad positiva. En 3585 caso de no ser efectivamente positivo, la sentencia 'do' puede dar 3586 un resultado inesperado. 3587 3588 N�tese que el l�mite, el incremento y la condici�n de terminaci�n 3589 se eval�an en cada iteraci�n del bucle. As�, si alguna de 3590 expresiones necesitan de muchos c�lculos y devuelven un resultado 3591 que no va a cambiar durante toda la ejecuci�n del cuerpo, ser� m�s 3592 eficiente dar este valor a una variable antes de comenzar la 3593 sentencia 'do' y utilizarla luego durante su ejecuci�n. 3594 3595 El valor que habitualmente devuelva la sentencia 'do' ser� el �tomo 3596 'done'. Sin embargo, la funci�n 'return' puede usarse dentro del 3597 cuerpo para salir de 'do' de forma prematura retornando un valor 3598 determinado. N�tese no obstante que un 'return' dentro de un 'do' 3599 que est� dentro de un bloque ('block') provocar� una salida de 'do' 3600 pero no de 'block'. Rep�rese tambi�n en que la funci�n 'go' no 3601 puede usarse para salir de 'do' e ir a alg�n lugar de 'block'. 3602 3603 La variable-control es siempre local respecto de 'do', por lo que 3604 se puede utilizar cualquier nombre de variable sin afectar el valor 3605 de cualquier otra variable externa a 'do' y que tenga el mismo 3606 nombre. La variable-control no tendr� asignado ning�n valor una 3607 vez se haya concluido el 'do'. 3608 3609 (%i1) for a:-3 thru 26 step 7 do display(a)$ 3610 a = - 3 3611 3612 a = 4 3613 3614 a = 11 3615 3616 a = 18 3617 3618 a = 25 3619 3620 (%i1) s: 0$ 3621 (%i2) for i: 1 while i <= 10 do s: s+i; 3622 (%o2) done 3623 (%i3) s; 3624 (%o3) 55 3625 3626 N�tese que la condici�n 'while i <= 10' es equivalente a 'unless i 3627 > 10' y a 'thru 10'. 3628 3629 (%i1) series: 1$ 3630 (%i2) term: exp (sin (x))$ 3631 (%i3) for p: 1 unless p > 7 do 3632 (term: diff (term, x)/p, 3633 series: series + subst (x=0, term)*x^p)$ 3634 (%i4) series; 3635 7 6 5 4 2 3636 x x x x x 3637 (%o4) -- - --- - -- - -- + -- + x + 1 3638 90 240 15 8 2 3639 3640 lo que da ocho t�rminos del desarrollo de Taylor de la funci�n 3641 'e^sin(x)'. 3642 3643 (%i1) poly: 0$ 3644 (%i2) for i: 1 thru 5 do 3645 for j: i step -1 thru 1 do 3646 poly: poly + i*x^j$ 3647 (%i3) poly; 3648 5 4 3 2 3649 (%o3) 5 x + 9 x + 12 x + 14 x + 15 x 3650 (%i4) guess: -3.0$ 3651 (%i5) for i: 1 thru 10 do 3652 (guess: subst (guess, x, 0.5*(x + 10/x)), 3653 if abs (guess^2 - 10) < 0.00005 then return (guess)); 3654 (%o5) - 3.162280701754386 3655 3656 Este ejemplo calcula la ra�z cuadrada negativa de 10 haciendo 10 3657 iteraciones del m�todo de Newton-Raphson. De no haberse alcanzado 3658 el criterio de convergencia el valor devuelto hubiese sido 'done'. 3659 3660 En lugar de a�adir siempre una cantidad a la variable-control a 3661 veces se puede querer que cambie en cada iteraci�n siguiendo alg�n 3662 otro criterio. En tal caso se puede hacer uso de 'next 3663 <expresi�n>' en lugar de 'step <incremento>'. Esto har� que a la 3664 variable-control se le asigne el resultado de evaluar la expresi�n 3665 en cada iteraci�n del bucle. 3666 3667 (%i6) for count: 2 next 3*count thru 20 do display (count)$ 3668 count = 2 3669 3670 count = 6 3671 3672 count = 18 3673 3674 En ocasiones puede interesar realizar una iteraci�n en la que la 3675 variable-control no se utilice nunca. Se podr� entonces dar 3676 �nicamente las condiciones de terminaci�n del bucle omitiendo la 3677 inicializaci�n y actualizando la informaci�n, tal como se hace en 3678 el siguiente ejemplo para calcular la ra�z cuadrada de 5 utilizando 3679 un valor inicial alejado de la soluci�n. 3680 3681 (%i1) x: 1000$ 3682 (%i2) thru 20 do x: 0.5*(x + 5.0/x)$ 3683 (%i3) x; 3684 (%o3) 2.23606797749979 3685 (%i4) sqrt(5), numer; 3686 (%o4) 2.23606797749979 3687 3688 Si as� se quiere, incluso es posible omitir las condiciones de 3689 terminaci�n completamente y escribir �nicamente 'do <body>', lo que 3690 provocar� entrar en un bucle infinito. En tal caso, deber�a usarse 3691 la funci�n 'return' a fin de terminar con la ejecuci�n de 'do'. 3692 3693 (%i1) newton (f, x):= ([y, df, dfx], df: diff (f ('x), 'x), 3694 do (y: ev(df), x: x - f(x)/y, 3695 if abs (f (x)) < 5e-6 then return (x)))$ 3696 (%i2) sqr (x) := x^2 - 5.0$ 3697 (%i3) newton (sqr, 1000); 3698 (%o3) 2.236068027062195 3699 3700 (En este ejemplo, cuando se ejecuta 'return' obliga a que sea 'x' 3701 el valor devuelto por 'do'. Al salirse del bloque, 'x' es tambi�n 3702 el valor que devuelve 'block' por ser 'do' la �ltima sentencia del 3703 bloque.) 3704 3705 Hay todav�a otra forma de 'do' en Maxima. Su sintaxis es: 3706 3707 for <variable> in <lista> <test_de_parada> do <cuerpo> 3708 3709 Los elementos de <list> son cualesquiera expresiones que se ir�n 3710 asignando sucesivamente a la variable en cada repetici�n del 3711 cuerpo. El test de parada <end_tests> (que es opcional) puede 3712 usarse para terminar la ejecuci�n de 'do'; de otro modo las 3713 iteraciones se parar�n cuando la lista se haya agotado o cuando se 3714 ejecute un 'return' dentro del cuerpo. (De hecho, la lista puede 3715 ser cualquier expresi�n no at�mica, de la cual se ir�n extrayendo 3716 de forma sucesiva sus diferentes partes.) 3717 3718 (%i1) for f in [log, rho, atan] do ldisp(f(1))$ 3719 (%t1) 0 3720 (%t2) rho(1) 3721 %pi 3722 (%t3) --- 3723 4 3724 (%i4) ev(%t3,numer); 3725 (%o4) 0.78539816 3726 3727 -- Funci�n: errcatch (<expr_1>, ..., <expr_n>) 3728 Eval�a las expresiones <expr_1>, ..., <expr_n> una a una y devuelve 3729 '[<expr_n>]' (una lista) en caso de que no ocurra ning�n error. En 3730 caso de aparecer alg�n error durante el c�lculo de alguno de los 3731 argumentos, 'errcatch' evita que el error se propague y devuelve la 3732 lista vac�a '[]' sin evaluar m�s argumentos. 3733 3734 La funci�n 'errcatch' es �til en ficheros 'batch' donde se sospeche 3735 que pueda aparecer alg�n error, el cual provocar�a la terminaci�n 3736 de la ejecuci�n del 'batch' de no ser previamente detectado. 3737 3738 -- Funci�n: error (<expr_1>, ..., <expr_n>) 3739 -- Variable del sistema: error 3740 Calcula y devuelve <expr_1>, ..., <expr_n>, enviando posteriormente 3741 una se�l de error a Maxima o al 'errcatch' m�s cercano. 3742 3743 A la variable 'error' se le asigna una lista con la descripci�n del 3744 error. El primer elemento de 'error' es una cadena de formato, la 3745 cual une todas las cadenas de los argumentos <expr_1>, ..., 3746 <expr_n>, siendo los dem�s elementos de la lista los valores de los 3747 argumentos que no son cadenas. 3748 3749 La llamada a 'errormsg()' formatea e imprime 'error'. Se reimprime 3750 as� el mensaje de error m�s reciente. 3751 3752 -- Variable opcional: error_size 3753 Valor por defecto: 10 3754 3755 La variable 'error_size' modifica los mensajes de error de acuerdo 3756 con el tama�o de las expresiones que aparecen en �l. Si el tama�o 3757 de una expresi�n (tal como lo determina la funci�n Lisp 3758 'ERROR-SIZE') es mayor que 'error_size', la expresi�n se reemplaza 3759 en el mensaje por un s�mbolo, asign�ndole a �ste una expresi�n. 3760 Los s�mbolos se toman de la lista 'error_syms'. 3761 3762 En caso contrario, si la expresi�n es menor que 'error_size', la 3763 expresi�n se muestra en el propio mensaje. 3764 3765 V�anse tambi�n 'error' y 'error_syms'. 3766 3767 Ejemplo: 3768 3769 El tama�o de 'U', tal como lo determina 'ERROR-SIZE', es 24. 3770 3771 (%i1) U: (C^D^E + B + A)/(cos(X-1) + 1)$ 3772 3773 (%i2) error_size: 20$ 3774 3775 (%i3) error ("Example expression is", U); 3776 3777 Example expression is errexp1 3778 -- an error. Quitting. To debug this try debugmode(true); 3779 (%i4) errexp1; 3780 E 3781 D 3782 C + B + A 3783 (%o4) -------------- 3784 cos(X - 1) + 1 3785 (%i5) error_size: 30$ 3786 3787 (%i6) error ("Example expression is", U); 3788 3789 E 3790 D 3791 C + B + A 3792 Example expression is -------------- 3793 cos(X - 1) + 1 3794 -- an error. Quitting. To debug this try debugmode(true); 3795 3796 -- Variable opcional: error_syms 3797 Valor por defecto: '[errexp1, errexp2, errexp3]' 3798 3799 En los mensajes de error, las expresiones mayores que 'error_size' 3800 son reemplazadas por s�mbolos a los cuales se les asignas estas 3801 expresiones. Los s�mbolos se toman de la lista 'error_syms'. La 3802 primera expresi�n que resulte ser demasiado larga se reemplaza por 3803 'error_syms[1]', la segunda por 'error_syms[2]' y as� 3804 sucesivamente. 3805 3806 Si hay m�s expresiones largas que elementos en 'error_syms', los 3807 s�mbolos se construyen autom�ticamente, siendo el <n>-�simo s�mbolo 3808 equivalente a 'concat ('errexp, <n>)'. 3809 3810 V�anse tambi�n 'error' y 'error_size'. 3811 3812 -- Funci�n: errormsg () 3813 3814 Reimprime el mensaje de error m�s reciente. La variable 'error' 3815 guarda el mensaje y 'errormsg' lo formatea e imprime. 3816 3817 -- Variable opcional: errormsg 3818 Valor por defecto: 'true' 3819 3820 Cuando 'errormsg' vale 'false' se suprimen los contenidos de los 3821 mensajes de error. 3822 3823 La variable 'errormsg' no se puede asignar a un valor local dentro 3824 de un bloque. El valor global de 'errormsg' est� siempre presente. 3825 3826 Ejemplos: 3827 3828 (%i1) errormsg; 3829 (%o1) true 3830 (%i2) sin(a,b); 3831 Wrong number of arguments to sin 3832 -- an error. To debug this try: debugmode(true); 3833 (%i3) errormsg:false; 3834 (%o3) false 3835 (%i4) sin(a,b); 3836 3837 -- an error. To debug this try: debugmode(true); 3838 3839 La variable 'errormsg' no se puede asignar a un valor local dentro 3840 de un bloque. 3841 3842 (%i1) f(bool):=block([errormsg:bool], 3843 print ("value of errormsg is",errormsg))$ 3844 (%i2) errormsg:true; 3845 (%o2) true 3846 (%i3) f(false); 3847 value of errormsg is true 3848 (%o3) true 3849 (%i4) errormsg:false; 3850 (%o4) false 3851 (%i5) f(true); 3852 value of errormsg is false 3853 (%o5) false 3854 3855 -- Operador especial: for 3856 Utilizado en las iteraciones. V�ase 'do' para una descripci�n de 3857 las t�cnicas de iteraci�n en Maxima. 3858 3859 -- Funci�n: go (<etiqueta>) 3860 Se utiliza dentro de un bloque ('block') para transferir el control 3861 a la sentencia del bloque que est� etiquetada con el argumento de 3862 'go'. Una sentencia queda etiquetada cuando est� precedida por un 3863 argumento de tipo �tomo como cualquier otra sentencia de 'block'. 3864 Por ejemplo: 3865 3866 block ([x], x:1, tururu, x+1, ..., go(tururu), ...) 3867 3868 El argumento de 'go' debe ser el nombre de una etiqueta que 3869 aparezca en el mismo bloque ('block'). No se puede utilizar 'go' 3870 para transferir el control a un bloque que no sea aquel que 3871 contenga la sentencia 'go'. 3872 3873 -- Operador especial: if 3874 Evaluaci�n condicionada. Se reconocen varias formas de expresiones 3875 'if'. 3876 3877 La expresi�n 'if <cond_1> then <expr_1> else <expr_0>' devuelve 3878 <expr_1> si <cond_1> vale 'true', en caso contrario la respuesta es 3879 'expr_0'. 3880 3881 La expresi�n 'if <cond_1> then <expr_1> elseif <cond_2> then 3882 <expr_2> elseif ... else <expr_0>' devuelve <expr_k> si <cond_k> 3883 vale 'true' y todas las condiciones anteriores toman el valor 3884 'false'. Si ninguna de las condiciones vale 'true', la respuesta 3885 es 'expr_0'. 3886 3887 La falta de un 'else' final se interpreta como un 'else false'; 3888 esto es, la expresi�n 'if <cond_1> then <expr_1>' equivale a 'if 3889 <cond_1> then <expr_1> else false', y 'if <cond_1> then <expr_1> 3890 elseif ... elseif <cond_n> then <expr_n>' equivale a su vez a 'if 3891 <cond_1> then <expr_1> elseif ... elseif <cond_n> then <expr_n> 3892 else false'. 3893 3894 Las alternativas <expr_0>, ..., <expr_n> pueden ser expresiones 3895 v�lidas de Maxima, incluidas expresiones 'if' anidadas. Las 3896 alternativas ni se simplifican ni se eval�an, a menos que su 3897 condici�n asociada valga 'true'. 3898 3899 Las condiciones <cond_1>, ..., <cond_n> deben ser expresiones 3900 capaces de dar como resultado 'true' o 'false' al ser evaluadas. 3901 Si en un momento dado una condici�n no da como resultado un valor 3902 de verdad ('true' o 'false'), el comportamiento de 'if' se controla 3903 con la variable global 'prederror'. Si 'prederror' vale 'true', se 3904 considera un error que la condici�n evaluada no d� como resultado 3905 un valor de verdad; en caso contrario, las condiciones que no den 3906 como resultado un valor de verdad se aceptan, d�ndose el resultado 3907 como una expresi�n condicional. 3908 3909 Las condiciones pueden contener operadores l�gicos y relacionales, 3910 as� como otros elementos, tal como se indica a continuaci�n: 3911 3912 Operaci�n S�mbolo Tipo 3913 3914 menor que < operador relacional infijo 3915 menor o igual que <= operador relacional infijo 3916 igualdad (sint�ctica) = operador relacional infijo 3917 negaci�n de = # operador relacional infijo 3918 igualdad (por valor) equal operador relacional infijo 3919 negaci�n de equal notequal operador relacional infijo 3920 mayor o igual que >= operador relacional infijo 3921 mayor que > operador relacional infijo 3922 y and operador l�gico infijo 3923 o or operador l�gico infijo 3924 no not operador l�gico prefijo 3925 3926 -- Funci�n: map (<f>, <expr_1>, ..., <expr_n>) 3927 Devuelve una expresi�n cuyo operador principal es el mismo que 3928 aparece en las expresiones <expr_1>, ..., <expr_n> pero cuyas 3929 subpartes son los resultados de aplicar <f> a cada una de las 3930 subpartes de las expresiones; <f> puede ser tanto el nombre de una 3931 funci�n de n argumentos como una expresi�n 'lambda' de n 3932 argumentos. 3933 3934 Uno de los usos que tiene 'map' es la de aplicar (o mapear) una 3935 funci�n (por ejemplo, 'partfrac') sobre cada t�rmino de una 3936 expresi�n extensa en la que normalmente no se podr�a utilizar la 3937 funci�n debido a insuficiencias en el espacio de almacenamiento 3938 durante el curso de un c�lculo. 3939 3940 (%i1) map(f,x+a*y+b*z); 3941 (%o1) f(b z) + f(a y) + f(x) 3942 (%i2) map(lambda([u],partfrac(u,x)),x+1/(x^3+4*x^2+5*x+2)); 3943 1 1 1 3944 (%o2) ----- - ----- + -------- + x 3945 x + 2 x + 1 2 3946 (x + 1) 3947 (%i3) map(ratsimp, x/(x^2+x)+(y^2+y)/y); 3948 1 3949 (%o3) y + ----- + 1 3950 x + 1 3951 (%i4) map("=",[a,b],[-0.5,3]); 3952 (%o4) [a = - 0.5, b = 3] 3953 3954 V�ase tambi�n 'maperror' . 3955 3956 -- Funci�n: mapatom (<expr>) 3957 Devuelve 'true' si y s�lo <expr> es tratado por las rutinas de 3958 mapeo como un �tomo. 3959 3960 -- Variable opcional: maperror 3961 Valor por defecto: 'true' 3962 3963 Cuando 'maperror' toma el valor 'false', hace que todas las 3964 funciones de mapeo, como por ejemplo 3965 3966 map (f, <expr_1>, <expr_2>, ...) 3967 3968 (1) paren cuando hayan terminado de procesar la <expr_i> m�s corta, 3969 a menos que todas ellas sean del mismo tama�o y (2) apliquen 'f' a 3970 '[expr_1, expr_2, ...]' si es el caso que las 'expr_i' no son todas 3971 del mismo tipo de objeto. 3972 3973 Cuando 'maperror' toma el valor 'true' entonces se emite un mensaje 3974 de error cuando se presenta cualquiera de los dos casos anteriores. 3975 3976 -- Variable opcional: mapprint 3977 Valor por defecto: 'true' 3978 3979 Si 'mapprint' vale 'true', se producir�n ciertos mensajes por parte 3980 de las funciones 'map', 'mapl' y 'fullmap' en determinadas 3981 situaciones, como cuando 'map' hace uso de 'apply'. 3982 3983 Si 'mapprint' vale 'false', no se emitir�n tales mensajes. 3984 3985 -- Funci�n: maplist (<f>, <expr_1>, ..., <expr_n>) 3986 Devuelve una lista con las aplicaciones de <f> a las partes de las 3987 expresiones <expr_1>, ..., <expr_n>; <f> es el nombre de una 3988 funci�n ou una expresi�n lambda. 3989 3990 La funci�n 'maplist' difiere de 'map (<f>, <expr_1>, ..., 3991 <expr_n>)', la cual devuelve una expresi�n con el mismo operador 3992 principal que tenga <expr_i>, excepto en simplificaciones y en el 3993 caso en el que 'map' hace un 'apply'. 3994 3995 -- Variable opcional: prederror 3996 Valor por defecto: 'false' 3997 3998 Cuando 'prederror' toma el valor 'true', se emite un mensaje de 3999 error siempre que el predicado de una sentencia 'if' o de una 4000 funci�n 'is' no se pueda evaluar ni a verdadero ('true') ni a falso 4001 ('false'). 4002 4003 Si toma el valor 'false', se devuelve bajo las mismas 4004 circunstancias anteriores el valor 'unknown'. El modo 'prederror: 4005 false' no est� soportado en el c�digo traducido; sin embargo, 4006 'maybe' est� soportado en c�digo traducido. 4007 4008 V�anse tambi�n 'is' y 'maybe'. 4009 4010 -- Funci�n: return (valor) 4011 Puede utilizarse para salir de un bloque, devolviendo su argumento. 4012 V�ase 'block' para m�s informaci�n. 4013 4014 -- Funci�n: scanmap (<f>, <expr>) 4015 -- Funci�n: scanmap (<f>, <expr>, bottomup) 4016 Aplica recursivamente <f> sobre <expr>, de arriba hacia abajo. 4017 Esto es m�s �til cuando se busca una factorizaci�n completa, por 4018 ejemplo: 4019 4020 (%i1) exp:(a^2+2*a+1)*y + x^2$ 4021 (%i2) scanmap(factor,exp); 4022 2 2 4023 (%o2) (a + 1) y + x 4024 4025 N�tese que c�mo 'scanmap' aplica la funci�n dada 'factor' a las 4026 subexpresiones que forman a <expr>; si se presenta otra forma de 4027 <expr> a 'scanmap' entonces el resultado puede ser diferente. As�, 4028 '%o2' no se restaura cuando 'scanmap' se aplica a la forma 4029 expandida de exp: 4030 4031 (%i3) scanmap(factor,expand(exp)); 4032 2 2 4033 (%o3) a y + 2 a y + y + x 4034 4035 Aqu� hay otro ejemplo de la forma en que 'scanmap' aplica 4036 recursivamente una funci�n dada a todas las subexpresiones, 4037 incluyendo exponentes: 4038 4039 (%i4) expr : u*v^(a*x+b) + c$ 4040 (%i5) scanmap('f, expr); 4041 f(f(f(a) f(x)) + f(b)) 4042 (%o5) f(f(f(u) f(f(v) )) + f(c)) 4043 4044 'scanmap (<f>, <expr>, bottomup)' aplica <f> a <expr> de abajo 4045 hacia arriba. Por ejemplo, para 'f' no definida, 4046 4047 scanmap(f,a*x+b) -> 4048 f(a*x+b) -> f(f(a*x)+f(b)) -> f(f(f(a)*f(x))+f(b)) 4049 scanmap(f,a*x+b,bottomup) -> f(a)*f(x)+f(b) 4050 -> f(f(a)*f(x))+f(b) -> 4051 f(f(f(a)*f(x))+f(b)) 4052 4053 En este caso se obtiene la misma respuesta por cualquiera de los 4054 dos m�todos. 4055 4056 -- Funci�n: throw (<expr>) 4057 Eval�a <expr> y devuelve el valor del 'catch' m�s reciente. La 4058 funci�n 'throw' se utiliza junto con 'catch' como un mecanismo de 4059 retorno no local. 4060 4061 -- Operador especial: while 4062 -- Operador especial: unless 4063 4064 V�ase 'do'. 4065 4066 -- Funci�n: outermap (<f>, <a_1>, ..., <a_n>) 4067 Aplica la funci�n <f> a cada uno de los elementos del producto 4068 vectorial <a_1> por <a_2> ... por <a_n>. 4069 4070 El argumento <f> debe ser el nombre de una funci�n de n argumentos, 4071 o una expresi�n lambda de n argumentos. Cada uno de los argumentos 4072 <a_k> puede ser una lista, una lista anidada, una matriz o 4073 cualquier otro tipo de expresi�n. 4074 4075 El valor devuelto por 'outermap' es una estructura anidada. Si <x> 4076 es la respuesta dada por 'outermap', entonces tiene la misma 4077 estructura que la primera lista, lista anidada o matriz, 4078 '<x>[i_1]...[i_m]' tiene la misma estructura que la segunda lista, 4079 lista anidada o matriz, '<x>[i_1]...[i_m][j_1]...[j_n]' tiene la 4080 misma estructura que la tercera lista, lista anidada o matriz, y 4081 as� sucesivamente, siendo <m>, <n>, ... los n�meros �ndice 4082 necesarios para acceder a los elementos de cada argumento: uno para 4083 las listas, dos para las matrices y uno o m�s para las listas 4084 anidadas. Aquellos argumentos que no sean listas ni matrices no 4085 tienen efecto alguno sobre la estructura del valor retornado. 4086 4087 N�tese que el efecto producido por 'outermap' es diferente del que 4088 se obtiene al aplicar <f> a cada uno de los elementos del producto 4089 devuelto por 'cartesian_product'. La funci�n 'outermap' mantiene 4090 la estructura de los argumentos en la respuesta, miemtras que 4091 'cartesian_product' no lo hace. 4092 4093 La funci�n 'outermap' eval�a sus argumentos. 4094 4095 V�anse tambi�n 'map', 'maplist' y 'apply'. 4096 4097 Ejemplos: 4098 4099 Ejemplos elementales de uso de 'outermap'. Con el fin de mostrar 4100 con mayor claridad las combinaciones del argumento, se mantiene sin 4101 definir 'F'. 4102 4103 (%i1) outermap (F, [a, b, c], [1, 2, 3]); 4104 (%o1) [[F(a, 1), F(a, 2), F(a, 3)], [F(b, 1), F(b, 2), F(b, 3)], 4105 [F(c, 1), F(c, 2), F(c, 3)]] 4106 (%i2) outermap (F, matrix ([a, b], [c, d]), matrix ([1, 2], [3, 4])); 4107 [ [ F(a, 1) F(a, 2) ] [ F(b, 1) F(b, 2) ] ] 4108 [ [ ] [ ] ] 4109 [ [ F(a, 3) F(a, 4) ] [ F(b, 3) F(b, 4) ] ] 4110 (%o2) [ ] 4111 [ [ F(c, 1) F(c, 2) ] [ F(d, 1) F(d, 2) ] ] 4112 [ [ ] [ ] ] 4113 [ [ F(c, 3) F(c, 4) ] [ F(d, 3) F(d, 4) ] ] 4114 (%i3) outermap (F, [a, b], x, matrix ([1, 2], [3, 4])); 4115 [ F(a, x, 1) F(a, x, 2) ] [ F(b, x, 1) F(b, x, 2) ] 4116 (%o3) [[ ], [ ]] 4117 [ F(a, x, 3) F(a, x, 4) ] [ F(b, x, 3) F(b, x, 4) ] 4118 (%i4) outermap (F, [a, b], matrix ([1, 2]), matrix ([x], [y])); 4119 [ [ F(a, 1, x) ] [ F(a, 2, x) ] ] 4120 (%o4) [[ [ ] [ ] ], 4121 [ [ F(a, 1, y) ] [ F(a, 2, y) ] ] 4122 [ [ F(b, 1, x) ] [ F(b, 2, x) ] ] 4123 [ [ ] [ ] ]] 4124 [ [ F(b, 1, y) ] [ F(b, 2, y) ] ] 4125 (%i5) outermap ("+", [a, b, c], [1, 2, 3]); 4126 (%o5) [[a + 1, a + 2, a + 3], [b + 1, b + 2, b + 3], 4127 [c + 1, c + 2, c + 3]] 4128 4129 El siguiente ejemplo permite hacer un an�lisis m�s profundo del 4130 valor retornado por 'outermap'. Los tres primeros argumentos son 4131 una matriz, una lista y otra matriz, en este orden. El valor 4132 devuelto es una matriz, cuyos elementos son listas y cada elemento 4133 de cada una de estas listas es a su vez una matriz. 4134 4135 (%i1) arg_1 : matrix ([a, b], [c, d]); 4136 [ a b ] 4137 (%o1) [ ] 4138 [ c d ] 4139 (%i2) arg_2 : [11, 22]; 4140 (%o2) [11, 22] 4141 (%i3) arg_3 : matrix ([xx, yy]); 4142 (%o3) [ xx yy ] 4143 (%i4) xx_0 : outermap(lambda([x, y, z], x / y + z), arg_1, 4144 arg_2, arg_3); 4145 [ [ a a ] [ a a ] ] 4146 [ [[ xx + -- yy + -- ], [ xx + -- yy + -- ]] ] 4147 [ [ 11 11 ] [ 22 22 ] ] 4148 (%o4) Col 1 = [ ] 4149 [ [ c c ] [ c c ] ] 4150 [ [[ xx + -- yy + -- ], [ xx + -- yy + -- ]] ] 4151 [ [ 11 11 ] [ 22 22 ] ] 4152 [ [ b b ] [ b b ] ] 4153 [ [[ xx + -- yy + -- ], [ xx + -- yy + -- ]] ] 4154 [ [ 11 11 ] [ 22 22 ] ] 4155 Col 2 = [ ] 4156 [ [ d d ] [ d d ] ] 4157 [ [[ xx + -- yy + -- ], [ xx + -- yy + -- ]] ] 4158 [ [ 11 11 ] [ 22 22 ] ] 4159 (%i5) xx_1 : xx_0 [1][1]; 4160 [ a a ] [ a a ] 4161 (%o5) [[ xx + -- yy + -- ], [ xx + -- yy + -- ]] 4162 [ 11 11 ] [ 22 22 ] 4163 (%i6) xx_2 : xx_0 [1][1] [1]; 4164 [ a a ] 4165 (%o6) [ xx + -- yy + -- ] 4166 [ 11 11 ] 4167 (%i7) xx_3 : xx_0 [1][1] [1] [1][1]; 4168 a 4169 (%o7) xx + -- 4170 11 4171 (%i8) [op (arg_1), op (arg_2), op (arg_3)]; 4172 (%o8) [matrix, [, matrix] 4173 (%i9) [op (xx_0), op (xx_1), op (xx_2)]; 4174 (%o9) [matrix, [, matrix] 4175 4176 La funci�n 'outermap' mantiene la estructura de los argumentos en 4177 su respuesta, mientras que 'cartesian_product' no lo hace. 4178 4179 (%i1) outermap (F, [a, b, c], [1, 2, 3]); 4180 (%o1) [[F(a, 1), F(a, 2), F(a, 3)], [F(b, 1), F(b, 2), F(b, 3)], 4181 [F(c, 1), F(c, 2), F(c, 3)]] 4182 (%i2) setify (flatten (%)); 4183 (%o2) {F(a, 1), F(a, 2), F(a, 3), F(b, 1), F(b, 2), F(b, 3), 4184 F(c, 1), F(c, 2), F(c, 3)} 4185 (%i3) map (lambda ([L], apply (F, L)), cartesian_product ({a, b, c}, {1, 2, 3})); 4186 (%o3) {F(a, 1), F(a, 2), F(a, 3), F(b, 1), F(b, 2), F(b, 3), 4187 F(c, 1), F(c, 2), F(c, 3)} 4188 (%i4) is (equal (%, %th (2))); 4189 (%o4) true 4190 4191 4192File: maxima.info, Node: Depurado, Next: augmented_lagrangian, Prev: Programaci�n, Up: Top 4193 419438 Depurado 4195*********** 4196 4197* Menu: 4198 4199* Depuraci�n del c�digo fuente:: 4200* Claves de depuraci�n:: 4201* Funciones y variables para depurado:: 4202 4203 4204File: maxima.info, Node: Depuraci�n del c�digo fuente, Next: Claves de depuraci�n, Up: Depurado 4205 420638.1 Depuraci�n del c�digo fuente 4207================================= 4208 4209Maxima es capaz de dar asistencia en la depuraci�n del c�digo fuente. 4210Un usuario puede establecer un punto de referencia dentro del c�digo de 4211una funci�n a partir del cual se siga la ejecuci�n l�nea a l�nea. La 4212compliaci�n puede ser posteriormente examinada, conjuntamente con los 4213valores que se han ido asignando a las variables. 4214 4215La instrucci�n ':help', o ':h', muestra la lista de comandos para la 4216depuraci�n. (En general, los comandos pueden abreviarse; en algunos 4217casos la lista de alternativas podr� ser listada.) Dentro del 4218depurador, el usuario podr� examinar tambi�n cualquier funci�n propia de 4219Maxima, definirla y manipular variables y expresiones. 4220 4221El punto de referencia se establecer� con la instrucci�n ':br'. Ya 4222dentro del depurador, el usuario podr� avanzar una l�nea de cada vez 4223utilizando la instrucci�n ':n' (de "next", en ingl�s). La orden ':bt' 4224(de "backtrace") muestra la lista de la pila. Finalmente, con el 4225comando ':r' ("resume") se abandona el depurador continuando con la 4226ejecuci�n. El uso de estas instrucciones se muestra en el siguiente 4227ejemplo. 4228 4229 (%i1) load ("/tmp/foobar.mac"); 4230 4231 (%o1) /tmp/foobar.mac 4232 4233 (%i2) :br foo 4234 Turning on debugging debugmode(true) 4235 Bkpt 0 for foo (in /tmp/foobar.mac line 1) 4236 4237 (%i2) bar (2,3); 4238 Bkpt 0:(foobar.mac 1) 4239 /tmp/foobar.mac:1:: 4240 4241 (dbm:1) :bt <-- pulsando :bt se retrocede 4242 #0: foo(y=5)(foobar.mac line 1) 4243 #1: bar(x=2,y=3)(foobar.mac line 9) 4244 4245 (dbm:1) :n <-- pulsando :n se avanza una l�nea 4246 (foobar.mac 2) 4247 /tmp/foobar.mac:2:: 4248 4249 (dbm:1) :n <-- pulsando :n se avanza otra l�nea 4250 (foobar.mac 3) 4251 /tmp/foobar.mac:3:: 4252 4253 (dbm:1) u; <-- se pide el valor de u 4254 28 4255 4256 (dbm:1) u: 33; <-- se cambia el valor de u a 33 4257 33 4258 4259 (dbm:1) :r <-- pulsando :r se termina la depuraci�n 4260 4261 (%o2) 1094 4262 4263El fichero '/tmp/foobar.mac' contiene lo siguiente: 4264 4265 foo(y) := block ([u:y^2], 4266 u: u+3, 4267 u: u^2, 4268 u); 4269 4270 bar(x,y) := ( 4271 x: x+2, 4272 y: y+2, 4273 x: foo(y), 4274 x+y); 4275 4276USO DEL DEPURADOR EN EMACS 4277 4278Si el usuario est� corriendo el c�digo bajo GNU emacs en un entorno de 4279texto (dbl shell), o est� ejecutando el entorno gr�fico 'xmaxima', 4280entonces cuando una funci�n pare en el punto de referencia, podr� 4281observar su posici�n actual en el archivo fuente, el cual ser� mostrado 4282en la otra mitad de la ventana, bien resaltada en rojo, o con una 4283peque�a flecha apuntando a la l�nea correcta. El usuario puede avanzar 4284l�neas simples tecleando M-n (Alt-n). 4285 4286Bajo Emacs se debe ejecutar el programa en una ventana de texto 'dbl', 4287la cual requiere el archivo 'dbl.el' que est� en el directorio elisp. 4288El usuario debe instalar los archivos elisp o agregar el directorio 4289elisp de Maxima a la ruta de b�squeda: por ejemplo, se puede a�adir lo 4290siguiente al archivo '.emacs' o al 'site-init.el' 4291 4292 (setq load-path (cons "/usr/share/maxima/5.9.1/emacs" load-path)) 4293 (autoload 'dbl "dbl") 4294 4295entonces en emacs 4296 4297 M-x dbl 4298 4299deber�a abrir una ventana del sistema en la cual se pueden ejecutar 4300programas, por ejemplo Maxima, gcl, gdb, etc. En esta ventana tambi�n 4301se puede ejecutar el depurador, mostrando el c�digo fuente en la otra 4302ventana. 4303 4304El usuario puede colocar un punto de referencia en una l�nea determinada 4305sin m�s que teclear 'C-x space'. Con esto se le hace saber al depurador 4306en qu� funci�n est� el cursor y en qu� l�nea del mismo. Si el cursor 4307est� en la l�nea 2 de 'foo', entonces insertar� en la otra ventana la 4308instrucci�n "':br foo 2'", a fin de detener 'foo' justo en la segunda 4309l�nea. Para tener esto operativo, el usuario debe tener activo 4310maxima-mode.el (modo-maxima.el) en la ventana en la que est� 4311'foobar.mac'. Hay otros comandos disponibles en la ventana, como 4312evaluar la funci�n dentro de Maxima tecleando 'Alt-Control-x'. 4313 4314 4315File: maxima.info, Node: Claves de depuraci�n, Next: Funciones y variables para depurado, Prev: Depuraci�n del c�digo fuente, Up: Depurado 4316 431738.2 Claves de depuraci�n 4318========================= 4319 4320Las claves de depuraci�n son palabras que no son interpretadas como 4321expresiones de Maxima. Una clave de depuraci�n puede introducirse 4322dentro de Maxima o del depurador. Las claves de depuraci�n comienzan 4323con dos puntos, ':'. Por ejemplo, para evaluar una expresi�n Lisp, se 4324puede teclear ':lisp' seguido de la expresi�n a ser evaluada. 4325 4326 (%i1) :lisp (+ 2 3) 4327 5 4328 4329El n�mero de argumentos depende del comando en particular. Adem�s, 4330tampoco es necesario teclear el nombre completo de la instrucci�n, tan 4331solo lo justo para diferenciarla de las otras instrucciones. As�, ':br' 4332ser�a suficiente para ':break'. 4333 4334Las claves de depuraci�n se listan a continuaci�n. 4335 4336':break F n' 4337 Establece un punto de referencia en la funci�n 'F' en la l�nea 'n' 4338 contando a partir del comienzo de la funci�n. Si 'F' es una 4339 cadena, entonces se entiende que se trata de un fichero, siendo 4340 entonces 'n' el n�mero de l�nea a partir del comienzo del fichero. 4341 El valor 'n' es opcional; en caso de no ser suministrado, se 4342 entender� que vale cero (primera l�nea de la funci�n o fichero). 4343':bt' 4344 Retrocede en la pila. 4345':continue' 4346 Continua el c�mputo de la funci�n. 4347':delete' 4348 Borra los punto de referencia especificados, o todos si no se 4349 especifica ninguno. 4350':disable' 4351 Deshabilita los puntos de referencia especificados, o todos si no 4352 se especifica ninguno. 4353':enable' 4354 Habilita los puntos de referencia especificados, o todos si no se 4355 especifica ninguno. 4356':frame n' 4357 Imprime el elemento 'n' de la pila, o el actualmente activo si no 4358 se especifica ninguno. 4359':help' 4360 Imprime la ayuda sobre un comando del depurador, o de todos los 4361 comandos si no se especifica ninguno. 4362':info' 4363 Imprime informaci�n sobre un elemento. 4364':lisp expresi�n' 4365 Eval�a la 'expresi�n' Lisp. 4366':lisp-quiet expresi�n' 4367 Eval�a la 'expresi�n' Lisp sin devolver el resultado. 4368':next' 4369 Como ':step', excepto que ':next' se salta las llamadas a 4370 funciones. 4371':quit' 4372 Sale del nivel actual del depurador sin completar el c�mputo. 4373':resume' 4374 Contin�a con el c�mputo. 4375':step' 4376 Sigue con el c�mputo de la funci�n o fichero hasta que alcance una 4377 nueva l�nea fuente. 4378':top' 4379 Retorna a Maxima desde cualquier nivel del depurador sin completar 4380 el c�mputo. 4381 4382 4383File: maxima.info, Node: Funciones y variables para depurado, Prev: Claves de depuraci�n, Up: Depurado 4384 438538.3 Funciones y variables para depurado 4386======================================== 4387 4388 -- Variable opcional: debugmode 4389 Valor por defecto: 'false' 4390 4391 Cuando en Maxima ocurre un error, Maxima inicializar� el depurador 4392 si 'debugmode' tiene el valor 'true'. El usuario puede ingresar 4393 comandos para examinar la pila de llamadas, los puntos de 4394 interrupci�n; en pocas palabras ir a trav�s del c�digo de Maxima. 4395 Vea 'debugging' para una lista de los comandos del depurador. 4396 4397 Habilitando 'debugmode' no se capturar�n los errores tipo Lisp. 4398 4399 -- Variable opcional: refcheck 4400 Valor por defecto: 'false' 4401 4402 Cuando 'refcheck' vale 'true', Maxima imprime un mensaje cada vez 4403 que una variable es utilizada por vez primera en un c�lculo. 4404 4405 -- Variable opcional: setcheck 4406 Valor por defecto: 'false' 4407 4408 Cuando el valor de 'setcheck' es una lista de variables (se admite 4409 que tengan sub�ndices) Maxima devuelve un mensaje indicando si los 4410 valores que han sido asignados a las variables lo han sido con el 4411 operador ordinario ':', o con el operador de asignaci�n '::' o como 4412 resultado de haberse realizado una llamada de funci�n, pero en 4413 ning�n caso cuando la asignaci�n haya sido hecha mediante los 4414 operadores ':=' o '::='. El mensaje contiene el nombre de la 4415 variable y su valor. 4416 4417 La variable 'setcheck' admite tambi�n los valores 'all' o 'true' 4418 con lo que el informe incluir� todas las variables. 4419 4420 Cada nueva asignaci�n de 'setcheck' establece una nueva lista de 4421 variables a ser monitorizada, de forma que cualquier otra variable 4422 previamente asignada a 'setcheck' es olvidada. 4423 4424 Los nombres asignados a 'setcheck' deben estar precedidos del 4425 ap�strofo ''' a fin de evitar que las variables sean evaluadas 4426 antes de ser almacenadas en 'setcheck'. Por ejemplo, si 'x', 'y' y 4427 'z' ya guardan alg�n valor entoces se har� 4428 4429 setcheck: ['x, 'y, 'z]$ 4430 4431 para colocarlas en la lista de variables a monitorizar. 4432 4433 No se generar� ninguna salida cuando una variable de la lista 4434 'setcheck' sea asignada a ella misma, como en 'X: 'X'. 4435 4436 -- Variable opcional: setcheckbreak 4437 Valor por defecto: 'false' 4438 4439 Si 'setcheckbreak' es igual 'true', Maxima se detendr� siempre que 4440 a una variable de la lista 'setcheck' se le asigne un nuevo valor. 4441 La detenci�n tendr� lugar justo antes de hacerse la asignaci�n. En 4442 ese momento 'setval' guarda el valor que se le va a dar a la 4443 variable. Entonces el usuario podr� darle un valor diferente 4444 pas�ndoselo a la variable 'setval'. 4445 4446 V�anse tambi�n 'setcheck' y 'setval'. 4447 4448 -- Variable del sistema: setval 4449 4450 Guarda el valor que va a ser asignado a una variable cuando 4451 'setcheckbreak' realiza una detenci�n. Entonces se podr� asignarle 4452 otro valor pas�ndoselo previamente a 'setval'. 4453 4454 V�anse tambi�n 'setcheck' y 'setcheckbreak'. 4455 4456 -- Funci�n: timer (<f_1>, ..., <f_n>) 4457 -- Funci�n: timer (all) 4458 -- Funci�n: timer () 4459 Dadas las funciones <f_1>, ..., <f_n>, 'timer' coloca cada una de 4460 ellas en la lista de funciones para las cuales se generar�n 4461 estad�sticas relativas al tiempo de c�mputo. As�, 'timer(f)$ 4462 timer(g)$' coloca a 'f' y luego a 'g' en dicha lista de forma 4463 acumulativa. 4464 4465 La sentencia 'timer(all)' coloca todas las funciones de usuario 4466 (las referenciadas por la variable global 'functions') en la lista 4467 de funciones cuyos tiempos de ejecuci�n se quieren monitorizar. 4468 4469 Si no se le pasan argumentos a 'timer' se obtendr� la lista de 4470 funciones cuyos tiempos de ejecuci�n se quieren monitorizar. 4471 4472 Maxima almacena la duraci�n del c�mputo de cada funci�n de la 4473 lista, de forma que 'timer_info' devolver� las estad�sticas 4474 correspondientes, incluyendo el tiempo medio de cada llamada a la 4475 funci�n, el n�mero de llamadas realizadas y el tiempo total 4476 transcurrido. La instrucci�n 'untimer' borra las funciones de la 4477 lista. 4478 4479 La funci�n 'timer' no eval�a sus argumentos, de forma que 'f(x) := 4480 x^2$ g:f$ timer(g)$' no coloca a 'f' en la lista. 4481 4482 Si 'trace(f)' est� activada, entonces 'timer(f)' est� desactivada; 4483 'trace' y 'timer' no pueden estar operativas al mismo tiempo. 4484 4485 V�ase tambi�n 'timer_devalue'. 4486 4487 -- Funci�n: untimer (<f_1>, ..., <f_n>) 4488 -- Funci�n: untimer () 4489 Dadas las funciones <f_1>, ..., <f_n>, 'untimer' las elimina de la 4490 lista de funciones cuyos tiempos de ejecuci�n se quiere 4491 monitorizar. 4492 4493 Si no se le suministran argumentos, 'untimer' borra completamente 4494 la lista. 4495 4496 Tras la ejecuci�n de 'untimer (f)', 'timer_info (f)' a�n devuelve 4497 las estad�sticas de tiempo previamente registradas, pero 4498 'timer_info()' (sin argumentos) no devuelve informaci�n sobre 4499 aquellas funciones que ya no est�n en la lista. La ejecuci�n de 4500 'timer (f)' inicializa todas las estad�sticas a cero y coloca 'f' 4501 nuevamente en la lista. 4502 4503 -- Variable opcional: timer_devalue 4504 Valor por defecto: 'false' 4505 4506 Si 'timer_devalue' es igual a 'true', Maxima le resta a cada 4507 funci�n cuyos tiempos de ejecuci�n se quiere monitorizar el tiempo 4508 gastado en llamadas a otras funciones presentes tambi�n en la lista 4509 de monitorizaci�n. En caso contrario, los tiempos que se obtienen 4510 para cada funci�n incluyen tambi�n los consumidos en otras 4511 funciones. N�tese que el tiempo consumido en llamadas a otras 4512 funciones que no est�n en la lista de monitorizaci�n no se resta 4513 del tiempo total. 4514 4515 V�anse tambi�n 'timer' y 'timer_info'. 4516 4517 -- Funci�n: timer_info (<f_1>, ..., <f_n>) 4518 -- Funci�n: timer_info () 4519 Dadas las funciones <f_1>, ..., <f_n>, 'timer_info' devuelve una 4520 matriz con informaci�n relativa a los tiempos de ejecuci�n de cada 4521 una de estas funciones. Sin argumentos, 'timer_info' devuelve la 4522 informaci�n asociada a todas las funciones cuyos tiempos de 4523 ejecuci�n se quiere monitorizar. 4524 4525 La matriz devuelta por 'timer_info' incluye los nombres de las 4526 funciones, tiempo de ejecuci�n en cada llamada, n�mero de veces que 4527 ha sido llamada, tiempo total de ejecuci�n y tiempo consumido en la 4528 recolecci�n de basura, 'gctime' (del ingl�s, "garbage collection 4529 time") en la versi�n original de Macsyma, aunque ahora toma el 4530 valor constante cero. 4531 4532 Los datos con los que 'timer_info' construye su respuesta pueden 4533 obtenerse tambi�n con la funci�n 'get': 4534 4535 get(f, 'calls); get(f, 'runtime); get(f, 'gctime); 4536 4537 V�ase tambi�n 'timer'. 4538 4539 -- Funci�n: trace (<f_1>, ..., <f_n>) 4540 -- Funci�n: trace (all) 4541 -- Funci�n: trace () 4542 4543 Dadas las funciones <f_1>, ..., <f_n>, 'trace' imprime informaci�n 4544 sobre depuraci�n cada vez que estas funciones son llamadas; 4545 'trace(f)$ trace(g)$' coloca de forma acumulativa a 'f' y luego a 4546 'g' en la lista de funciones a ser rastradas. 4547 4548 La sentencia 'trace(all)' coloca todas las funciones de usuario 4549 (las referenciadas por la variable global 'functions') en la lista 4550 de funciones a ser rastreadas. 4551 4552 Si no se suministran argumentos, 'trace' devuelve una lista con 4553 todas las funciones a ser rastreadas. 4554 4555 La funci�n 'untrace' desactiva el rastreo. V�ase tambi�n 4556 'trace_options'. 4557 4558 La funci�n 'trace' no eval�a sus argumentos, de forma que 'f(x) := 4559 x^2$ g:f$ trace(g)$' no coloca a 'f' en la lista de rastreo. 4560 4561 Cuando una funci�n se redefine es eliminada de la lista de rastreo. 4562 As�, tras 'timer(f)$ f(x) := x^2$', la funci�n 'f' dejar� de estar 4563 en dicha lista. 4564 4565 Si 'timer (f)' est� activado, entonces 'trace (f)' est� 4566 desactivado, ya que 'trace' y 'timer' no pueden estar ambos activos 4567 para la misma funci�n. 4568 4569 -- Funci�n: trace_options (<f>, <option_1>, ..., <option_n>) 4570 -- Funci�n: trace_options (<f>) 4571 4572 Establece las opciones de rastreo para la funci�n <f>. Cualquier 4573 otra opci�n previamente especificada queda reemplazada por las 4574 nuevas. La ejecuci�n de 'trace_options (<f>, ...)' no tiene ning�n 4575 efecto, a menos que se haya invocado previamente a 'trace (<f>)' 4576 (es indiferente que esta invocaci�n sea anterior o posterior a 4577 'trace_options'). 4578 4579 'trace_options (<f>)' inicializa todas las opciones a sus valores 4580 por defecto. 4581 4582 Las claves de opciones son: 4583 4584 * 'noprint': No se imprime mensaje alguno ni a la entrada ni a 4585 la salida de la funci�n. 4586 * 'break': Coloca un punto de referencia antes de que la funci�n 4587 comience a ejecutarse y otro despu�s de que termine su 4588 ejecuci�n. V�ase 'break'. 4589 * 'lisp_print': Muestra los argumentos y valores retornados como 4590 objetos de Lisp. 4591 * 'info': Imprime '-> true' tanto a la entrada como a la salida 4592 de la funci�n. 4593 * 'errorcatch': Detecta errores, otorgando la posibilidad de 4594 marcar un error, reintentar la llamada a la funci�n o 4595 especificar un valor de retorno. 4596 4597 Las opciones de rastreo se especifican de dos formas. La �nica 4598 presencia de la clave de opci�n ya activa la opci�n. (N�tese que 4599 la opci�n <foo> no se activa mediante '<foo>: true' u otra forma 4600 similar; se tendr� en cuenta tambi�n que las claves no necesitan ir 4601 precedidas del ap�strofo.) Especificando la clave de opci�n junto 4602 con una funci�n de predicado se hace que la opci�n quede 4603 condicionada al predicado. 4604 4605 La lista de argumentos para las funciones de predicado es siempre 4606 '[level, direction, function, item]' donde 'level' es el nivel de 4607 recursi�n para la funci�n, 'direction' puede ser tanto 'enter' como 4608 'exit', 'function' es el nombre de la funci�n y 'item' es la lista 4609 de argumentos (a la entrada) o el valor de retorno (a la salida). 4610 4611 A continuaci�n un ejemplo de opciones de rastreo no condicionales: 4612 4613 (%i1) ff(n) := if equal(n, 0) then 1 else n * ff(n - 1)$ 4614 4615 (%i2) trace (ff)$ 4616 4617 (%i3) trace_options (ff, lisp_print, break)$ 4618 4619 (%i4) ff(3); 4620 4621 Para la misma funci�n, con la opci�n 'break' condicionada a un 4622 predicado: 4623 4624 (%i5) trace_options (ff, break(pp))$ 4625 4626 (%i6) pp (level, direction, function, item) := block (print (item), 4627 return (function = 'ff and level = 3 and direction = exit))$ 4628 4629 (%i7) ff(6); 4630 4631 -- Funci�n: untrace (<f_1>, ..., <f_n>) 4632 -- Funci�n: untrace () 4633 Dadas las funciones <f_1>, ..., <f_n>, 'untrace' desactiva el 4634 rastreo previamente activado por la funci�n 'trace'. Si no se 4635 aportan argumentos, 'untrace' desactiva el rastreo de todas las 4636 funciones. 4637 4638 La llamada a 'untrace' devuelve una lista con las funciones para 4639 las que el rastreo se ha desactivado. 4640 4641 4642File: maxima.info, Node: augmented_lagrangian, Next: Bernstein, Prev: Depurado, Up: Top 4643 464439 augmented_lagrangian 4645*********************** 4646 4647* Menu: 4648 4649* Funciones y variables para augmented_lagrangian:: 4650 4651 4652File: maxima.info, Node: Funciones y variables para augmented_lagrangian, Prev: augmented_lagrangian, Up: augmented_lagrangian 4653 465439.1 Funciones y variables para augmented_lagrangian 4655==================================================== 4656 4657 -- Funci�n: augmented_lagrangian_method (<FOM>, <xx>, <C>, <yy>) 4658 -- Funci�n: augmented_lagrangian_method (<FOM>, <xx>, <C>, <yy>, 4659 optional_args) 4660 -- Funci�n: augmented_lagrangian_method ([<FOM>, <grad>], <xx>, <C>, 4661 <yy>) 4662 -- Funci�n: augmented_lagrangian_method ([<FOM>, <grad>], <xx>, <C>, 4663 <yy>, optional_args) 4664 4665 Devuelve una aproximaci�n del valor m�nimo de la expresi�n <FOM> 4666 respecto de las variables <xx>, manteniendo las restricciones <C> 4667 igual a cero. La lista <yy> contiene las soluciones iniciales para 4668 <xx>. El algoritmo que se utiliza es el m�todo del lagrangiano 4669 aumentado (ver referencias [1] y [2]). 4670 4671 Si <grad> est� presente en la llamada a la funci�n, se interpreta 4672 como el gradiente de <FOM> respecto de <xx>, representado como una 4673 lista de tantas expresiones como variables tenga <xx>. Si el 4674 argumento <grad> no est�, se calcular� de forma autom�tica. 4675 4676 Tanto <FOM> como cada uno de los elementos de <grad>, si se da como 4677 argumento, deben ser expresiones ordinarias; no admiti�ndose ni 4678 nombres de funciones ni expresiones lambda. 4679 4680 El argumento 'optional_args' hace referencia a otros argumentos 4681 adicionales, los cuales se especifican de la forma '<symbol> = 4682 <value>'. Los argumentos opcionales reconocidos son: 4683 4684 'niter' 4685 N�mero de iteraciones del algoritmo. 4686 'lbfgs_tolerance' 4687 Tolerancia que se pasa a LBFGS. 4688 'iprint' 4689 Par�metro IPRINT (lista de dos enteros que controlan la 4690 frecuencia de mensajes) que se pasa a LBFGS. 4691 '%lambda' 4692 Valor inicial de '%lambda' que ser� utilizado para calcular el 4693 lagrangiano aumentado. 4694 4695 Esta funci�n minimiza el lagrangiano aumentado haciendo uso del 4696 algoritmo LBFGS, que es un m�todo de los llamados quasi-Newton. 4697 4698 Antes de hacer uso de esta funci�n ejec�tense 4699 'load("augmented_lagrangian")'. 4700 4701 V�ase tambi�n 'lbfgs'. 4702 4703 Referencias: 4704 4705 [1] 4706 <http://www-fp.mcs.anl.gov/otc/Guide/OptWeb/continuous/constrained/nonlinearcon/auglag.html> 4707 4708 [2] <http://www.cs.ubc.ca/spider/ascher/542/chap10.pdf> 4709 4710 Ejemplos: 4711 4712 (%i1) load (lbfgs); 4713 (%o1) /maxima/share/lbfgs/lbfgs.mac 4714 (%i2) load (augmented_lagrangian); 4715 (%o2) 4716 /maxima/share/contrib/augmented_lagrangian.mac 4717 (%i3) FOM: x^2 + 2*y^2; 4718 2 2 4719 (%o3) 2 y + x 4720 (%i4) xx: [x, y]; 4721 (%o4) [x, y] 4722 (%i5) C: [x + y - 1]; 4723 (%o5) [y + x - 1] 4724 (%i6) yy: [1, 1]; 4725 (%o6) [1, 1] 4726 (%i7) augmented_lagrangian_method(FOM, xx, C, yy, iprint=[-1,0]); 4727 (%o7) [[x = 0.66665984108002, y = 0.33334027245545], 4728 %lambda = [- 1.333337940892525]] 4729 4730 Mismo ejemplo que en el caso anterior, pero ahora el gradiente se 4731 suministra como argumento. 4732 4733 (%i1) load (lbfgs)$ 4734 (%i2) load (augmented_lagrangian)$ 4735 (%i3) FOM: x^2 + 2*y^2; 4736 2 2 4737 (%o3) 2 y + x 4738 (%i4) FOM: x^2 + 2*y^2; 4739 2 2 4740 (%o4) 2 y + x 4741 (%i5) xx: [x, y]; 4742 (%o5) [x, y] 4743 (%i6) grad : [2*x, 4*y]; 4744 (%o6) [2 x, 4 y] 4745 (%i7) C: [x + y - 1]; 4746 (%o7) [y + x - 1] 4747 (%i8) yy: [1, 1]; 4748 (%o8) [1, 1] 4749 (%i9) augmented_lagrangian_method ([FOM, grad], xx, C, yy, 4750 iprint = [-1, 0]); 4751 (%o9) [[x = 0.666659841080025, y = .3333402724554462], 4752 %lambda = [- 1.333337940892543]] 4753 4754 4755File: maxima.info, Node: Bernstein, Next: bode, Prev: augmented_lagrangian, Up: Top 4756 475740 Bernstein 4758************ 4759 4760* Menu: 4761 4762* Funciones y variables para Bernstein:: 4763 4764 4765File: maxima.info, Node: Funciones y variables para Bernstein, Prev: Bernstein, Up: Bernstein 4766 476740.1 Funciones y variables para Bernstein 4768========================================= 4769 4770 -- Funci�n: bernstein_poly (<k>, <n>, <x>) 4771 4772 Si 'k' no es un entero negativo, los polinomios de Bernstein se 4773 definen como 'bernstein_poly(k,n,x) = binomial(n,k) x^k 4774 (1-x)^(n-k)'; en cambio, si 'k' es un entero negativo, el polinomio 4775 de Bernstein 'bernstein_poly(k,n,x)' se anula. Cuando o bien 'k' o 4776 'n' no son enteros, la variable opcional 'bernstein_explicit' 4777 controla la expansi�n de los polinomios de Bernstein a su forma 4778 expl�cita. 4779 4780 Ejemplo: 4781 4782 (%i1) load(bernstein)$ 4783 4784 (%i2) bernstein_poly(k,n,x); 4785 (%o2) bernstein_poly(k, n, x) 4786 (%i3) bernstein_poly(k,n,x), bernstein_explicit : true; 4787 n - k k 4788 (%o3) binomial(n, k) (1 - x) x 4789 4790 Los polinomios de Bernstein tienen definidas su derivada e 4791 integral: 4792 4793 (%i4) diff(bernstein_poly(k,n,x),x); 4794 (%o4) (bernstein_poly(k - 1, n - 1, x) 4795 - bernstein_poly(k, n - 1, x)) n 4796 (%i5) integrate(bernstein_poly(k,n,x),x); 4797 (%o5) 4798 k + 1 4799 hypergeometric([k + 1, k - n], [k + 2], x) binomial(n, k) x 4800 ---------------------------------------------------------------- 4801 k + 1 4802 4803 Cuando los argumentos contienen n�meros decimales en coma flotante, 4804 los polinomios de Bernstein tambi�n devuelven resultados decimales. 4805 4806 (%i6) bernstein_poly(5,9, 1/2 + %i); 4807 39375 %i 39375 4808 (%o6) -------- + ----- 4809 128 256 4810 (%i7) bernstein_poly(5,9, 0.5b0 + %i); 4811 (%o7) 3.076171875b2 %i + 1.5380859375b2 4812 4813 Para hacer uso de 'bernstein_poly', ejec�tese primero 4814 'load("bernstein")'. 4815 4816 -- Variable opcional: bernstein_explicit 4817 Valor por defecto: 'false' 4818 4819 Cuando o bien 'k' o 'n' no son enteros, la variable opcional 4820 'bernstein_explicit' controla la expansi�n de los polinomios de 4821 Bernstein a su forma expl�cita. 4822 4823 Ejemplo: 4824 4825 (%i1) bernstein_poly(k,n,x); 4826 (%o1) bernstein_poly(k, n, x) 4827 (%i2) bernstein_poly(k,n,x), bernstein_explicit : true; 4828 n - k k 4829 (%o2) binomial(n, k) (1 - x) x 4830 4831 Cuando tanto 'k' como 'n' son enteros, 'bernstein(k,n,x)' se 4832 expande siempre a su forma expl�cita. 4833 4834 -- Funci�n: multibernstein_poly (<[k1,k2,...,kp]>,<[n1,n2,..., 4835 np]>,<[x1,x2,..., xp]>) 4836 4837 La sentencia 'multibernstein_poly (<[k1,k2,...,kp]>,<[n1,n2,..., 4838 np]>,<[x1,x2,..., xp]>)' es el producto de polinomios de Bernstein 4839 'bernstein_poly(k1,n1,x1) bernstein_poly(k2,n2,x2) ... 4840 bernstein_poly(kp,np,xp)'. 4841 4842 Para hacer uso de 'multibernstein_poly', ejec�tese primero 4843 'load("bernstein")'. 4844 4845 -- Funci�n: bernstein_approx (<f>,<[x1,x1,...,xn]>,n) 4846 4847 Devuelve el polinomio de Bernstein uniforme de 'n'-�simo orden que 4848 aproxima la funci�n '(x1,x2,..xn) |--> f'. 4849 4850 Ejemplos: 4851 4852 (%i1) bernstein_approx(f(x),[x], 2); 4853 2 1 2 4854 (%o1) f(1) x + 2 f(-) (1 - x) x + f(0) (1 - x) 4855 2 4856 (%i2) bernstein_approx(f(x,y),[x,y], 2); 4857 2 2 1 2 2 2 4858 (%o2) f(1, 1) x y + 2 f(-, 1) (1 - x) x y + f(0, 1) (1 - x) y 4859 2 4860 1 2 1 1 4861 + 2 f(1, -) x (1 - y) y + 4 f(-, -) (1 - x) x (1 - y) y 4862 2 2 2 4863 1 2 2 2 4864 + 2 f(0, -) (1 - x) (1 - y) y + f(1, 0) x (1 - y) 4865 2 4866 1 2 2 2 4867 + 2 f(-, 0) (1 - x) x (1 - y) + f(0, 0) (1 - x) (1 - y) 4868 2 4869 4870 Para hacer uso de 'bernstein_approx', ejec�tese primero 4871 'load("bernstein")'. 4872 4873 -- Funci�n: bernstein_expand (<e>, <[x1,x1,...,xn]>) 4874 4875 Expresa el polinomio 'e' como una combinaci�n lineal de polinomios 4876 de Bernstein multivariantes. 4877 4878 (%i1) bernstein_expand(x*y+1,[x,y]); 4879 (%o1) 2 x y + (1 - x) y + x (1 - y) + (1 - x) (1 - y) 4880 (%i2) expand(%); 4881 (%o2) x y + 1 4882 4883 Maxima devuelve un error si el primer argumento no es un polinomio. 4884 4885 Para hacer uso de 'bernstein_expand', ejec�tese primero 4886 'load("bernstein")'. 4887 4888 4889File: maxima.info, Node: bode, Next: cobyla, Prev: Bernstein, Up: Top 4890 489141 bode 4892******* 4893 4894* Menu: 4895 4896* Funciones y variables para bode:: 4897 4898 4899File: maxima.info, Node: Funciones y variables para bode, Prev: bode, Up: bode 4900 490141.1 Funciones y variables para bode 4902==================================== 4903 4904 -- Funci�n: bode_gain (<H>, <range>, ...<plot_opts>...) 4905 Funci�n para dibujar el gr�fico de ganancia de Bode. 4906 4907 Ejemplos (1 a 7 de 4908 <http://www.swarthmore.edu/NatSci/echeeve1/Ref/Bode/BodeHow.html>, 4909 8 de Ron Crummett): 4910 (%i1) load("bode")$ 4911 4912 (%i2) H1 (s) := 100 * (1 + s) / ((s + 10) * (s + 100))$ 4913 4914 (%i3) bode_gain (H1 (s), [w, 1/1000, 1000])$ 4915 4916 (%i4) H2 (s) := 1 / (1 + s/omega0)$ 4917 4918 (%i5) bode_gain (H2 (s), [w, 1/1000, 1000]), omega0 = 10$ 4919 4920 (%i6) H3 (s) := 1 / (1 + s/omega0)^2$ 4921 4922 (%i7) bode_gain (H3 (s), [w, 1/1000, 1000]), omega0 = 10$ 4923 4924 (%i8) H4 (s) := 1 + s/omega0$ 4925 4926 (%i9) bode_gain (H4 (s), [w, 1/1000, 1000]), omega0 = 10$ 4927 4928 (%i10) H5 (s) := 1/s$ 4929 4930 (%i11) bode_gain (H5 (s), [w, 1/1000, 1000])$ 4931 4932 (%i12) H6 (s) := 1/((s/omega0)^2 + 2 * zeta * (s/omega0) + 1)$ 4933 4934 (%i13) bode_gain (H6 (s), [w, 1/1000, 1000]), 4935 omega0 = 10, zeta = 1/10$ 4936 4937 (%i14) H7 (s) := (s/omega0)^2 + 2 * zeta * (s/omega0) + 1$ 4938 4939 (%i15) bode_gain (H7 (s), [w, 1/1000, 1000]), 4940 omega0 = 10, zeta = 1/10$ 4941 4942 (%i16) H8 (s) := 0.5 / (0.0001 * s^3 + 0.002 * s^2 + 0.01 * s)$ 4943 4944 (%i17) bode_gain (H8 (s), [w, 1/1000, 1000])$ 4945 4946 Antes de hacer uso de esta funci�n ejec�tese 'load("bode")'. V�ase 4947 tambi�n 'bode_phase'. 4948 4949 -- Funci�n: bode_phase (<H>, <range>, ...<plot_opts>...) 4950 Funci�n para dibujar el gr�fico de fase de Bode. 4951 4952 Ejemplos (1 a 7 de 4953 <http://www.swarthmore.edu/NatSci/echeeve1/Ref/Bode/BodeHow.html>, 4954 8 de Ron Crummett): 4955 (%i1) load("bode")$ 4956 4957 (%i2) H1 (s) := 100 * (1 + s) / ((s + 10) * (s + 100))$ 4958 4959 (%i3) bode_phase (H1 (s), [w, 1/1000, 1000])$ 4960 4961 (%i4) H2 (s) := 1 / (1 + s/omega0)$ 4962 4963 (%i5) bode_phase (H2 (s), [w, 1/1000, 1000]), omega0 = 10$ 4964 4965 (%i6) H3 (s) := 1 / (1 + s/omega0)^2$ 4966 4967 (%i7) bode_phase (H3 (s), [w, 1/1000, 1000]), omega0 = 10$ 4968 4969 (%i8) H4 (s) := 1 + s/omega0$ 4970 4971 (%i9) bode_phase (H4 (s), [w, 1/1000, 1000]), omega0 = 10$ 4972 4973 (%i10) H5 (s) := 1/s$ 4974 4975 (%i11) bode_phase (H5 (s), [w, 1/1000, 1000])$ 4976 4977 (%i12) H6 (s) := 1/((s/omega0)^2 + 2 * zeta * (s/omega0) + 1)$ 4978 4979 (%i13) bode_phase (H6 (s), [w, 1/1000, 1000]), 4980 omega0 = 10, zeta = 1/10$ 4981 4982 (%i14) H7 (s) := (s/omega0)^2 + 2 * zeta * (s/omega0) + 1$ 4983 4984 (%i15) bode_phase (H7 (s), [w, 1/1000, 1000]), 4985 omega0 = 10, zeta = 1/10$ 4986 4987 (%i16) H8 (s) := 0.5 / (0.0001 * s^3 + 0.002 * s^2 + 0.01 * s)$ 4988 4989 (%i17) bode_phase (H8 (s), [w, 1/1000, 1000])$ 4990 4991 (%i18) block ([bode_phase_unwrap : false], 4992 bode_phase (H8 (s), [w, 1/1000, 1000])); 4993 4994 (%i19) block ([bode_phase_unwrap : true], 4995 bode_phase (H8 (s), [w, 1/1000, 1000])); 4996 4997 Antes de hacer uso de esta funci�n ejec�tese 'load("bode")'. V�ase 4998 tambi�n 'bode_gain'. 4999 5000 5001File: maxima.info, Node: cobyla, Next: contrib_ode, Prev: bode, Up: Top 5002 500342 cobyla 5004********* 5005 5006* Menu: 5007 5008* Introducci�n a cobyla:: 5009* Funciones y variables para cobyla:: 5010* Ejemplos para cobyla:: 5011 5012 5013File: maxima.info, Node: Introducci�n a cobyla, Next: Funciones y variables para cobyla, Prev: cobyla, Up: cobyla 5014 501542.1 Introducci�n a cobyla 5016========================== 5017 5018'fmin_cobyla' es una traducci�n a Common Lisp hecha con el programa 5019'f2cl' de la rutina Fortran COBYLA, (Powell, [1][2][3]), para 5020optimizaci�n con restricciones. 5021 5022COBYLA minimiza una funci�n objetivo F(X) sujeta a M restricciones con 5023desigualdades de la forma g(X) >= 0 sobre X, siendo X un vector de 5024variables de N componentes. 5025 5026Las restricciones en forma de igualdades se pueden implementar por pares 5027de desigualdades de la forma g(X)>=0 y -g(X)>= 0. El interfaz Maxima 5028para COBYLA admite restricciones de igualdad, transform�ndolas luego 5029internamente a pares de desigualdades. 5030 5031El algoritmo hace uso de aproximaciones lineales, tanto de la funci�n 5032objetivo como de las funciones de restricci�n; tales aproximaciones se 5033hacen mediante interpolaci�n lineal de N+1 puntos en el espacio de 5034variables. Los puntos de interpolaci�n se consideran v�rtices de un 5035simplejo o s�mplex. El par�metro RHO controla el tama�o del simplejo y 5036se reduce autom�ticamente de RHOBEG a RHOEND. Para cada RHO la subrutina 5037intenta alcanzar un buen vector de variables para el tama�o actual, 5038reduci�ndose entonces RHO hasta alcanzar el valor de RHOEND. Por eso, 5039tanto a RHOBEG como a RHOEND se les deben asignar valores razonables, lo 5040que requiere cierto trabajo emp�rico previo. La rutina trata cada 5041restricci�n individualmente cuando se calcula un en las variables. El 5042nombre de la rutina se deriva de la frase Constrained Optimization BY 5043Linear Approximations. 5044 5045Referecias: 5046 5047[1] C�digo Fortran procede de 5048<http://plato.asu.edu/sub/nlores.html#general> 5049 5050[2] M. J. D. Powell, "A direct search optimization method that models 5051the objective and constraint functions by linear interpolation," en 5052Advances in Optimization and Numerical Analysis, eds. S. Gomez and 5053J.-P. Hennart (Kluwer Academic: Dordrecht, 1994), p. 51-67. 5054 5055[3] M. J. D. Powell, "Direct search algorithms for optimization 5056calculations," Acta Numerica 7, 287-336 (1998). Also available as 5057University of Cambridge, Department of Applied Mathematics and 5058Theoretical Physics, Numerical Analysis Group, Report NA1998/04 from 5059<http://www.damtp.cam.ac.uk/user/na/reports.html> 5060 5061 5062File: maxima.info, Node: Funciones y variables para cobyla, Next: Ejemplos para cobyla, Prev: Introducci�n a cobyla, Up: cobyla 5063 506442.2 Funciones y variables para cobyla 5065====================================== 5066 5067 -- Funci�n: fmin_cobyla (<F>, <X>, <Y>) 5068 -- Funci�n: fmin_cobyla (<F>, <X>, <Y>, optional_args) 5069 5070 Devuelve una aproximaci�n del valor m�nimo de la expresi�n <F> 5071 respecto de las variables <X>, sujeta a un conjunto opcional de 5072 restricciones. <Y> es una lista que contiene una soluci�n semilla 5073 inicial en <X>. 5074 5075 <F> debe ser una expresi�n ordinaria, no valen nombres de funciones 5076 ni expresiones lambda. 5077 5078 'optional_args' hace referencia a argumentos adicionales, que se 5079 especifican de la forma '<symbol> = <value>'. Los argumentos 5080 opcionales que se reconocen son: 5081 5082 'constraints' 5083 Lista de restricciones en forma de desigualdades e igualdades 5084 que debe satisfacer <X>. Las desigualdades deben ser de la 5085 forma 'g(<X>) >= h(<X>)' o 'g(<X>) <= h(<X>)'. Las 5086 restricciones de igualdad deben ser de la forma 'g(<X>) = 5087 h(<X>)'. 5088 'rhobeg' 5089 Valor inicial de la variable interna RHO, que controla el 5090 tama�o del simplejo. Su valor por defecto es 1.0. 5091 'rhoend' 5092 El valor final deseado para el par�metro RHO. Es 5093 aproximadamente la precisi�n de las variables. Su valor por 5094 defecto es 1d-6. 5095 'iprint' 5096 Nivel de informaci�n de salida. Su valor por defecto es 0. 5097 * 0 - Sin informaci�n de salida 5098 * 1 - Sumario al final de los c�lculos 5099 * 2 - Se van mostrando los nuevos valores de RHO y SIGMA, 5100 incluyendo el vector de variables. 5101 * 3 - Como en 2, pero la informaci�n se muestra cuando se 5102 calcula F(X). 5103 'maxfun' 5104 N�mero m�ximo de evaluaciones de la funci�n. Su valor por 5105 defecto es 1000. 5106 5107 El resultado devuelto es un vector: 5108 1. Los valores de las variables con las que se alcanza el valor 5109 m�nimo. Es una lista de elementos de la forma '<var> = 5110 <value>' para cada una de las variables listadas en <X>. 5111 2. El valor m�nimo de la funci�n objetivo. 5112 3. El n�mero de evaluaciones de la funci�n. 5113 4. C�digo de retorno con los siguientes significados: 5114 1. 0 - No ha habido errores. 5115 2. 1 - Alcanzado el m�ximo n�mero permitido de evaluaciones 5116 de la funci�n. 5117 3. 2 - Errores de redondeo han impedido el avance del 5118 proceso. 5119 5120 El c�digo 'load(fmin_cobyla)' carga en memoria esta funci�n.. 5121 5122 -- Funci�n: bf_fmin_cobyla (<F>, <X>, <Y>) 5123 -- Funci�n: bf_fmin_cobyla (<F>, <X>, <Y>, optional_args) 5124 5125 Esta funci�n es id�ntica a 'fmin_cobyla', excepto por el hecho de 5126 que utiliza aritm�tica de precisi�n arbitraria (bigfloat) y que el 5127 valor por defecto de <rhoend> es '10^(fpprec/2)'. 5128 5129 V�ase 'fmin_cobyla'. 5130 5131 El c�digo 'load(fmin_cobyla)' carga en memoria esta funci�n.. 5132 5133 5134File: maxima.info, Node: Ejemplos para cobyla, Prev: Funciones y variables para cobyla, Up: cobyla 5135 513642.3 Ejemplos para cobyla 5137========================= 5138 5139Minimizar x1*x2 bajo la condici�n 1-x1^2-x2^2 >= 0. La soluci�n te�rica 5140es x1 = 1/sqrt(2), x2 = -1/sqrt(2). 5141 5142 (%i1) load(fmin_cobyla)$ 5143 5144 (%i2) fmin_cobyla(x1*x2, [x1, x2], [1,1], constraints = [x1^2+x2^2<=1], iprint=1); 5145 5146 Normal return from subroutine COBYLA 5147 5148 NFVALS = 66 F =-5.000000E-01 MAXCV = 1.999845E-12 5149 X = 7.071058E-01 -7.071077E-01 5150 (%o2) [[x1 = 0.70710584934848, x2 = - 0.7071077130248], - 0.49999999999926, 5151 [[-1.999955756559757e-12],[]], 66] 5152 5153Hay m�s ejemplos en el directorio 'share/cobyla/ex'. 5154 5155 5156File: maxima.info, Node: contrib_ode, Next: descriptive, Prev: cobyla, Up: Top 5157 515843 contrib_ode 5159************** 5160 5161* Menu: 5162 5163* Introducci�n a contrib_ode:: 5164* Funciones y variables para contrib_ode:: 5165* Posibles mejoras a contrib_ode:: 5166* Pruebas realizadas con contrib_ode:: 5167* Referencias para contrib_ode:: 5168 5169 5170File: maxima.info, Node: Introducci�n a contrib_ode, Next: Funciones y variables para contrib_ode, Prev: contrib_ode, Up: contrib_ode 5171 517243.1 Introducci�n a contrib_ode 5173=============================== 5174 5175La funci�n 'ode2' de Maxima resuelve ecuaciones diferenciales ordinarias 5176(EDO) simples de primer y segundo orden. La funci�n 'contrib_ode' 5177extiende las posibilidades de 'ode2' con m�todos adicionales para ODEs 5178lineales y no lineales de primer orden y homog�neas lineales de segundo 5179orden. El c�digo se encuentra en estado de desarrollo y la syntaxis 5180puede cambiar en futuras versiones. Una vez el c�digo se haya 5181estabilizado podr� pasar a integrarse dentro de Maxima. 5182 5183El paquete debe cargarse con la instrucci�n 'load('contrib_ode)' antes 5184de utilizarlo. 5185 5186La sintaxis de 'contrib_ode' es similar a la de 'ode2'. Necesita tres 5187argumentos: una EDO (s�lo se necesita el miembro izquierdo si el derecho 5188es igual cero), la variable dependiente y la independiente. Si 5189encuentra la soluci�n, devolver� una lista de resultados. 5190 5191La forma de los resultados devueltos es diferente de la utilizada por 5192'ode2'. Puesto que las ecuaciones no lineales pueden tener m�ltiples 5193soluciones, 'contrib_ode' devuelve una lista de soluciones. Las 5194soluciones pueden tener diferentes formatos: 5195 * una funci�n expl�cita para la variable dependiente, 5196 5197 * una funci�n impl�cita para la variable dependiente, 5198 5199 * una soluci�n param�trica en t�rminos de la variable '%t' o 5200 5201 * una transformaci�n en otra EDO de variable '%u'. 5202 5203'%c' hace referencia a la constante de integraci�n en las ecuaciones de 5204primer orden. '%k1' y '%k2' son las constantes para las ecuaciones de 5205segundo orden. Si por cualquier raz�n contrib_ode no pudiese encontrar 5206una soluci�n, devolver� 'false', quiz�s despu�s de mostrar un mensaje de 5207error. 5208 5209Ejemplos: 5210 5211En ocasiones es necesario devolver una lista de soluciones, pues algunas 5212EDOs pueden tener m�ltiples soluciones: 5213 5214 (%i1) load('contrib_ode)$ 5215 5216 (%i2) eqn:x*'diff(y,x)^2-(1+x*y)*'diff(y,x)+y=0; 5217 5218 dy 2 dy 5219 (%o2) x (--) - (x y + 1) -- + y = 0 5220 dx dx 5221 (%i3) contrib_ode(eqn,y,x); 5222 5223 x 5224 (%o3) [y = log(x) + %c, y = %c %e ] 5225 (%i4) method; 5226 5227 (%o4) factor 5228 5229Las EDOs no lineales pueden tener soluciones singulares sin constantes 5230de integraci�n, como en la segunda soluci�n del ejemplo siguiente: 5231 5232 (%i1) load('contrib_ode)$ 5233 5234 (%i2) eqn:'diff(y,x)^2+x*'diff(y,x)-y=0; 5235 5236 dy 2 dy 5237 (%o2) (--) + x -- - y = 0 5238 dx dx 5239 (%i3) contrib_ode(eqn,y,x); 5240 5241 2 5242 2 x 5243 (%o3) [y = %c x + %c , y = - --] 5244 4 5245 (%i4) method; 5246 5247 (%o4) clairault 5248 5249La siguiente ODE tiene dos soluciones param�tricas en t�rminos de la 5250variable '%t'. En este caso, las soluciones param�tricas se pueden 5251manipular para dar soluciones expl�citas. 5252 5253 (%i1) load('contrib_ode)$ 5254 5255 (%i2) eqn:'diff(y,x)=(x+y)^2; 5256 5257 dy 2 5258 (%o2) -- = (y + x) 5259 dx 5260 (%i3) contrib_ode(eqn,y,x); 5261 5262 (%o3) [[x = %c - atan(sqrt(%t)), y = - x - sqrt(%t)], 5263 [x = atan(sqrt(%t)) + %c, y = sqrt(%t) - x]] 5264 (%i4) method; 5265 5266 (%o4) lagrange 5267 5268En el siguiente ejemplo (Kamke 1.112) se obtiene una soluci�n impl�cita. 5269 5270 (%i1) load('contrib_ode)$ 5271 5272 (%i2) assume(x>0,y>0); 5273 5274 (%o2) [x > 0, y > 0] 5275 (%i3) eqn:x*'diff(y,x)-x*sqrt(y^2+x^2)-y; 5276 5277 dy 2 2 5278 (%o3) x -- - x sqrt(y + x ) - y 5279 dx 5280 (%i4) contrib_ode(eqn,y,x); 5281 5282 y 5283 (%o4) [x - asinh(-) = %c] 5284 x 5285 (%i5) method; 5286 5287 (%o5) lie 5288 5289La siguiente ecuaci�n de Riccati se transforma en una EDO lineal de 5290segundo orden de variable '%u'. Maxima es incapaz de resolver la nueva 5291EDO, por lo que la devuelve si resolver: 5292 5293 (%i1) load('contrib_ode)$ 5294 5295 (%i2) eqn:x^2*'diff(y,x)=a+b*x^n+c*x^2*y^2; 5296 5297 2 dy 2 2 n 5298 (%o2) x -- = c x y + b x + a 5299 dx 5300 (%i3) contrib_ode(eqn,y,x); 5301 5302 d%u 5303 --- 2 5304 dx 2 n - 2 a d %u 5305 (%o3) [[y = - ----, %u c (b x + --) + ---- c = 0]] 5306 %u c 2 2 5307 x dx 5308 (%i4) method; 5309 5310 (%o4) riccati 5311 5312Para EDOs de primer orden, 'contrib_ode' llama a 'ode2'. Entonces trata 5313de aplicar los siguientes m�todos: factorizaci�n, Clairault, Lagrange, 5314Riccati, Abel y Lie. El m�todo de Lie no se intenta aplicar a las 5315ecuaciones de Abel si el propio m�todo de Abel no obtiene soluci�n, pero 5316s� se utiliza si el m�todo de Riccati devuelve una EDO de segundo orden 5317sin resolver. 5318 5319Para EDOs de segundo orden, 'contrib_ode' llama a 'ode2' y luego a 5320'odelin'. 5321 5322Se mostrar�n mensajes de depurado si se ejecuta la sentencia 5323'put('contrib_ode,true,'verbose)'. 5324 5325 5326File: maxima.info, Node: Funciones y variables para contrib_ode, Next: Posibles mejoras a contrib_ode, Prev: Introducci�n a contrib_ode, Up: contrib_ode 5327 532843.2 Funciones y variables para contrib_ode 5329=========================================== 5330 5331 -- Funci�n: contrib_ode (<eqn>, <y>, <x>) 5332 5333 Devuelve la lista de soluciones de la ecuaci�n diferencia ordinaria 5334 (EDO) <eqn> de variable independiente <x> y variable dependiente 5335 <y>. 5336 5337 -- Funci�n: odelin (<eqn>, <y>, <x>) 5338 5339 La funci�n 'odelin' resulve EDOs homog�neas lineales de primer y 5340 segundo orden con variable independiente <x> y variable dependiente 5341 <y>. Devuelve un conjunto fundamental de soluciones de la EDO. 5342 5343 Para EDOs de segundo orden, 'odelin' utiliza un m�todo desarrollado 5344 por Bronstein y Lafaille, que busca las soluciones en t�rminos de 5345 funciones especiales dadas. 5346 5347 (%i1) load('contrib_ode); 5348 5349 (%i2) odelin(x*(x+1)*'diff(y,x,2)+(x+5)*'diff(y,x,1)+(-4)*y,y,x); 5350 ...trying factor method 5351 ...solving 7 equations in 4 variables 5352 ...trying the Bessel solver 5353 ...solving 1 equations in 2 variables 5354 ...trying the F01 solver 5355 ...solving 1 equations in 3 variables 5356 ...trying the spherodial wave solver 5357 ...solving 1 equations in 4 variables 5358 ...trying the square root Bessel solver 5359 ...solving 1 equations in 2 variables 5360 ...trying the 2F1 solver 5361 ...solving 9 equations in 5 variables 5362 gauss_a(- 6, - 2, - 3, - x) gauss_b(- 6, - 2, - 3, - x) 5363 (%o2) {---------------------------, ---------------------------} 5364 4 4 5365 x x 5366 5367 5368 -- Funci�n: ode_check (<eqn>, <soln>) 5369 5370 Devuelve el valor de la ecuaci�n diferencia ordinaria (EDO) <eqn> 5371 despu�s de sustituir una posible soluci�n <soln>. El valor es cero 5372 si <soln> es una soluci�n de <eqn>. 5373 5374 (%i1) load('contrib_ode)$ 5375 5376 (%i2) eqn:'diff(y,x,2)+(a*x+b)*y; 5377 5378 2 5379 d y 5380 (%o2) --- + (a x + b) y 5381 2 5382 dx 5383 (%i3) ans:[y = bessel_y(1/3,2*(a*x+b)^(3/2)/(3*a))*%k2*sqrt(a*x+b) 5384 +bessel_j(1/3,2*(a*x+b)^(3/2)/(3*a))*%k1*sqrt(a*x+b)]; 5385 5386 3/2 5387 1 2 (a x + b) 5388 (%o3) [y = bessel_y(-, --------------) %k2 sqrt(a x + b) 5389 3 3 a 5390 3/2 5391 1 2 (a x + b) 5392 + bessel_j(-, --------------) %k1 sqrt(a x + b)] 5393 3 3 a 5394 (%i4) ode_check(eqn,ans[1]); 5395 5396 (%o4) 0 5397 5398 -- Variable opcional: 'method' 5399 5400 A la variable 'method' se le asigna el m�todo aplicado. 5401 5402 -- Variable: '%c' 5403 5404 '%c' es la constante de integraci�n para EDOs de primer orden. 5405 5406 -- Variable: '%k1' 5407 5408 '%k1' es la primera constante de integraci�n para EDOs de segundo 5409 orden. 5410 5411 -- Variable: '%k2' 5412 5413 '%k2' es la segunda constante de integraci�n para EDOs de segundo 5414 orden. 5415 5416 -- Funci�n: gauss_a (<a>, <b>, <c>, <x>) 5417 5418 'gauss_a(a,b,c,x)' y 'gauss_b(a,b,c,x)' son funciones geom�tricas 5419 2F1 . Representan dos soluciones independientes cualesquiera de la 5420 ecuaci�n diferencial hipergeom�trica 'x(1-x) diff(y,x,2) + 5421 [c-(a+b+1)x] diff(y,x) - aby = 0' (A&S 15.5.1). 5422 5423 El �nico uso que se hace de estas funciones es en las soluciones de 5424 EDOs que devuelven 'odelin' y 'contrib_ode'. La definici�n y 5425 utilizaci�n de estas funciones puede cambiar en futuras 5426 distribuciones de Maxima. 5427 5428 V�anse tambi�n 'gauss_b', 'dgauss_a' y 'gauss_b'. 5429 5430 -- Funci�n: gauss_b (<a>, <b>, <c>, <x>) 5431 V�ase tambi�n 'gauss_a'. 5432 5433 -- Funci�n: dgauss_a (<a>, <b>, <c>, <x>) 5434 The derivative with respect to x of 'gauss_a(a,b,c,x)'. 5435 5436 -- Funci�n: dgauss_b (<a>, <b>, <c>, <x>) 5437 Derivada de 'gauss_b(<a>,<b>,<c>,<x>)' respecto de <x>. 5438 5439 -- Funci�n: kummer_m (<a>, <b>, <x>) 5440 5441 Funci�n M de Kummer, tal como la definen Abramowitz y Stegun, 5442 Handbook of Mathematical Functions, Secci�n 13.1.2. 5443 5444 El �nico uso que se hace de esta funci�n es en las soluciones de 5445 EDOs que devuelven 'odelin' y 'contrib_ode'. La definici�n y 5446 utilizaci�n de estas funciones puede cambiar en futuras 5447 distribuciones de Maxima. 5448 5449 V�anse tambi�n 'kummer_u', 'dkummer_m' y 'dkummer_u'. 5450 5451 -- Funci�n: kummer_u (<a>, <b>, <x>) 5452 5453 Funci�n U de Kummer, tal como la definen Abramowitz y Stegun, 5454 Handbook of Mathematical Functions, Secci�n 13.1.3. 5455 5456 V�ase tambi�n 'kummer_m'. 5457 5458 -- Funci�n: dkummer_m (<a>, <b>, <x>) 5459 Derivada de 'kummer_m(<a>,<b>,<x>)' respecto de <x>. 5460 5461 -- Funci�n: dkummer_u (<a>, <b>, <x>) 5462 Derivada de 'kummer_u(<a>,<b>,<x>)' respecto de <x>. 5463 5464 5465File: maxima.info, Node: Posibles mejoras a contrib_ode, Next: Pruebas realizadas con contrib_ode, Prev: Funciones y variables para contrib_ode, Up: contrib_ode 5466 546743.3 Posibles mejoras a contrib_ode 5468=================================== 5469 5470Este paquete a�n se encuentra en fase de desarrollo. Aspectos 5471pendientes: 5472 5473 * Extender el m�todo FACTOR 'ode1_factor' para que trabaje con ra�ces 5474 m�ltiples. 5475 5476 * Extender el m�todo FACTOR 'ode1_factor' para que intente resolver 5477 factores de orden superior. En este momento s�lo intenta resolver 5478 factores lineales. 5479 5480 * Modificar la rutina LAGRANGE 'ode1_lagrange' para que prefiera 5481 ra�ces reales a las complejas. 5482 5483 * A�adir m�s m�todos para las ecuaciones de RIccati. 5484 5485 * Mejorar la identificaci�n de las ecuaciones de Abel de segunda 5486 especie. El procedimiento actual no es muy bueno. 5487 5488 * Trabajar la rutina del grupo sim�trico de Lie 'ode1_lie'. Existen 5489 algunos problemas: algunas partes no est�n implementadas, algunos 5490 ejemplos no terminan de ejecutarse, otros producen errors, otros 5491 devuelven respuestas muy complejas. 5492 5493 * Hacer m�s pruebas. 5494 5495 5496File: maxima.info, Node: Pruebas realizadas con contrib_ode, Next: Referencias para contrib_ode, Prev: Posibles mejoras a contrib_ode, Up: contrib_ode 5497 549843.4 Pruebas realizadas con contrib_ode 5499======================================= 5500 5501Los procedimientos fueron probados con cerca de mil ecuaciones tomadas 5502de Murphy, Kamke, Zwillinger y otros. �stas se encuentran en el 5503directorio de pruebas. 5504 5505 * La rutina de Clairault 'ode1_clairault' encuentra todas las 5506 soluciones conocidas, inclu�das las singulares, de las ecuaciones 5507 de Clairault en Murphy y Kamke. 5508 5509 * Las otras rutinas a veces devuelven una sola soluci�n cuando 5510 existen m�s. 5511 5512 * Algunas de las soluciones devueltas por 'ode1_lie' son demasiado 5513 complejas e imposibles de interpretar. 5514 5515 * A veces se producen detenciones imprevistas del procedimiento. 5516 5517 5518File: maxima.info, Node: Referencias para contrib_ode, Prev: Pruebas realizadas con contrib_ode, Up: contrib_ode 5519 552043.5 Referencias para contrib_ode 5521================================= 5522 5523 1. E. Kamke, Differentialgleichungen Losungsmethoden und Losungen, Vol 5524 1, Geest & Portig, Leipzig, 1961 5525 5526 2. G. M. Murphy, Ordinary Differential Equations and Their Solutions, 5527 Van Nostrand, New York, 1960 5528 5529 3. D. Zwillinger, Handbook of Differential Equations, 3rd edition, 5530 Academic Press, 1998 5531 5532 4. F. Schwarz, Symmetry Analysis of Abel's Equation, Studies in 5533 Applied Mathematics, 100:269-294 (1998) 5534 5535 5. F. Schwarz, Algorithmic Solution of Abel's Equation, Computing 61, 5536 39-49 (1998) 5537 5538 6. E. S. Cheb-Terrab, A. D. Roche, Symmetries and First Order ODE 5539 Patterns, Computer Physics Communications 113 (1998), p 239. 5540 (<http://lie.uwaterloo.ca/papers/ode_vii.pdf>) 5541 5542 7. E. S. Cheb-Terrab, T. Kolokolnikov, First Order ODEs, Symmetries 5543 and Linear Transformations, European Journal of Applied 5544 Mathematics, Vol. 14, No. 2, pp. 231-246 (2003). 5545 (<http://arxiv.org/abs/math-ph/0007023>, 5546 <http://lie.uwaterloo.ca/papers/ode_iv.pdf>) 5547 5548 8. G. W. Bluman, S. C. Anco, Symmetry and Integration Methods for 5549 Differential Equations, Springer, (2002) 5550 5551 9. M Bronstein, S Lafaille, Solutions of linear ordinary differential 5552 equations in terms of special functions, Proceedings of ISSAC 2002, 5553 Lille, ACM Press, 23-28. 5554 (<http://www-sop.inria.fr/cafe/Manuel.Bronstein/publications/issac2002.pdf>) 5555 5556 5557File: maxima.info, Node: descriptive, Next: diag, Prev: contrib_ode, Up: Top 5558 555944 descriptive 5560************** 5561 5562* Menu: 5563 5564* Introducci�n a descriptive:: 5565* Funciones y variables para el tratamiento de datos:: 5566* Funciones y variables de par�metros descriptivos:: 5567* Funciones y variables para gr�ficos estad�sticos:: 5568 5569 5570File: maxima.info, Node: Introducci�n a descriptive, Next: Funciones y variables para el tratamiento de datos, Prev: descriptive, Up: descriptive 5571 557244.1 Introducci�n a descriptive 5573=============================== 5574 5575El paquete 'descriptive' contiene funciones para realizar cl'culos y 5576gr�ficos estad�sticos descriptivos. Junto con el c�digo fuente se 5577distribuyen tres conjuntos de datos: 'pidigits.data', 'wind.data' y 5578'biomed.data'. 5579 5580Cualquier manual de estad�stica se puede utilizar como referencia al 5581paquete 'descriptive'. 5582 5583Para comentarios, fallos y sugerencias, por favor contactar con 5584<'riotorto AT yahoo DOT com'>. 5585 5586Aqu� un sencillo ejemplo sobre c�mo operan las funciones de 5587'descriptive', dependiendo de la naturaleza de sus argumentos, listas o 5588matrices, 5589 5590 (%i1) load (descriptive)$ 5591 (%i2) /* muestra univariate */ mean ([a, b, c]); 5592 c + b + a 5593 (%o2) --------- 5594 3 5595 (%i3) matrix ([a, b], [c, d], [e, f]); 5596 [ a b ] 5597 [ ] 5598 (%o3) [ c d ] 5599 [ ] 5600 [ e f ] 5601 (%i4) /* muestra multivariante */ mean (%); 5602 e + c + a f + d + b 5603 (%o4) [---------, ---------] 5604 3 3 5605 5606N�tese que en las muestras multivariantes la media se calcula para cada 5607columna. 5608 5609En caso de varias muestras de diferente tama�o, la funci�n 'map' de 5610Maxima puede utilizarse para obtener los resultados deseados para cada 5611muestra, 5612 5613 (%i1) load (descriptive)$ 5614 (%i2) map (mean, [[a, b, c], [d, e]]); 5615 c + b + a e + d 5616 (%o2) [---------, -----] 5617 3 2 5618 5619En este caso, dos muestras de tama�os 3 y 2 han sido almacenadas en una 5620lista. 5621 5622Muestras univariantes deben guardarse en listas como en 5623 5624 (%i1) s1 : [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]; 5625 (%o1) [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] 5626 5627y muestras multivariantes en matrices como las del siguiente ejemplo 5628 5629 (%i1) s2 : matrix ([13.17, 9.29], [14.71, 16.88], [18.50, 16.88], 5630 [10.58, 6.63], [13.33, 13.25], [13.21, 8.12]); 5631 [ 13.17 9.29 ] 5632 [ ] 5633 [ 14.71 16.88 ] 5634 [ ] 5635 [ 18.5 16.88 ] 5636 (%o1) [ ] 5637 [ 10.58 6.63 ] 5638 [ ] 5639 [ 13.33 13.25 ] 5640 [ ] 5641 [ 13.21 8.12 ] 5642 5643En este caso, el n�mero de columnas es igual al de la dimensi�n de la 5644variable aleatoria y el n�mero de filas coincide con el tama�o muestral. 5645 5646Los datos pueden suministrarse manualmente, pero las muestras grandes se 5647suelen almacenar en ficheros de texto. Por ejemplo, el fichero 5648'pidigits.data' contiene los 100 primeros d�gitos del n�mero '%pi': 5649 3 5650 1 5651 4 5652 1 5653 5 5654 9 5655 2 5656 6 5657 5 5658 3 ... 5659 5660A fin de leer estos d�gitos desde Maxima, 5661 5662 (%i1) s1 : read_list (file_search ("pidigits.data"))$ 5663 (%i2) length (s1); 5664 (%o2) 100 5665 5666Por otro lado, el archivo 'wind.data' contiene los promedios diarios de 5667la velocidad del viento en cinco estaciones meteorol�gicas en Irlanda 5668(esta muestra es parte de un conjunto de datos correspondientes a 12 5669estaciones meteorol�gicas. El fichero original se puede descargar 5670libremente del 'StatLib Data Repository' y se analiza en Haslett, J., 5671Raftery, A. E. (1989) <Space-time Modelling with Long-memory Dependence: 5672Assessing Ireland's Wind Power Resource, with Discussion>. Applied 5673Statistics 38, 1-50). As� se leen los datos: 5674 5675 (%i1) s2 : read_matrix (file_search ("wind.data"))$ 5676 (%i2) length (s2); 5677 (%o2) 100 5678 (%i3) s2 [%]; /* last record */ 5679 (%o3) [3.58, 6.0, 4.58, 7.62, 11.25] 5680 5681Algunas muestras contienen datos no num�ricos. Como ejemplo, el archivo 5682'biomed.data' (el cual es parte de otro mayor descargado tambi�n del 5683'StatLib Data Repository') contiene cuatro mediciones sangu�neas tomadas 5684a dos grupos de pacientes, 'A' y 'B', de diferentes edades, 5685 5686 (%i1) s3 : read_matrix (file_search ("biomed.data"))$ 5687 (%i2) length (s3); 5688 (%o2) 100 5689 (%i3) s3 [1]; /* first record */ 5690 (%o3) [A, 30, 167.0, 89.0, 25.6, 364] 5691 5692El primer individuo pertenece al grupo 'A', tiene 30 a�os de edad y sus 5693medidas sangu�neas fueron 167.0, 89.0, 25.6 y 364. 5694 5695Debe tenerse cuidado cuando se trabaje con datos categ�ricos. En el 5696siguiente ejemplo, se asigna al s�mbolo 'a' cierto valor en alg�n 5697momento previo y luego se toma una muestra con el valor categ�rico 'a', 5698 5699 (%i1) a : 1$ 5700 (%i2) matrix ([a, 3], [b, 5]); 5701 [ 1 3 ] 5702 (%o2) [ ] 5703 [ b 5 ] 5704 5705 5706File: maxima.info, Node: Funciones y variables para el tratamiento de datos, Next: Funciones y variables de par�metros descriptivos, Prev: Introducci�n a descriptive, Up: descriptive 5707 570844.2 Funciones y variables para el tratamiento de datos 5709======================================================= 5710 5711 -- Funci�n: build_sample (<list>) 5712 -- Funci�n: build_sample (<matrix>) 5713 Construye una muestra a partir de una tabla de frecuencias 5714 absolutas. La tabla de entrada puede ser una una matriz o una 5715 lista de listas, todas ellas de igual tama�o. El n�mero de 5716 columnas o la longitud de las listas debe ser mayor que la unidad. 5717 El �ltimo elemento de cada fila o lista se interpreta como la 5718 frecuencia absoluta. El resultado se devuelve siempre en formato 5719 de matriz. 5720 5721 Ejemplos: 5722 5723 Tabla de frecuencias univariante. 5724 5725 (%i1) load (descriptive)$ 5726 (%i2) sam1: build_sample([[6,1], [j,2], [2,1]]); 5727 [ 6 ] 5728 [ ] 5729 [ j ] 5730 (%o2) [ ] 5731 [ j ] 5732 [ ] 5733 [ 2 ] 5734 (%i3) mean(sam1); 5735 2 j + 8 5736 (%o3) [-------] 5737 4 5738 (%i4) barsplot(sam1) $ 5739 5740 Tabla de frecuencias multivariante. 5741 5742 (%i1) load (descriptive)$ 5743 (%i2) sam2: build_sample([[6,3,1], [5,6,2], [u,2,1],[6,8,2]]) ; 5744 [ 6 3 ] 5745 [ ] 5746 [ 5 6 ] 5747 [ ] 5748 [ 5 6 ] 5749 (%o2) [ ] 5750 [ u 2 ] 5751 [ ] 5752 [ 6 8 ] 5753 [ ] 5754 [ 6 8 ] 5755 (%i3) cov(sam2); 5756 [ 2 2 ] 5757 [ u + 158 (u + 28) 2 u + 174 11 (u + 28) ] 5758 [ -------- - --------- --------- - ----------- ] 5759 (%o3) [ 6 36 6 12 ] 5760 [ ] 5761 [ 2 u + 174 11 (u + 28) 21 ] 5762 [ --------- - ----------- -- ] 5763 [ 6 12 4 ] 5764 (%i4) barsplot(sam2, grouping=stacked) $ 5765 5766 -- Funci�n: continuous_freq (<list>) 5767 -- Funci�n: continuous_freq (<list>, <m>) 5768 El argumento de 'continuous_freq' debe ser una lista de n�meros. 5769 Divide el rango en intervalos y cuenta cu�ntos valores hay en 5770 ellos. El segundo argumento es opcional y puede ser el n�mero de 5771 clases deseado, 10 por defecto, o una lista que contenga los 5772 l�mites de las clases y el n�mero de �stas, o una lista que 5773 contenga �nicamente los l�mites. Si los valores muestrales son 5774 todos iguales, esta funci�n devuelve solamente una clase de 5775 amplitud 2. 5776 5777 Ejemplos: 5778 5779 El argumento opcional indica el n�mero de clases deseadas. La 5780 primera lista de la respuesta contiene los l�mites de los 5781 intervalos y la segunda los totales correspondientes: hay 16 5782 d�gitos en el intervalo '[0, 1.8]', 24 en '(1.8, 3.6]' y as� 5783 sucesivamente. 5784 5785 (%i1) load (descriptive)$ 5786 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 5787 (%i3) continuous_freq (s1, 5); 5788 (%o3) [[0, 1.8, 3.6, 5.4, 7.2, 9.0], [16, 24, 18, 17, 25]] 5789 5790 El argumento opcional indica que queremos 7 clases con l�mites -2 y 5791 12: 5792 5793 (%i1) load (descriptive)$ 5794 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 5795 (%i3) continuous_freq (s1, [-2,12,7]); 5796 (%o3) [[- 2, 0, 2, 4, 6, 8, 10, 12], [8, 20, 22, 17, 20, 13, 0]] 5797 5798 El argumento opcional indica que queremos el n�mero por defecto de 5799 clases y l�mites -2 y 12: 5800 5801 (%i1) load (descriptive)$ 5802 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 5803 (%i3) continuous_freq (s1, [-2,12]); 5804 3 4 11 18 32 39 46 53 5805 (%o3) [[- 2, - -, -, --, --, 5, --, --, --, --, 12], 5806 5 5 5 5 5 5 5 5 5807 [0, 8, 20, 12, 18, 9, 8, 25, 0, 0]] 5808 5809 -- Funci�n: discrete_freq (<list>) 5810 Calcula las frecuencias absolutas en muestras discretas, tanto 5811 num�ricas como categ�ricas. Su �nico argumento debe ser una lista. 5812 5813 (%i1) load (descriptive)$ 5814 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 5815 (%i3) discrete_freq (s1); 5816 (%o3) [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 5817 [8, 8, 12, 12, 10, 8, 9, 8, 12, 13]] 5818 5819 La primera lista son los valores de la muestra y la segunda sus 5820 frecuencias absolutas. Las instrucciones '? col' y '? transpose' 5821 pueden ayudar a comprender la �ltima entrada. 5822 5823 -- Funci�n: standardize (<list>) 5824 -- Funci�n: standardize (<matrix>) 5825 5826 Resta a cada elemento de la lista la media muestral y luego divide 5827 el resultado por la desviaci�n t�pica. Si la entrada es una 5828 matriz, 'standardize' resta a cada fila la media multivariante y 5829 luego divide cada componente por la desviaci�n t�pica 5830 correspondiente. 5831 5832 -- Funci�n: subsample (<data_matrix>, <predicate_function>) 5833 -- Funci�n: subsample (<data_matrix>, <predicate_function>, <col_num>, 5834 <col_num>, ...) 5835 Esta es una variante de la funci�n 'submatrix' de Maxima. El 5836 primer argumento es una matriz de datos, el segundo es una funci�n 5837 de predicado y el resto de argumentos opcionales son los n�meros de 5838 las columnas a tomar en consideraci�n. 5839 5840 Estos son los registros multivariantes en los que la velocidad del 5841 viento en la primera estaci�n meteorol�gica fue menor de 18 nudos. 5842 V�ase c�mo en la expresi�n lambda la <i>-�sima componente se la 5843 referencia como 'v[i]'. 5844 (%i1) load (descriptive)$ 5845 (%i2) s2 : read_matrix (file_search ("wind.data"))$ 5846 (%i3) subsample (s2, lambda([v], v[1] > 18)); 5847 [ 19.38 15.37 15.12 23.09 25.25 ] 5848 [ ] 5849 [ 18.29 18.66 19.08 26.08 27.63 ] 5850 (%o3) [ ] 5851 [ 20.25 21.46 19.95 27.71 23.38 ] 5852 [ ] 5853 [ 18.79 18.96 14.46 26.38 21.84 ] 5854 5855 En el siguiente ejemplo, se solicitan �nicamente la primera, 5856 segunda y quinta componentes de aquellos registros con velocidades 5857 del viento mayores o iguales que 16 nudos en la estaci�n n�mero 1 y 5858 menores que 25 nudos en la estaci�n n�mero 4. La muestra s�lo 5859 contiene los datos referidos a las estaciones 1, 2 y 5. En este 5860 caso, la funci�n de predicado se define por medio de una funci�n de 5861 Maxima ordinaria. 5862 (%i1) load (descriptive)$ 5863 (%i2) s2 : read_matrix (file_search ("wind.data"))$ 5864 (%i3) g(x):= x[1] >= 16 and x[4] < 25$ 5865 (%i4) subsample (s2, g, 1, 2, 5); 5866 [ 19.38 15.37 25.25 ] 5867 [ ] 5868 [ 17.33 14.67 19.58 ] 5869 (%o4) [ ] 5870 [ 16.92 13.21 21.21 ] 5871 [ ] 5872 [ 17.25 18.46 23.87 ] 5873 5874 He aqu� un ejemplo con las variables categ�ricas de 'biomed.data'. 5875 Se piden los registros correspondientes a aquellos pacientes del 5876 grupo 'B' mayores de 38 an�os, 5877 (%i1) load (descriptive)$ 5878 (%i2) s3 : read_matrix (file_search ("biomed.data"))$ 5879 (%i3) h(u):= u[1] = B and u[2] > 38 $ 5880 (%i4) subsample (s3, h); 5881 [ B 39 28.0 102.3 17.1 146 ] 5882 [ ] 5883 [ B 39 21.0 92.4 10.3 197 ] 5884 [ ] 5885 [ B 39 23.0 111.5 10.0 133 ] 5886 [ ] 5887 [ B 39 26.0 92.6 12.3 196 ] 5888 (%o4) [ ] 5889 [ B 39 25.0 98.7 10.0 174 ] 5890 [ ] 5891 [ B 39 21.0 93.2 5.9 181 ] 5892 [ ] 5893 [ B 39 18.0 95.0 11.3 66 ] 5894 [ ] 5895 [ B 39 39.0 88.5 7.6 168 ] 5896 5897 Es probable que el an�lisis estad�stico requiera �nicamente de las 5898 medidas sangu�neas. 5899 (%i1) load (descriptive)$ 5900 (%i2) s3 : read_matrix (file_search ("biomed.data"))$ 5901 (%i3) subsample (s3, lambda([v], v[1] = B and v[2] > 38), 5902 3, 4, 5, 6); 5903 [ 28.0 102.3 17.1 146 ] 5904 [ ] 5905 [ 21.0 92.4 10.3 197 ] 5906 [ ] 5907 [ 23.0 111.5 10.0 133 ] 5908 [ ] 5909 [ 26.0 92.6 12.3 196 ] 5910 (%o3) [ ] 5911 [ 25.0 98.7 10.0 174 ] 5912 [ ] 5913 [ 21.0 93.2 5.9 181 ] 5914 [ ] 5915 [ 18.0 95.0 11.3 66 ] 5916 [ ] 5917 [ 39.0 88.5 7.6 168 ] 5918 5919 Esta es la media multivariante de 's3'. 5920 (%i1) load (descriptive)$ 5921 (%i2) s3 : read_matrix (file_search ("biomed.data"))$ 5922 (%i3) mean (s3); 5923 65 B + 35 A 317 6 NA + 8145.0 5924 (%o3) [-----------, ---, 87.178, -------------, 18.123, 5925 100 10 100 5926 3 NA + 19587 5927 ------------] 5928 100 5929 5930 Aqu� la primera componente carece de significado, ya que tanto 'A' 5931 como 'B' son categ�ricas, la segunda componente es la edad media de 5932 los individuos en forma racional, al tiempo que los valores cuarto 5933 y quinto muestran cierto comportamiento extra�o; lo cual se debe a 5934 que el s�mbolo 'NA' se utiliza para indicar datos no disponibles, 5935 por lo que ambas medias no tienen sentido. Una posible soluci�n 5936 puede ser extraer de la matriz aquellas filas con s�mbolos 'NA', lo 5937 que acarrear�a cierta p�rdida de informaci�n. 5938 (%i1) load (descriptive)$ 5939 (%i2) s3 : read_matrix (file_search ("biomed.data"))$ 5940 (%i3) g(v):= v[4] # NA and v[6] # NA $ 5941 (%i4) mean (subsample (s3, g, 3, 4, 5, 6)); 5942 (%o4) [79.4923076923077, 86.2032967032967, 16.93186813186813, 5943 2514 5944 ----] 5945 13 5946 5947 -- Funci�n: transform_sample (<matriz>, <varlist>, <exprlist>) 5948 5949 Transforma la <matriz> de datos, en la que a cada columna se le 5950 asigna un nombre de acuerdo con la lista <varlist>, seg�n las 5951 expresiones de <exprlist>. 5952 5953 Ejemplos: 5954 5955 El segundo argumento asigna nombres a las tres columnas, con ellos 5956 la lista de expresiones define la transformaci�n de la muestra. 5957 5958 (%i1) load (descriptive)$ 5959 (%i2) data: matrix([3,2,7],[3,7,2],[8,2,4],[5,2,4]) $ 5960 (%i3) transform_sample(data, [a,b,c], [c, a*b, log(a)]); 5961 [ 7 6 log(3) ] 5962 [ ] 5963 [ 2 21 log(3) ] 5964 (%o3) [ ] 5965 [ 4 16 log(8) ] 5966 [ ] 5967 [ 4 10 log(5) ] 5968 5969 A�ade una columna constante y elimina la tercera variable. 5970 5971 (%i1) load (descriptive)$ 5972 (%i2) data: matrix([3,2,7],[3,7,2],[8,2,4],[5,2,4]) $ 5973 (%i3) transform_sample(data, [a,b,c], [makelist(1,k,length(data)),a,b]); 5974 [ 1 3 2 ] 5975 [ ] 5976 [ 1 3 7 ] 5977 (%o3) [ ] 5978 [ 1 8 2 ] 5979 [ ] 5980 [ 1 5 2 ] 5981 5982 5983File: maxima.info, Node: Funciones y variables de par�metros descriptivos, Next: Funciones y variables para gr�ficos estad�sticos, Prev: Funciones y variables para el tratamiento de datos, Up: descriptive 5984 598544.3 Funciones y variables de par�metros descriptivos 5986===================================================== 5987 5988 -- Funci�n: mean (<list>) 5989 -- Funci�n: mean (<matrix>) 5990 Es la media muestral, definida como 5991 n 5992 ==== 5993 _ 1 \ 5994 x = - > x 5995 n / i 5996 ==== 5997 i = 1 5998 5999 Ejemplo: 6000 6001 (%i1) load (descriptive)$ 6002 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6003 (%i3) mean (s1); 6004 471 6005 (%o3) --- 6006 100 6007 (%i4) %, numer; 6008 (%o4) 4.71 6009 (%i5) s2 : read_matrix (file_search ("wind.data"))$ 6010 (%i6) mean (s2); 6011 (%o6) [9.9485, 10.1607, 10.8685, 15.7166, 14.8441] 6012 6013 -- Funci�n: var (<list>) 6014 -- Funci�n: var (<matrix>) 6015 Es la varianza muestral, definida como 6016 n 6017 ==== 6018 2 1 \ _ 2 6019 s = - > (x - x) 6020 n / i 6021 ==== 6022 i = 1 6023 6024 Ejemplo: 6025 6026 (%i1) load (descriptive)$ 6027 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6028 (%i3) var (s1), numer; 6029 (%o3) 8.425899999999999 6030 6031 V�ase tambi�n 'var1'. 6032 6033 -- Funci�n: var1 (<list>) 6034 -- Funci�n: var1 (<matrix>) 6035 Es la cuasivarianza muestral, definida como 6036 n 6037 ==== 6038 1 \ _ 2 6039 --- > (x - x) 6040 n-1 / i 6041 ==== 6042 i = 1 6043 6044 Ejemplo: 6045 6046 (%i1) load (descriptive)$ 6047 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6048 (%i3) var1 (s1), numer; 6049 (%o3) 8.5110101010101 6050 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6051 (%i5) var1 (s2); 6052 (%o5) [17.39586540404041, 15.13912778787879, 15.63204924242424, 6053 32.50152569696971, 24.66977392929294] 6054 6055 V�ase tambi�n 'var'. 6056 6057 -- Funci�n: std (<list>) 6058 -- Funci�n: std (<matrix>) 6059 Es la desviaci�n t�pica muestral, ra�z cuadrada de 'var'. 6060 6061 Ejemplo: 6062 6063 (%i1) load (descriptive)$ 6064 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6065 (%i3) std (s1), numer; 6066 (%o3) 2.902740084816414 6067 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6068 (%i5) std (s2); 6069 (%o5) [4.149928523480858, 3.871399812729241, 3.933920277534866, 6070 5.672434260526957, 4.941970881136392] 6071 6072 V�anse tambi�n 'var' y 'std1'. 6073 6074 -- Funci�n: std1 (<list>) 6075 -- Funci�n: std1 (<matrix>) 6076 Es la cuasidesviaci�n t�pica muestral, ra�z cuadrada de 'var1'. 6077 6078 Ejemplo: 6079 6080 (%i1) load (descriptive)$ 6081 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6082 (%i3) std1 (s1), numer; 6083 (%o3) 2.917363553109228 6084 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6085 (%i5) std1 (s2); 6086 (%o5) [4.17083509672109, 3.89090320978032, 3.953738641137555, 6087 5.701010936401517, 4.966867617451963] 6088 6089 V�anse tambi�n 'var1' y 'std'. 6090 6091 -- Funci�n: noncentral_moment (<list>, <k>) 6092 -- Funci�n: noncentral_moment (<matrix>, <k>) 6093 Es el momento no central de orden k, definido como 6094 n 6095 ==== 6096 1 \ k 6097 - > x 6098 n / i 6099 ==== 6100 i = 1 6101 6102 Ejemplo: 6103 6104 (%i1) load (descriptive)$ 6105 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6106 (%i3) noncentral_moment (s1, 1), numer; /* the mean */ 6107 (%o3) 4.71 6108 (%i5) s2 : read_matrix (file_search ("wind.data"))$ 6109 (%o5) [319793.8724761506, 320532.1923892463, 391249.5621381556, 6110 2502278.205988911, 1691881.797742255] 6111 (%i6) noncentral_moment (s2, 5); 6112 6113 V�ase tambi�n 'central_moment'. 6114 6115 -- Funci�n: central_moment (<list>, <k>) 6116 -- Funci�n: central_moment (<matrix>, <k>) 6117 Es el momento central de orden k, definido como 6118 n 6119 ==== 6120 1 \ _ k 6121 - > (x - x) 6122 n / i 6123 ==== 6124 i = 1 6125 6126 Ejemplo: 6127 6128 (%i1) load (descriptive)$ 6129 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6130 (%i3) central_moment (s1, 2), numer; /* the variance */ 6131 (%o3) 8.425899999999999 6132 (%i5) s2 : read_matrix (file_search ("wind.data"))$ 6133 (%o5) [11.29584771375004, 16.97988248298583, 5.626661952750102, 6134 37.5986572057918, 25.85981904394192] 6135 (%i6) central_moment (s2, 3); 6136 6137 V�anse tambi�n 'central_moment' y 'mean'. 6138 6139 -- Funci�n: cv (<list>) 6140 -- Funci�n: cv (<matrix>) 6141 Es el coeficiente de variaci�n, o cociente entre la desviaci�n 6142 t�pica muestral ('std') y la media ('mean'), 6143 6144 (%i1) load (descriptive)$ 6145 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6146 (%i3) cv (s1), numer; 6147 (%o3) .6193977819764815 6148 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6149 (%i5) cv (s2); 6150 (%o5) [.4192426091090204, .3829365309260502, 0.363779605385983, 6151 .3627381836021478, .3346021393989506] 6152 6153 V�anse tambi�n 'std' y 'mean'. 6154 6155 -- Funci�n: smin (<list>) 6156 -- Funci�n: smin (<matrix>) 6157 Es el valor m�nimo de la muestra <list>. Cuando el argumento es 6158 una matriz, 'smin' devuelve una lista con los valores m�nimos de 6159 las columnas, las cuales est�n asociadas a variables estad�sticas. 6160 6161 (%i1) load (descriptive)$ 6162 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6163 (%i3) smin (s1); 6164 (%o3) 0 6165 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6166 (%i5) smin (s2); 6167 (%o5) [0.58, 0.5, 2.67, 5.25, 5.17] 6168 6169 V�ase tambi�n 'smax'. 6170 6171 -- Funci�n: smax (<list>) 6172 -- Funci�n: smax (<matrix>) 6173 Es el valor m�ximo de la muestra <list>. Cuando el argumento es 6174 una matriz, 'smax' devuelve una lista con los valores m�ximos de 6175 las columnas, las cuales est�n asociadas a variables estad�sticas. 6176 6177 (%i1) load (descriptive)$ 6178 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6179 (%i3) smax (s1); 6180 (%o3) 9 6181 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6182 (%i5) smax (s2); 6183 (%o5) [20.25, 21.46, 20.04, 29.63, 27.63] 6184 6185 V�ase tambi�n 'smin'. 6186 6187 -- Funci�n: range (<list>) 6188 -- Funci�n: range (<matrix>) 6189 Es la diferencia entre los valores extremos. 6190 6191 Ejemplo: 6192 6193 (%i1) load (descriptive)$ 6194 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6195 (%i3) range (s1); 6196 (%o3) 9 6197 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6198 (%i5) range (s2); 6199 (%o5) [19.67, 20.96, 17.37, 24.38, 22.46] 6200 6201 -- Funci�n: quantile (<list>, <p>) 6202 -- Funci�n: quantile (<matrix>, <p>) 6203 Es el <p>-cuantil, siendo <p> un n�mero del intervalo [0, 1], de la 6204 muestra <list>. Aunque existen varias definiciones para el cuantil 6205 muestral (Hyndman, R. J., Fan, Y. (1996) <Sample quantiles in 6206 statistical packages>. American Statistician, 50, 361-365), la 6207 programada en el paquete 'descriptive' es la basada en la 6208 interpolaci�n lineal. 6209 6210 Ejemplo: 6211 6212 (%i1) load (descriptive)$ 6213 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6214 (%i3) /* 1st and 3rd quartiles */ 6215 [quantile (s1, 1/4), quantile (s1, 3/4)], numer; 6216 (%o3) [2.0, 7.25] 6217 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6218 (%i5) quantile (s2, 1/4); 6219 (%o5) [7.2575, 7.477500000000001, 7.82, 11.28, 11.48] 6220 6221 -- Funci�n: median (<list>) 6222 -- Funci�n: median (<matrix>) 6223 Una vez ordenada una muestra, si el tama�o muestral es impar la 6224 mediana es el valor central, en caso contrario ser� la media de los 6225 dos valores centrales. 6226 6227 Ejemplo: 6228 6229 (%i1) load (descriptive)$ 6230 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6231 (%i3) median (s1); 6232 9 6233 (%o3) - 6234 2 6235 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6236 (%i5) median (s2); 6237 (%o5) [10.06, 9.855, 10.73, 15.48, 14.105] 6238 6239 La mediana es el cuantil 1/2. 6240 6241 V�ase tambi�n 'quantile'. 6242 6243 -- Funci�n: qrange (<list>) 6244 -- Funci�n: qrange (<matrix>) 6245 El rango intercuart�lico es la diferencia entre el tercer y primer 6246 cuartil, 'quantile(<list>,3/4) - quantile(<list>,1/4)', 6247 6248 (%i1) load (descriptive)$ 6249 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6250 (%i3) qrange (s1); 6251 21 6252 (%o3) -- 6253 4 6254 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6255 (%i5) qrange (s2); 6256 (%o5) [5.385, 5.572499999999998, 6.0225, 8.729999999999999, 6257 6.650000000000002] 6258 6259 V�ase tambi�n 'quantile'. 6260 6261 -- Funci�n: mean_deviation (<list>) 6262 -- Funci�n: mean_deviation (<matrix>) 6263 Es la desviaci�n media, definida como 6264 n 6265 ==== 6266 1 \ _ 6267 - > |x - x| 6268 n / i 6269 ==== 6270 i = 1 6271 6272 Ejemplo: 6273 6274 (%i1) load (descriptive)$ 6275 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6276 (%i3) mean_deviation (s1); 6277 51 6278 (%o3) -- 6279 20 6280 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6281 (%i5) mean_deviation (s2); 6282 (%o5) [3.287959999999999, 3.075342, 3.23907, 4.715664000000001, 6283 4.028546000000002] 6284 6285 V�ase tambi�n 'mean'. 6286 6287 -- Funci�n: median_deviation (<list>) 6288 -- Funci�n: median_deviation (<matrix>) 6289 Es la desviaci�n mediana, definida como 6290 n 6291 ==== 6292 1 \ 6293 - > |x - med| 6294 n / i 6295 ==== 6296 i = 1 6297 6298 siendo 'med' la mediana de <list>. 6299 6300 Ejemplo: 6301 6302 (%i1) load (descriptive)$ 6303 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6304 (%i3) median_deviation (s1); 6305 5 6306 (%o3) - 6307 2 6308 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6309 (%i5) median_deviation (s2); 6310 (%o5) [2.75, 2.755, 3.08, 4.315, 3.31] 6311 6312 V�ase tambi�n 'mean'. 6313 6314 -- Funci�n: harmonic_mean (<list>) 6315 -- Funci�n: harmonic_mean (<matrix>) 6316 Es la media arm�nica, definida como 6317 n 6318 -------- 6319 n 6320 ==== 6321 \ 1 6322 > -- 6323 / x 6324 ==== i 6325 i = 1 6326 6327 Ejemplo: 6328 6329 (%i1) load (descriptive)$ 6330 (%i2) y : [5, 7, 2, 5, 9, 5, 6, 4, 9, 2, 4, 2, 5]$ 6331 (%i3) harmonic_mean (y), numer; 6332 (%o3) 3.901858027632205 6333 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6334 (%i5) harmonic_mean (s2); 6335 (%o5) [6.948015590052786, 7.391967752360356, 9.055658197151745, 6336 13.44199028193692, 13.01439145898509] 6337 6338 V�anse tambi�n 'mean' y 'geometric_mean'. 6339 6340 -- Funci�n: geometric_mean (<list>) 6341 -- Funci�n: geometric_mean (<matrix>) 6342 Es la media geom�trica, definida como 6343 / n \ 1/n 6344 | /===\ | 6345 | ! ! | 6346 | ! ! x | 6347 | ! ! i| 6348 | i = 1 | 6349 \ / 6350 6351 Ejemplo: 6352 6353 (%i1) load (descriptive)$ 6354 (%i2) y : [5, 7, 2, 5, 9, 5, 6, 4, 9, 2, 4, 2, 5]$ 6355 (%i3) geometric_mean (y), numer; 6356 (%o3) 4.454845412337012 6357 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6358 (%i5) geometric_mean (s2); 6359 (%o5) [8.82476274347979, 9.22652604739361, 10.0442675714889, 6360 14.61274126349021, 13.96184163444275] 6361 6362 V�anse tambi�n 'mean' y 'harmonic_mean'. 6363 6364 -- Funci�n: kurtosis (<list>) 6365 -- Funci�n: kurtosis (<matrix>) 6366 Es el coeficiente de curtosis, definido como 6367 n 6368 ==== 6369 1 \ _ 4 6370 ---- > (x - x) - 3 6371 4 / i 6372 n s ==== 6373 i = 1 6374 6375 Ejemplo: 6376 6377 (%i1) load (descriptive)$ 6378 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6379 (%i3) kurtosis (s1), numer; 6380 (%o3) - 1.273247946514421 6381 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6382 (%i5) kurtosis (s2); 6383 (%o5) [- .2715445622195385, 0.119998784429451, 6384 - .4275233490482866, - .6405361979019522, - .4952382132352935] 6385 6386 V�anse tambi�n 'mean', 'var' y 'skewness'. 6387 6388 -- Funci�n: skewness (<list>) 6389 -- Funci�n: skewness (<matrix>) 6390 Es el coeficiente de asimetr�a, definido como 6391 n 6392 ==== 6393 1 \ _ 3 6394 ---- > (x - x) 6395 3 / i 6396 n s ==== 6397 i = 1 6398 6399 Ejemplo: 6400 6401 (%i1) load (descriptive)$ 6402 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6403 (%i3) skewness (s1), numer; 6404 (%o3) .009196180476450306 6405 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6406 (%i5) skewness (s2); 6407 (%o5) [.1580509020000979, .2926379232061854, .09242174416107717, 6408 .2059984348148687, .2142520248890832] 6409 6410 V�anse tambi�n 'mean', 'var' y 'kurtosis'. 6411 6412 -- Funci�n: pearson_skewness (<list>) 6413 -- Funci�n: pearson_skewness (<matrix>) 6414 Es el coeficiente de asimetr�a de Pearson, definido como 6415 _ 6416 3 (x - med) 6417 ----------- 6418 s 6419 6420 siendo <med> la mediana de <list>. 6421 6422 Ejemplo: 6423 6424 (%i1) load (descriptive)$ 6425 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6426 (%i3) pearson_skewness (s1), numer; 6427 (%o3) .2159484029093895 6428 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6429 (%i5) pearson_skewness (s2); 6430 (%o5) [- .08019976629211892, .2357036272952649, 6431 .1050904062491204, .1245042340592368, .4464181795804519] 6432 6433 V�anse tambi�n 'mean', 'var' y 'median'. 6434 6435 -- Funci�n: quartile_skewness (<list>) 6436 -- Funci�n: quartile_skewness (<matrix>) 6437 Es el coeficiente de asimetr�a cuart�lico, definido como 6438 c - 2 c + c 6439 3/4 1/2 1/4 6440 -------------------- 6441 c - c 6442 3/4 1/4 6443 6444 siendo c_p el <p>-cuantil de la muestra <list>. 6445 6446 Ejemplo: 6447 6448 (%i1) load (descriptive)$ 6449 (%i2) s1 : read_list (file_search ("pidigits.data"))$ 6450 (%i3) quartile_skewness (s1), numer; 6451 (%o3) .04761904761904762 6452 (%i4) s2 : read_matrix (file_search ("wind.data"))$ 6453 (%i5) quartile_skewness (s2); 6454 (%o5) [- 0.0408542246982353, .1467025572005382, 6455 0.0336239103362392, .03780068728522298, 0.210526315789474] 6456 6457 V�ase tambi�n 'quantile'. 6458 6459 -- Funci�n: km (<list>, <option> ...) 6460 -- Funci�n: km (<matrix>, <option> ...) 6461 6462 Estimador Kaplan-Meier de la funci�n de supervivencia o fiabilidad 6463 S(x)=1-F(x). 6464 6465 Los datos se pueden introducir como una lista de pares de n�meros o 6466 como una matriz de dos columnas. La primera componente es el 6467 tiempo observado y la segunda componente es el �ndice de censura (1 6468 = no censurado, 0 = censurado por la derecha). 6469 6470 El argumento opcional es el nombre de la variable en la expresi�n 6471 devuelta, la cual es <x> por defecto. 6472 6473 Ejemplos: 6474 6475 Muestra como una lista de pares. 6476 6477 (%i1) load (descriptive)$ 6478 (%i2) S: km([[2,1], [3,1], [5,0], [8,1]]); 6479 charfun((3 <= x) and (x < 8)) 6480 (%o2) charfun(x < 0) + ----------------------------- 6481 2 6482 3 charfun((2 <= x) and (x < 3)) 6483 + ------------------------------- 6484 4 6485 + charfun((0 <= x) and (x < 2)) 6486 (%i3) load (draw)$ 6487 (%i4) draw2d( 6488 line_width = 3, grid = true, 6489 explicit(S, x, -0.1, 10))$ 6490 6491 Estimaci�n de probabilidades de supervivencia. 6492 6493 (%i1) load (descriptive)$ 6494 (%i2) S(t):= ''(km([[2,1], [3,1], [5,0], [8,1]], t)) $ 6495 (%i3) S(6); 6496 1 6497 (%o3) - 6498 2 6499 6500 -- Funci�n: cdf_empirical (<list>, <option> ...) 6501 -- Funci�n: cdf_empirical (<matrix>, <option> ...) 6502 6503 Funci�n de distribuci�n emp�rica F(x). 6504 6505 Los datos se pueden introducir como una lista de n�meros o como una 6506 matriz columna. 6507 6508 El argumento opcional es el nombre de la variable en la expresi�n 6509 devuelta, la cual es <x> por defecto. 6510 6511 Ejemplo: 6512 6513 Funci�n de distribuci�n emp�rica. 6514 6515 (%i1) load (descriptive)$ 6516 (%i2) F(x):= ''(cdf_empirical([1,3,3,5,7,7,7,8,9])); 6517 (%o2) F(x) := (charfun(x >= 9) + charfun(x >= 8) 6518 + 3 charfun(x >= 7) + charfun(x >= 5) 6519 + 2 charfun(x >= 3) + charfun(x >= 1))/9 6520 (%i3) F(6); 6521 4 6522 (%o3) - 6523 9 6524 (%i4) load(draw)$ 6525 (%i5) draw2d( 6526 line_width = 3, 6527 grid = true, 6528 explicit(F(z), z, -2, 12)) $ 6529 6530 -- Funci�n: cov (<matrix>) 6531 Es la matriz de covarianzas de una muestra multivariante, definida 6532 como 6533 n 6534 ==== 6535 1 \ _ _ 6536 S = - > (X - X) (X - X)' 6537 n / j j 6538 ==== 6539 j = 1 6540 6541 siendo X_j la j-�sima fila de la matriz muestral. 6542 6543 Ejemplo: 6544 6545 (%i1) load (descriptive)$ 6546 (%i2) s2 : read_matrix (file_search ("wind.data"))$ 6547 (%i3) fpprintprec : 7$ /* change precision for pretty output */ 6548 [ 17.22191 13.61811 14.37217 19.39624 15.42162 ] 6549 [ ] 6550 [ 13.61811 14.98774 13.30448 15.15834 14.9711 ] 6551 [ ] 6552 (%o4) [ 14.37217 13.30448 15.47573 17.32544 16.18171 ] 6553 [ ] 6554 [ 19.39624 15.15834 17.32544 32.17651 20.44685 ] 6555 [ ] 6556 [ 15.42162 14.9711 16.18171 20.44685 24.42308 ] 6557 (%i5) cov (s2); 6558 6559 V�ase tambi�n 'cov1'. 6560 6561 -- Funci�n: cov1 (<matrix>) 6562 Es la matriz de cuasivarianzas de una muestra multivariante, 6563 definida como 6564 n 6565 ==== 6566 1 \ _ _ 6567 S = --- > (X - X) (X - X)' 6568 1 n-1 / j j 6569 ==== 6570 j = 1 6571 6572 siendo X_j la j-�sima fila de la matriz muestral. 6573 6574 Ejemplo: 6575 6576 (%i1) load (descriptive)$ 6577 (%i2) s2 : read_matrix (file_search ("wind.data"))$ 6578 (%i3) fpprintprec : 7$ /* change precision for pretty output */ 6579 [ 17.39587 13.75567 14.51734 19.59216 15.5774 ] 6580 [ ] 6581 [ 13.75567 15.13913 13.43887 15.31145 15.12232 ] 6582 [ ] 6583 (%o4) [ 14.51734 13.43887 15.63205 17.50044 16.34516 ] 6584 [ ] 6585 [ 19.59216 15.31145 17.50044 32.50153 20.65338 ] 6586 [ ] 6587 [ 15.5774 15.12232 16.34516 20.65338 24.66977 ] 6588 (%i5) cov1 (s2); 6589 6590 V�ase tambi�n 'cov'. 6591 6592 -- Funci�n: global_variances (<matrix>) 6593 -- Funci�n: global_variances (<matrix>, <options> ...) 6594 La funci�n 'global_variances' devuelve una lista de medidas 6595 globales de variabilidad: 6596 6597 * <varianza total>: 'trace(S_1)', 6598 * <varianza media>: 'trace(S_1)/p', 6599 * <varianza generalizada>: 'determinant(S_1)', 6600 * <desviaci�n t�pica generalizada>: 'sqrt(determinant(S_1))', 6601 * <varianza efectiva> 'determinant(S_1)^(1/p)', (definida en: 6602 Pe�a, D. (2002) <An�lisis de datos multivariantes>; 6603 McGraw-Hill, Madrid.) 6604 * <desviaci�n t�pica efectiva>: 'determinant(S_1)^(1/(2*p))'. 6605 donde <p> es la dimensi�n de la variable aleatoria multivariante y 6606 S_1 la matriz de covarianzas devuelta por la funci�n 'cov1'. 6607 6608 Opci�n: 6609 6610 * ''data', por defecto ''true', indica si la matriz de entrada 6611 contiene los datos muestrales, en cuyo caso la matriz de 6612 covarianzas 'cov1' debe ser calculada; en caso contrario, se 6613 le debe pasar �sta a la funci�n como matriz sim�trica en lugar 6614 de los datos. 6615 6616 Ejemplo: 6617 6618 (%i1) load (descriptive)$ 6619 (%i2) s2 : read_matrix (file_search ("wind.data"))$ 6620 (%i3) global_variances (s2); 6621 (%o3) [105.338342060606, 21.06766841212119, 12874.34690469686, 6622 113.4651792608502, 6.636590811800794, 2.576158149609762] 6623 6624 C�lculo de 'global_variances' a partir de la matriz de covarianzas. 6625 6626 (%i1) load (descriptive)$ 6627 (%i2) s2 : read_matrix (file_search ("wind.data"))$ 6628 (%i3) s : cov1 (s2)$ 6629 (%i4) global_variances (s, data=false); 6630 (%o4) [105.338342060606, 21.06766841212119, 12874.34690469686, 6631 113.4651792608502, 6.636590811800794, 2.576158149609762] 6632 6633 V�anse tambi�n 'cov' y 'cov1'. 6634 6635 -- Funci�n: cor (<matrix>) 6636 -- Funci�n: cor (<matrix>, <options> ...) 6637 Es la matriz de correlaciones de la muestra multivariante. 6638 6639 Opci�n: 6640 6641 * ''data', por defecto ''true', indica si la matriz de entrada 6642 contiene los datos muestrales, en cuyo caso la matriz de 6643 covarianzas 'cov1' debe ser calculada; en caso contrario, se 6644 le debe pasar �sta a la funci�n como matriz sim�trica en lugar 6645 de los datos. 6646 6647 Ejemplo: 6648 6649 (%i1) load (descriptive)$ 6650 (%i2) fpprintprec:7$ 6651 (%i3) s2 : read_matrix (file_search ("wind.data"))$ 6652 (%i4) cor (s2); 6653 [ 1.0 .8476339 .8803515 .8239624 .7519506 ] 6654 [ ] 6655 [ .8476339 1.0 .8735834 .6902622 0.782502 ] 6656 [ ] 6657 (%o4) [ .8803515 .8735834 1.0 .7764065 .8323358 ] 6658 [ ] 6659 [ .8239624 .6902622 .7764065 1.0 .7293848 ] 6660 [ ] 6661 [ .7519506 0.782502 .8323358 .7293848 1.0 ] 6662 6663 C�lculo de la matriz de correlaciones a partir de la matriz de 6664 covarianzas. 6665 6666 (%i1) load (descriptive)$ 6667 (%i2) fpprintprec : 7 $ 6668 (%i3) s2 : read_matrix (file_search ("wind.data"))$ 6669 (%i4) s : cov1 (s2)$ 6670 (%i5) cor (s, data=false); /* this is faster */ 6671 [ 1.0 .8476339 .8803515 .8239624 .7519506 ] 6672 [ ] 6673 [ .8476339 1.0 .8735834 .6902622 0.782502 ] 6674 [ ] 6675 (%o5) [ .8803515 .8735834 1.0 .7764065 .8323358 ] 6676 [ ] 6677 [ .8239624 .6902622 .7764065 1.0 .7293848 ] 6678 [ ] 6679 [ .7519506 0.782502 .8323358 .7293848 1.0 ] 6680 6681 V�anse tambi�n 'cov' y 'cov1'. 6682 6683 -- Funci�n: list_correlations (<matrix>) 6684 -- Funci�n: list_correlations (<matrix>, <options> ...) 6685 La funci�n 'list_correlations' devuelve una lista con medidas de 6686 correlaci�n: 6687 6688 * <matriz de precisi�n>: es la inversa de la matriz de 6689 covarianzas S_1, 6690 -1 ij 6691 S = (s ) 6692 1 i,j = 1,2,...,p 6693 6694 * <multiple correlation vector>: (R_1^2, R_2^2, ..., R_p^2), 6695 with 6696 2 1 6697 R = 1 - ------- 6698 i ii 6699 s s 6700 ii 6701 es un indicador de la bondad de ajuste del modelo de regresi�n 6702 lineal multivariante de X_i cuando el resto de variables se 6703 utilizan como regresores. 6704 6705 * <matriz de correlaciones parciales>: en la que el elemento (i, 6706 j) es 6707 ij 6708 s 6709 r = - ------------ 6710 ij.rest / ii jj\ 1/2 6711 |s s | 6712 \ / 6713 6714 Opci�n: 6715 6716 * ''data', por defecto ''true', indica si la matriz de entrada 6717 contiene los datos muestrales, en cuyo caso la matriz de 6718 covarianzas 'cov1' debe ser calculada; en caso contrario, se 6719 le debe pasar �sta a la funci�n como matriz sim�trica en lugar 6720 de los datos. 6721 6722 Ejemplo: 6723 6724 (%i1) load (descriptive)$ 6725 (%i2) s2 : read_matrix (file_search ("wind.data"))$ 6726 (%i3) z : list_correlations (s2)$ 6727 (%i4) fpprintprec : 5$ /* for pretty output */ 6728 [ .38486 - .13856 - .15626 - .10239 .031179 ] 6729 [ ] 6730 [ - .13856 .34107 - .15233 .038447 - .052842 ] 6731 [ ] 6732 (%o5) [ - .15626 - .15233 .47296 - .024816 - .10054 ] 6733 [ ] 6734 [ - .10239 .038447 - .024816 .10937 - .034033 ] 6735 [ ] 6736 [ .031179 - .052842 - .10054 - .034033 .14834 ] 6737 (%o6) [.85063, .80634, .86474, .71867, .72675] 6738 [ - 1.0 .38244 .36627 .49908 - .13049 ] 6739 [ ] 6740 [ .38244 - 1.0 .37927 - .19907 .23492 ] 6741 [ ] 6742 (%o7) [ .36627 .37927 - 1.0 .10911 .37956 ] 6743 [ ] 6744 [ .49908 - .19907 .10911 - 1.0 .26719 ] 6745 [ ] 6746 [ - .13049 .23492 .37956 .26719 - 1.0 ] 6747 6748 V�anse tambi�n 'cov' y 'cov1'. 6749 6750 -- Funci�n: principal_components (<matrix>) 6751 -- Funci�n: principal_components (<matrix>, <options> ...) 6752 Calcula las componentes principales de una muestra multivariante. 6753 Las componentes principales se utilizan en el an�lisis estad�stico 6754 multivariante para reducir la dimensionalidad de la muestra. 6755 6756 Opci�n: 6757 6758 * ''data', por defecto ''true', indica si la matriz de entrada 6759 contiene los datos muestrales, en cuyo caso la matriz de 6760 covarianzas 'cov1' debe ser calculada; en caso contrario, se 6761 le debe pasar �sta a la funci�n como matriz sim�trica en lugar 6762 de los datos. 6763 6764 La salida de la funci�n 'principal_components' es una lista con los 6765 siguientes resultados: 6766 6767 * varianzas de las componentes principales, 6768 * porcentajes de variaci�n total explicada por cada componente 6769 principal, 6770 * matriz de rotaci�n. 6771 6772 Ejemplos: 6773 6774 En este ejemplo, la primera componente explica el 83.13 por ciento 6775 de la varianza total. 6776 6777 (%i1) load (descriptive)$ 6778 (%i2) s2 : read_matrix (file_search ("wind.data"))$ 6779 (%i3) fpprintprec:4 $ 6780 (%i4) res: principal_components(s2); 6781 0 errors, 0 warnings 6782 (%o4) [[87.57, 8.753, 5.515, 1.889, 1.613], 6783 [83.13, 8.31, 5.235, 1.793, 1.531], 6784 [ .4149 .03379 - .4757 - 0.581 - .5126 ] 6785 [ ] 6786 [ 0.369 - .3657 - .4298 .7237 - .1469 ] 6787 [ ] 6788 [ .3959 - .2178 - .2181 - .2749 .8201 ]] 6789 [ ] 6790 [ .5548 .7744 .1857 .2319 .06498 ] 6791 [ ] 6792 [ .4765 - .4669 0.712 - .09605 - .1969 ] 6793 (%i5) /* porcentajes acumulados */ 6794 block([ap: copy(res[2])], 6795 for k:2 thru length(ap) do ap[k]: ap[k]+ap[k-1], 6796 ap); 6797 (%o5) [83.13, 91.44, 96.68, 98.47, 100.0] 6798 (%i6) /* dimension de la muestra */ 6799 p: length(first(res)); 6800 (%o6) 5 6801 (%i7) /* dibuja porcentajes para seleccionar el numero de 6802 componentes principales para el analisis ulterior */ 6803 draw2d( 6804 fill_density = 0.2, 6805 apply(bars, makelist([k, res[2][k], 1/2], k, p)), 6806 points_joined = true, 6807 point_type = filled_circle, 6808 point_size = 3, 6809 points(makelist([k, res[2][k]], k, p)), 6810 xlabel = "Variances", 6811 ylabel = "Percentages", 6812 xtics = setify(makelist([concat("PC",k),k], k, p))) $ 6813 6814 En caso de que la matriz de covarianzas sea conocida, se le puede 6815 pasar a la funci�n, pero debe utilizarse la opci�n 'data=false'. 6816 6817 (%i1) load (descriptive)$ 6818 (%i2) S: matrix([1,-2,0],[-2,5,0],[0,0,2]); 6819 [ 1 - 2 0 ] 6820 [ ] 6821 (%o2) [ - 2 5 0 ] 6822 [ ] 6823 [ 0 0 2 ] 6824 (%i3) fpprintprec:4 $ 6825 (%i4) /* el argumento es una matriz de covarianzas */ 6826 res: principal_components(S, data=false); 6827 0 errors, 0 warnings 6828 [ - .3827 0.0 .9239 ] 6829 [ ] 6830 (%o4) [[5.828, 2.0, .1716], [72.86, 25.0, 2.145], [ .9239 0.0 .3827 ]] 6831 [ ] 6832 [ 0.0 1.0 0.0 ] 6833 (%i5) /* transformacion para obtener las componentes principales a 6834 partir de los registros originales */ 6835 matrix([a1,b2,c3],[a2,b2,c2]).last(res); 6836 [ .9239 b2 - .3827 a1 1.0 c3 .3827 b2 + .9239 a1 ] 6837 (%o5) [ ] 6838 [ .9239 b2 - .3827 a2 1.0 c2 .3827 b2 + .9239 a2 ] 6839 6840