3
* Introducci@'on a simplification::
4
* Definiciones para simplification::
7
@node Introducci@'on a simplification, Definiciones para simplification, simplification, simplification
8
@section Introducci@'on a simplification
10
El directorio @code{maxima/share/simplification} contiene programas que
11
implementan algunas reglas y funciones para simplificar expresiones,
12
as@'{@dotless{i}} como ciertas funciones no relacionadas con la simplificaci@'on.
15
@node Definiciones para simplification, , Introducci@'on a simplification, simplification
16
@section Definiciones para simplification
18
@c Adapted from absimp.usg ----------------------
20
@c @defvr {Add-on package} (WITH HYPHEN) CONFUSES DESCRIBE (CAN'T FIND END OF ITEM)
21
@c SAME WITH OTHER "ADD-ON PACKAGES" HERE (FACEXP, INEQ)
22
@subsection Paquete absimp
24
El paquete @code{absimp} contiene reglas para aplicar patrones que extienden
25
el sistema de reglas nativo de Maxima para las funciones @code{abs} y
26
@code{signum}, respetando las relaciones establecidas con la funci@'on
27
@code{assume} o con declaraciones tales como @code{modedeclare (m, even, n, odd)}
28
para enteros pares o impares.
30
En el paquete @code{absimp} se definen las funciones @code{unitramp} y
31
@code{unitstep} en t@'erminos de @code{abs} y @code{signum}.
33
La instrucci@'on @code{load (absimp)} carga este paquete y @code{demo (absimp)}
34
desarrolla una demostraci@'on sobre el uso del mismo.
49
(%i3) diff (abs (x), x);
57
@c disol.usg: "disolate" already in doc/info/Expressions.texi
59
@c elim.usg: "eliminate" already in doc/info/Polynomials.texi
61
@c Adapted from facexp.usg ----------------------
62
@c ALL OF THE TEXT IN FACEXP.USG IS VERY VAGUE.
63
@c I HAVE NO IDEA WHAT THESE FUNCTIONS DO.
64
@c ALL OF THESE ITEMS NEED TO BE HEAVILY REVISED
65
@c (ASSUMING THIS PACKAGE IS SOMETHING WE WANT TO INVEST TIME IN)
66
@subsection Paquete facexp
68
@c THIS IS VERY VAGUE. JUST WHAT DOES THIS DO?
69
El paquete @code{facexp} contiene varias funciones que le aportan al
70
usuario la posibilidad de estructurar expresiones controlando su
71
expansi@'on. Esta capacidad es especialmente @'util cuando la
72
expresi@'on contiene variables con significado f@'{@dotless{i}}sico,
73
ya que se suele dar el caso de que la forma m@'as sencilla para estas
74
expresiones se obtiene cuando se expanden respecto de estas variables
75
y luego se factoriza respecto de sus coeficientes. Si bien es cierto que
76
este procedimiento no es dif@'{@dotless{i}}cil de llevar a cabo con las
77
funciones est@'andar de Maxima, pueden ser necesarios algunos retoques
78
adicionales que s@'{@dotless{i}} pueden ser m@'as dif@'{@dotless{i}}ciles
81
La funci@'on @code{facsum} y sus formas relacionadas proporcionan un
82
m@'etodo para controlar la estructura de expresiones. La funci@'on
83
@code{collectterms} puede usarse para a@~nadir dos o m@'as
84
expresiones que ya hayan sido simplificadas de la forma indicada,
85
sin necesidad de volver a simplificar la expresi@'on completa.
86
Esta funci@'on puede ser @'util cuando las expresiones sean
89
@c CAN'T FIND ANY SUCH FILE "DIAGEVAL".
90
@c THERE ARE COMMENTED-OUT DEFNS OF FACTENEXPAND, FACEXPTEN, AND FACTORFACEXPTEN
91
@c IN FACEXP (AND NOWHERE ELSE).
92
@c COMMENTING OUT THIS TEXT FOR NOW.
93
@c Note: @code{factenexpand}, @code{facexpten}, and @code{factorfacexpten} are available only
94
@c after loading @code{diageval}. They are special functions used for tensor
97
La instrucci@'on @code{load (facexp)} carga este paquete y @code{demo (facexp)}
98
hace una demostraci@'on sobre su uso.
100
@c THIS IS VERY VAGUE. JUST WHAT DOES THIS DO?
101
@c SOME EXAMPLES WOULD HELP HERE
104
@deffn {Funci@'on} facsum (@var{expr}, @var{arg_1}, ..., @var{arg_n})
106
Devuelve una expresi@'on equivalente a @var{expr}, la cual
107
depende de los argumentos @var{arg_1}, ..., @var{arg_n}, y
108
@'estos pueden ser de cualquiera de las formas aceptables
109
para @code{ratvars}, o listas de estas formas. Si los
110
argumentos no son listas, la forma devuelta se expande
111
completamente con respecto de los argumentos, siendo los
112
coeficientes de tales argumentos factorizados. Estos
113
coeficientes no contienen a ninguno de los argumentos,
114
excepto quiz@'as de una forma no racional.
116
En caso de que cualquiera de los argumentos sea una lista, entonces
117
todos ellos se combinan en una @'unica lista, y en lugar de llamar
118
a @code{factor} para los coeficientes de los argumentos, @code{facsum}
119
se llama a s@'{@dotless{i}} misma utilizando esta nueva lista @'unica
120
como lista de argumentos.
122
Es posible que se quiera utilizar @code{facsum} con respecto a
123
expresiones m@'as complicadas, tales como @code{log (x + y)}. Estos
124
argumentos son tambi@'en admisibles. Si no se especifican variables,
125
como en @code{facsum (@var{expr})}, el resultado devuelto es el mismo
126
que el conseguido mediante @code{ratsimp (@var{expr})}.
128
En ocasiones puede ser necesario obtener cualquiera de las formas
129
anteriores especificadas por sus operadores principales. Por ejemplo,
130
se puede querer aplicar @code{facsum} con respecto a todos los
131
@code{log}; en este caso, se puede incluir entre los argumentos bien
132
los @code{log} espec@'{@dotless{i}}ficos que se quieran tratar de esta
133
manera, bien la expresi@'on @code{operator (log)} o @code{'operator (log)}.
134
Si se quiere aplicar @code{facsum} a @var{expr} con respecto a los
135
operadores @var{op_1}, ..., @var{op_n}, se debe evaluar
136
@code{facsum (@var{expr}, operator (@var{op_1}, ..., @var{op_n}))}.
137
La forma @code{operator} puede aparecer tambi@'en dentro de las
138
listas de argumentos.
140
Adem@'as, d@'andole valores a las variables opcionales @code{facsum_combine}
141
y @code{nextlayerfactor} se puede controlar el resultado de @code{facsum}.
144
@defvr {Variable global} nextlayerfactor
145
Valor por defecto: @code{false}
147
Si @code{nextlayerfactor} vale @code{true}, las llamadas recursivas de
148
@code{facsum} se aplican a los factores de la forma factorizada de los
149
coeficientes de los argumentos.
151
Si vale @code{false}, @code{facsum} se aplica a cada coeficiente como
152
un todo cada vez que se efect@'uen llamadas recursivas a @code{facsum}.
154
La inclusi@'on del @'atomo @code{nextlayerfactor} en la lista de
155
argumentos de @code{facsum} tiene el mismo efecto que
156
@code{nextlayerfactor: true}, pero @i{solamente} para el siguiente
157
nivel de la expresi@'on. Puesto que @code{nextlayerfactor} toma
158
siempre uno de los valores @code{true} o @code{false}, debe aparecer
159
comentado (comilla simple) cada vez que aparezca en la lista de
160
argumentos de @code{facsum}.
163
@defvr {Variable global} facsum_combine
164
Valor por defecto: @code{true}
166
La variable @code{facsum_combine} controla la forma del resultado final
167
devuelto por @code{facsum} si su argumento es un cociente de polinomios.
168
Si @code{facsum_combine} vale @code{false}, el resultado ser@'a una suma
169
completamente expandida, pero si vale @code{true}, la expresi@'on devuelta
170
es un cociente de polinomios.
172
@c aqu'i falta un p'arrafo.
176
@deffn {Funci@'on} factorfacsum (@var{expr}, @var{arg_1}, ... @var{arg_n})
177
Devuelve una expresi@'on equivalente a @var{expr} obtenida aplicando
178
@code{facsum} a los factores de @var{expr}, de argumentos
179
@var{arg_1}, ... @var{arg_n}. Si alguno de los factores de @var{expr} se
180
eleva a una potencia, tanto el factor como el exponente se procesar@'an de
184
@deffn {Funci@'on} collectterms (@var{arg_1}, ..., @var{arg_n})
185
Si algunas expresiones fueron ya simplificadas con @code{facsum}, @code{factorfacsum},
186
@code{factenexpand}, @code{facexpten} o @code{factorfacexpten}, debiendo ser
187
luego sumadas, puede ser conveniente combinarlas utilizando la funci@'on
188
@code{collecterms}, la cual admite como argumentos todos aqu@'ellos que se
189
puedan pasar a las anteriormente citadas funciones, con la excepci@'on de
190
@code{nextlayerfactor}, que no tiene efecto alguno sobre @code{collectterms}.
191
La ventaja de @code{collectterms} es que devuelve una forma similar a la de
192
@code{facsum}, pero debido a que suma expresiones que ya han sido previamente
193
procesadas, no necesita repetir esta operaci@'on, lo cual
194
resulta ser especialmente @'util cuando las expresiones a sumar son muy
198
@c Adapted from functs.usg ----------------------
200
@c conjugate already described in doc/info/Matrices.texi
202
@subsection Paquete functs
204
@deffn {Funci@'on} rempart (@var{expr}, @var{n})
205
Elimina la parte @var{n} de la expresi@'on @var{expr}.
207
Si @var{n} es una lista de la forma @code{[@var{l}, @var{m}]}, entonces
208
las partes desde @var{l} a @var{m} ser@'an eliminadas.
210
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
213
@deffn {Funci@'on} wronskian ([@var{f_1}, ..., @var{f_n}], @var{x})
214
Devuelve la matriz wronskiana de las funciones @var{f_1}, ..., @var{f_n}
215
dependeientes de la variable @var{x}.
217
Los argumentos @var{f_1}, ..., @var{f_n} pueden ser nombres de funciones
218
definidas por el usuario, o expresiones de variable @var{x}.
220
El determinante de la matriz wronskiana es el determinante wronskiano del
221
conjunto de funciones. Las funciones ser@'an linealmente dependientes si
222
este determinante es nulo.
224
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
227
@c adjoint already described in doc/info/Matrices.texi
229
@deffn {Funci@'on} tracematrix (@var{M})
230
Devuelve la traza (suma de los elementos de la diagonal) de la matriz @var{M}.
232
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
235
@deffn {Funci@'on} rational (@var{z})
236
Multiplica el numerador y denominador de @var{z} por el complejo conjugado
237
del denominador, racionalizando as@'{@dotless{i}} el denominador.
238
Devuelve la expresi@'on can@'onica racional (canonical rational expression,
239
CRE) si el argumento @var{z} es de esta forma, en caso contrario devuelve una
240
expresi@'on en formato com@'un.
242
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
245
@deffn {Funci@'on} logand (@var{x},@var{y})
246
Devuelve el "y" l@'ogico binario de los argumentos @var{x} e @var{y}.
248
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
251
@deffn {Funci@'on} logor (@var{x},@var{y})
252
Devuelve el "o" l@'ogico binario de los argumentos @var{x} e @var{y}.
254
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
257
@deffn {Funci@'on} logxor (@var{x},@var{y})
258
Devuelve el "o-excusivo" l@'ogico binario de los argumentos @var{x} e @var{y}.
260
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
263
@c uprobe calls ?uprobe and assumes file is a list => obsolete, not common lisp
265
@c kronecker superseded by kron_delta in src/nset.lisp
267
@deffn {Funci@'on} nonzeroandfreeof (@var{x}, @var{expr})
268
Devuelve @code{true} si @var{expr} es diferente de cero y
269
@code{freeof (@var{x}, @var{expr})} devuelve @code{true}.
270
En caso contrario devuelve @code{false}.
272
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
275
@deffn {Funci@'on} linear (@var{expr}, @var{x})
276
Si @var{expr} es una expresi@'on lineal respecto de la variable @var{x},
277
@code{linear} devuelve @code{@var{a}*@var{x} + @var{b}}, siendo @var{a}
278
no nula y, junto con @var{b}, no incluye a @var{x}. En otro caso,
279
@code{linear} devuelve @var{expr}.
281
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
284
@deffn {Funci@'on} gcdivide (@var{p}, @var{q})
285
Si @code{takegcd} vale @code{true}, @code{gcdivide} divide los
286
polinomios @var{p} y @var{q} por su m@'aximo com@'un divisor y
287
devuelve el cociente de los resultados.
289
Si @code{takegcd} vale @code{false}, @code{gcdivide} devuelve
290
el cociente @code{@var{p}/@var{q}}.
292
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
295
@c lcm already described in doc/info/Number.texi
297
@deffn {Funci@'on} arithmetic (@var{a}, @var{d}, @var{n})
298
Devuelve el @var{n}-@'esimo t@'ermino de la progresi@'on aritm@'etica
299
@code{@var{a}, @var{a} + @var{d}, @var{a} + 2*@var{d}, ..., @var{a} + (@var{n} - 1)*@var{d}}.
301
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
304
@deffn {Funci@'on} geometric (@var{a}, @var{r}, @var{n})
305
Devuelve el @var{n}-@'esimo t@'ermino de la progresi@'on geom@'etrica
306
@code{@var{a}, @var{a}*@var{r}, @var{a}*@var{r}^2, ..., @var{a}*@var{r}^(@var{n} - 1)}.
308
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
311
@deffn {Funci@'on} harmonic (@var{a}, @var{b}, @var{c}, @var{n})
312
Devuelve el @var{n}-@'esimo t@'ermino de la progresi@'on arm@'onica
313
@code{@var{a}/@var{b}, @var{a}/(@var{b} + @var{c}), @var{a}/(@var{b} + 2*@var{c}), ..., @var{a}/(@var{b} + (@var{n} - 1)*@var{c})}.
315
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
318
@deffn {Funci@'on} arithsum (@var{a}, @var{d}, @var{n})
319
Devuelve la suma de la progresi@'on aritm@'etica desde hasta el @var{n}-@'esimo t@'ermino.
321
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
324
@deffn {Funci@'on} geosum (@var{a}, @var{r}, @var{n})
325
Devuelve la suma de la sucesi@'on geom@'etrica hasta el @var{n}-@'esimo t@'ermino.
326
Si @var{n} es infinito (@code{inf}) la suma ser@'a finita s@'olo si el valor absoluto de
327
@var{r} es menor que 1.
329
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
332
@deffn {Funci@'on} gaussprob (@var{x})
333
Devuelve la funci@'on de densidad de probabilidad,
334
normal @code{%e^(-@var{x}^2/2) / sqrt(2*%pi)}.
336
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
339
@deffn {Funci@'on} gd (@var{x})
340
Devuelve la funci@'on de Gudermann,
341
@code{2 * atan(%e^@var{x} - %pi/2)}.
343
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
346
@deffn {Funci@'on} agd (@var{x})
347
Devuelve la inversa de la funci@'on de Gudermann,
348
@code{log (tan (%pi/4 + x/2)))}.
350
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
353
@deffn {Funci@'on} vers (@var{x})
354
Devuelve @code{1 - cos (x)}.
356
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
359
@deffn {Funci@'on} covers (@var{x})
360
Devuelve @code{1 - sin (@var{x})}.
362
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
365
@deffn {Funci@'on} exsec (@var{x})
366
Devuelve @code{sec (@var{x}) - 1}.
368
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
371
@deffn {Funci@'on} hav (@var{x})
372
Devuelve @code{(1 - cos(x))/2}.
374
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
377
@c REDUNDANT WITH BINOMIAL COEFFICIENT; CUT IT ??
378
@deffn {Funci@'on} combination (@var{n}, @var{r})
379
Calcula el n@'umero de combinaciones de @var{n} objetos
380
tomados de @var{r} en @var{r}.
382
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
385
@c REDUNDANT WITH PERMUTATIONS FUNCTION IN NSET; CUT IT ??
386
@deffn {Funci@'on} permutation (@var{n}, @var{r})
387
Calcula el n@'umero de permutaciones de @var{r}, seleccionados
388
de un conjunto de @var{n}.
390
Para hacer uso de esta funci@'on ejecutar @code{load(functs)}.
393
@c Adapted from ineq.usg ----------------------
394
@c THIS PACKAGE IS INTERESTING BUT THIS TEXT NEEDS WORK AND EXAMPLES
395
@subsection Paquete ineq
396
El paquete @code{ineq} contiene reglas de simplificaci@'on para desigualdades
398
Una sesi@'on de ejemplo:
402
@c a>=4; /* a sample inequality */
403
@c (b>c)+%; /* add a second, strict inequality */
404
@c 7*(x<y); /* multiply by a positive number */
405
@c -2*(x>=3*z); /* multiply by a negative number */
406
@c (1+a^2)*(1/(1+a^2)<=1); /* Maxima knows that 1+a^2 > 0 */
407
@c assume(x>0)$ x*(2<3); /* assuming x>0 */
408
@c a>=b; /* another inequality */
409
@c 3+%; /* add something */
410
@c %-3; /* subtract it out */
411
@c a>=c-b; /* yet another inequality */
412
@c b+%; /* add b to both sides */
413
@c %-c; /* subtract c from both sides */
414
@c -%; /* multiply by -1 */
415
@c (z-1)^2>-2*z; /* determining truth of assertion */
416
@c expand(%)+2*z; /* expand this and add 2*z to both sides */
421
Warning: Putting rules on '+' or '*' is inefficient, and may not work.
422
Warning: Putting rules on '+' or '*' is inefficient, and may not work.
423
Warning: Putting rules on '+' or '*' is inefficient, and may not work.
424
Warning: Putting rules on '+' or '*' is inefficient, and may not work.
425
Warning: Putting rules on '+' or '*' is inefficient, and may not work.
426
Warning: Putting rules on '+' or '*' is inefficient, and may not work.
427
Warning: Putting rules on '+' or '*' is inefficient, and may not work.
428
Warning: Putting rules on '+' or '*' is inefficient, and may not work.
429
(%i2) a>=4; /* a sample inequality */
431
(%i3) (b>c)+%; /* add a second, strict inequality */
433
(%i4) 7*(x<y); /* multiply by a positive number */
435
(%i5) -2*(x>=3*z); /* multiply by a negative number */
437
(%i6) (1+a^2)*(1/(1+a^2)<=1); /* Maxima knows that 1+a^2 > 0 */
440
(%i7) assume(x>0)$ x*(2<3); /* assuming x>0 */
442
(%i8) a>=b; /* another inequality */
444
(%i9) 3+%; /* add something */
446
(%i10) %-3; /* subtract it out */
448
(%i11) a>=c-b; /* yet another inequality */
450
(%i12) b+%; /* add b to both sides */
452
(%i13) %-c; /* subtract c from both sides */
453
(%o13) - c + b + a >= 0
454
(%i14) -%; /* multiply by -1 */
455
(%o14) c - b - a <= 0
456
(%i15) (z-1)^2>-2*z; /* determining truth of assertion */
458
(%o15) (z - 1) > - 2 z
459
(%i16) expand(%)+2*z; /* expand this and add 2*z to both sides */
466
Debe tenerse cuidado con el uso de par@'entesis que incluyan desigualdades;
467
si se escribe @code{(A > B) + (C = 5)} el resultado es @code{A + C > B + 5},
468
pero @code{A > B + C = 5} es un error sint@'actico y @code{(A > B + C) = 5}
469
es una cosa completamente diferente.
471
Ejec@'utese @code{disprule (all)} para ver la lista completa de las
474
Maxima preguntar@'a al usuario cuando desconozca el signo de una cantidad que
475
multiplica a una desigualdad.
477
Los fallos m@'as comunes son:
485
Otro problema es el producto de una desigualdad por cero.
486
Si se escribe @code{x*@var{some_inequality}} y Maxima pregunta por
487
el signo de @code{x} y se responde que vale @code{zero} (o @code{z}),
488
el programa devuelve @code{x*@var{some_inequality}} sin hacer uso de la
489
informaci@'on de que @code{x} es 0. En tal caso se deber@'{@dotless{i}}a
490
escribir @code{ev (%, x: 0)}, ya que la base de datos s@'olo ser@'a utilizada
491
para fines comparativos y no para evaluar @code{x}.
493
El usuario puede apreciar que las respuestas son m@'as lentas al cargarse este paquete,
494
ya que el simplificador deber@'a examinar m@'as reglas que cuando no se hace uso del
495
paquete, por lo que puede ser conveniente borrar estas reglas cuando ya no se haga
496
uso de ellas. Ejec@'utese @code{kill (rules)} para eliminar todas las reglas
497
(incluidas las definidas por el usuario); tambi@'en es posible eliminar
498
parte de ellas o utilizar @code{remrule} sobre una reglas espec@'{@dotless{i}}fica.
500
N@'otese que si se carga este paquete despu@'es de haber definido otras reglas
501
de igual nombre,se borrar@'an las antiguas. Las reglas de este paquete son:
502
@code{*rule1}, ..., @code{*rule8},
503
@code{+rule1}, ..., @code{+rule18},
504
debi@'endose encerrar entre comillas el nombre de la reglas para referenciarse a ellas,
505
como en @code{remrule ("+", "+rule1")} para eliminar la primera regla sobre @code{"+"},
506
o @code{disprule ("*rule2")} para mostrar la definici@'on de la segunda regla
509
@c lrats.usg: "lratsubst" and "fullratsubst" already in doc/info/Polynomials.texi
511
@c Adapted from rducon.usg ----------------------
512
@c THIS IS AN INTERESTING FUNCTION BUT THIS TEXT NEEDS WORK AND EXAMPLES
513
@subsection Paquete rducon
515
@deffn {Funci@'on} reduce_consts (@var{expr})
516
Sustituye subexpresiones constantes de @var{expr} por @'atomos,
517
guardando la definici@'on de todos ellos en la lista de ecuaciones
518
@code{const_eqns} y devolviendo el expresi@'on @var{expr} ya
519
modificada. Se consideran partes constantes de @var{expr} aquellas
520
que devuelven @code{true} cuando se les aplica la funci@'on @code{constantp},
521
por lo que antes de llamar a @code{reduce_consts} se debe ejecutar
524
declare ([@var{objetos a los que se quiera dar la propiedad de ser constantes}], constant)$
527
para crear la base de datos de las cantidades constantes presentes en
530
Si se pretende generar c@'odigo Fortran despu@'es de estos c@'alculos
531
simb@'olicos, una de las primeras secciones del c@'odigo debe ser el
532
c@'alculo de las constantes. Para generar este segmento de c@'odigo hacer
535
map ('fortran, const_eqns)$
538
Junto a @code{const_eqns}, otras variables que afectan a @code{reduce_consts} son:
540
@code{const_prefix} (Valor por defecto: @code{xx}) es la cadena de caracteres utilizada como
541
prefijo para todos los s@'{@dotless{i}}mbolos generados por @code{reduce_consts} para
542
representar subexpresiones constantes.
544
@code{const_counter} (Valor por defecto: 1) es el @'{@dotless{i}}ndice entero utilizado
545
para generar los s@'{@dotless{i}}mbolos que representen a las subexpresiones
546
constantes encontradas por @code{reduce_consts}.
548
La instrucci@'on @code{load (rducon)} carga esta funci@'on y @code{demo (rducon)}
549
hace una demostraci@'on sobre su uso.
552
@c rncomb.usg: "rncombine" already in doc/info/Miscellaneous.texi
554
@c Adapted from scifac.usg ----------------------
555
@subsection Paquete scifac
557
@deffn {Funci@'on} gcfac (@var{expr})
558
Es una funci@'on de factorizaci@'on que intenta aplicar la misma heur@'{@dotless{i}}stica
559
que los humanos cuando tratan de hacer las expresiones m@'as simples, limit@'andose
560
a la factorizaci@'on de monomios. En caso de sumas, @code{gcfac} hace lo siguiente:
564
Factoriza los enteros.
566
Factoriza las potencias mayores de los t@'erminos que aparecen como
567
coeficientes, independientemente de su complejidad.
569
Utiliza (1) y (2) en la factorizaci@'on de pares de t@'erminos adyacentes.
571
Aplica estas t@'ecnicas repetida y recursivamente hasta que la
572
expresi@'on deje de sufrir cambios.
575
En general, el apartado (3) no hace una factorizaci@'on @'optima debido a la
576
naturaleza combinatoria y compleja de encontrar cu@'al de todas las ordenaciones
577
posibles de los pares da lugar a la expresi@'on m@'as compacta.
579
La instrucci@'on @code{load (scifac)} carga esta funci@'on y @code{demo (scifac)}
580
hace una demostraci@'on sobre su uso.
583
@c Adapted from sqdnst.usg ----------------------
584
@c THIS FUNCTION IS INTERESTING BUT THIS TEXT NEEDS WORK. HOW DEEPLY CAN SQRT BE NESTED ??
585
@subsection Paquete sqdnst
587
@deffn {Funci@'on} sqrtdenest (@var{expr})
588
Reduce expresiones en las que se encuentren ra@'{@dotless{i}}ces cuadradas anidadas,
589
siempre que sea posible
595
@c sqrt(sqrt(3)/2+1)/sqrt(11*sqrt(2)-12);
600
(%i2) sqrt(sqrt(3)/2+1)/sqrt(11*sqrt(2)-12);
604
(%o2) ---------------------
605
sqrt(11 sqrt(2) - 12)
615
A veces conviene aplicar @code{sqrtdenest} m@'as de una vez, como en el caso
616
@code{(19601-13860 sqrt(2))^(7/4)}.
618
La sentencia @code{load (sqdnst)} carga esta funci@'on.
621
@c stopex.usg: "expandwrt", "expandwrt_denom", and "expandwrt_factored" already in doc/info/Simplification.texi