| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
| 7.1 Funciones y variables para simplificación |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Cuando se invoca a asksign, la expresión que se va a analizar es precisamente askexp.
La llamada askinteger (expr, integer) intenta determinar a partir de la base de datos de assume si expr es un entero. La función askinteger pide más información al usuario si no encuentra la respuesta,
tratando de almacenar la nueva información en la base de datos si es posible. La llamada
askinteger (expr) equivale a askinteger (expr, integer).
La llamadas askinteger (expr, even) ay askinteger (expr, odd) intentan determinar si expr es un entero par o impar, respectivamente.
Primero intenta determinar si la expresión especificada es positiva, negativa o cero. Si no lo consigue, planteará al usuario preguntas que le ayuden a conpletar la deducción. Las respuestas del usuario son almacenadas en la base de datos durante el tiempo que dure este cálculo. El valor que al final devuelva asksign será pos, neg o zero.
La función demoivre (expr) convierte una expresión sin modificar la variable global demoivre.
Cuando demoivre vale true, los exponenciales complejos se convierten en expresiones equivalentes pero en términos de las funciones trigonométricas:
exp (a + b*%i) se reduce a %e^a * (cos(b) + %i*sin(b))
si b no contiene a %i. Las expresiones a y b no se expanden.
El valor por defecto de demoivre es false.
La función exponentialize convierte funciones trigonométricas e hiperbólicas a la forma exponencial, por lo que demoivre y exponentialize no pueden valer true al mismo tiempo.
Valor por defecto: true
distribute_over controla la distribución de funciones sobre
estructuras como listas, matrices y ecuaciones. Actualmente, no todas
las funciones de Maxima tienen esta propiedad. Es posible consultar si
una función tiene esta propiedad con la instrucción properties.
La propiedad distributiva se desactiva asignándole a distribute_over
el valor false.
Ejemplos:
La función sin se distribuye sobre una lista:
(%i1) sin([x,1,1.0]); (%o1) [sin(x), sin(1), .8414709848078965]
mod es una función de dos argumentos que se distribuye sobre listas.
La distribución sobre listas anidadas también es posible.
(%i2) mod([x,11,2*a],10); (%o2) [mod(x, 10), 1, 2 mod(a, 5)] (%i3) mod([[x,y,z],11,2*a],10); (%o3) [[mod(x, 10), mod(y, 10), mod(z, 10)], 1, 2 mod(a, 5)]
Distribución de la función floor sobre una matriz y una
ecuación.
(%i4) floor(matrix([a,b],[c,d]));
[ floor(a) floor(b) ]
(%o4) [ ]
[ floor(c) floor(d) ]
(%i5) floor(a=b);
(%o5) floor(a) = floor(b)
Funciones con más de un argumento se distribuyen sobre cualquiera de sus argumentos, o sobre todos ellos.
(%i6) expintegral_e([1,2],[x,y]);
(%o6) [[expintegral_e(1, x), expintegral_e(1, y)],
[expintegral_e(2, x), expintegral_e(2, y)]]
Comprueba si una función tiene la propiedad distribute_over:
(%i7) properties(abs); (%o7) [integral, distributes over bags, noun, rule, gradef]
Valor por defecto: real
Si domain vale complex, sqrt (x^2) permanecerá como
sqrt (x^2) en lugar de devolver abs(x).
Expande la expresión expr. Los productos de sumas y de sumas con exponentes se multiplican, los numeradores de las expresiones racionales que son sumas se separan en sus respectivos términos, y las multiplicaciones (tanto las que son conmutativas como las que no) se distribuyen sobre las sumas en todos los niveles de expr.
En el caso de los polinomios es más aconsejable utilizar ratexpand, que utiliza un algoritmo más eficiente.
Las variables maxnegex y maxposex controlan los máximos exponentes negativos y positivos que se van a expandir.
La llamada expand (expr, p, n) expande expr asignando a maxposex el valor p y a maxnegex el n. Esto es útil para expandir sólo parte de la expresión.
La variable expon guarda el mayor exponente negativo que será expandido automáticamente, independientemente de expand. Por ejemplo, si expon vale 4 entonces (x+1)^(-5) no se expandirá automáticamente.
La variable expop guarda el mayor exponente positivo que será expandido automáticamente. Así, (x+1)^3 se expandirá automáticamente sólo si expop es mayor o igual que 3. Si se quiere expandir (x+1)^n, siendo n mayor que expop, entonces expand ((x+1)^n) se desarrollará sólo si maxposex no es menor que n.
expand(expr, 0, 0) provoca que se vuelva a simplificar expr.
expr no se vuelve a evaluar. A diferencia de ev(expr, noeval),
se elimina la representación canónica de la expresión.
Véase también ev.
La variable expand utilizada con ev provocará una expansión.
El fichero `simplification/facexp.mac'
contiene algunas funciones relacionadas con expand (en concreto, facsum, factorfacsum
y collectterms, que se cargan automáticamente) y variables (nextlayerfactor
y facsum_combine) que permiten al usuario estructurar las expresiones controlando la expansión.
En `simplification/facexp.usg' se pueden encontrar breves descripciones de estas funciones.
Se accederá a una demostración con la instrucción demo("facexp").
Ejemplo:
(%i1) expr:(x+1)^2*(y+1)^3;
2 3
(%o1) (x + 1) (y + 1)
(%i2) expand(expr);
2 3 3 3 2 2 2 2 2
(%o2) x y + 2 x y + y + 3 x y + 6 x y + 3 y + 3 x y
2
+ 6 x y + 3 y + x + 2 x + 1
(%i3) expand(expr,2);
2 3 3 3
(%o3) x (y + 1) + 2 x (y + 1) + (y + 1)
(%i4) expr:(x+1)^-2*(y+1)^3;
3
(y + 1)
(%o4) --------
2
(x + 1)
(%i5) expand(expr);
3 2
y 3 y 3 y 1
(%o5) ------------ + ------------ + ------------ + ------------
2 2 2 2
x + 2 x + 1 x + 2 x + 1 x + 2 x + 1 x + 2 x + 1
(%i6) expand(expr,2,2);
3
(y + 1)
(%o6) ------------
2
x + 2 x + 1
Vuelve a simplificar una expresión pero sin expansión:
(%i7) expr:(1+x)^2*sin(x);
2
(%o7) (x + 1) sin(x)
(%i8) exponentialize:true;
(%o8) true
(%i9) expand(expr,0,0);
2 %i x - %i x
%i (x + 1) (%e - %e )
(%o9) - -------------------------------
2
Expande la expresión expr con respecto a las variables x_1, ..., x_n.
Todos los productos que contengan a las variables aparecen explícitamente. El resultado que se obtenga no tendr'a productos de sumas de expresiones que contengan a las variables. Los argumentos x_1, ..., x_n
pueden ser variables, operadores o expresiones.
Por defecto, no se expanden los denominadores, pero esto puede cambiarse mediante el uso de la variable expandwrt_denom.
Esta función se carga automáticamente de `simplification/stopex.mac'.
Valor por defecto: false
La variable expandwrt_denom controla el tratamiento de las expresiones racinales por parte de expandwrt. Si vale true, se expandirán tanto el numerador como el denominador de la expresión respecto de los argumentos de expandwrt, pero si expandwrt_denom vale false, sólo se expandirá el numerador.
Es similar a expandwrt, pero trata a las expresiones que son productos de una forma algo diferente. La función
expandwrt_factored expande sólo aquellos factores de expr que contienen a las variables x_1, ..., x_n.
Esta función se carga automáticamente de `simplification/stopex.mac'.
Valor por defecto: 0
La variable expon guarda el mayor exponente negativo que será expandido automáticamente, independientemente de expand. Por ejemplo, si expon vale 4 entonces (x+1)^(-5) no se expandirá automáticamente.
La función exponentialize (expr) convierte las funciones trigonométricas e hiperbólicas de expr a exponenciales, sin alterar la variable global exponentialize.
Cuando la variable exponentialize vale true, todas las funciones trigonométricas e hiperbólicas se convierten a forma exponencial. El valor por defecto es false.
La función demoivre convierte funciones trigonométricas e hiperbólicas a la forma exponencial, por lo que demoivre y exponentialize no pueden valer true al mismo tiempo.
Valor por defecto: 0
La variable expop guarda el mayor exponente positivo que será expandido automáticamente. Así, (x+1)^3 se expandirá automáticamente sólo si expop es mayor o igual que 3. Si se quiere expandir (x+1)^n, siendo n mayor que expop, entonces expand ((x+1)^n) se desarrollará sólo si maxposex no es menor que n.
Valor por defecto: -1
La variable factlim especifica el mayor factorial que será expandido automáticamente. Si su valor es -1, entonces se expandirán todos los enteros.
Mueve los factores multiplicativos que están fuera de un sumatorio hacia dentro de éste. Si el índice aparece en la expresión exterior, entonce intosum busca un índice razonable, lo mismo que hace con sumcontract. Se trata de la operación contraria a extraer factores comunes de los sumatorios.
En algunos caos puede ser necesario hacer scanmap (multthru, expr) antes que intosum.
La instrucción declare (g, lassociative) le indica al simplificador de Maxima que g es asociativo por la izquierda. Por ejemplo, g (g (a, b), g (c, d))se reduce a g (g (g (a, b), c), d).
Es una de las propiedades de operadores de Maxima. Si la función univariante f se declara lineal, la expansión de f(x + y) produce f(x) + f(y), f(a*x) produce a*f(x) si a es una constante. Si la función tiene dos o más argumentos, la linealidad se interpreta como la de sum o integrate, esto es, f (a*x + b, x) produce a*f(x,x) + b*f(1,x) si a y b no contienen a x.
linear equivale a additive y outative.
Véase también opproperties.
Se pueden declarar variables de tipo mainvar. El orden de los átomos
es: números < constantes (como %e o %pi) <
escalares < otras variables < "mainvars". Por ejemplo, compárese expand ((X+Y)^4)
con (declare (x, mainvar), expand ((x+y)^4)). (Nota: Se debe tener cuidado si se quiere hacer uso de esta declaración. Por ejemplo, si se resta una expresión en la que x ha sido declarada como mainvar de otra en la que x no es mainvar, puede ser necesario volver a simplificar, ev (expr, simp), a fin de obtener cancelaciones. Además, si se guarda una expresión en la que x es mainvar, quizás sea necesario guardar también x.)
Valor por defecto: 10000
La variable maxapplydepth es la máxima profundidad a la que van a introducirse apply1 y apply2.
Valor por defecto: 10000
La variable maxapplyheight es la m2'axima altura a la que escalará applyb1 antes de detenerse.
Valor por defecto: 1000
La variable maxnegex es el mayor exponente negativo que expandirá la función expand. Véase también maxposex.
Valor por defecto: 1000
La variable maxposex es el mayor exponenteque expandirá la función expand. Véase también maxnegex.
La instrucción declare (f, multiplicative) indica al simplificador de Maxima que f is multiplicativa.
f es univariante, cada vez que el simplificador encuentre a f aplicad a un producto, f se distribuirá sobre ese producto. Por ejemplo, f(x*y) se reduciría a f(x)*f(y).
f es una función de 2 o más argumentos, la multiplicabilidad se define como multiplicabilidad para el primer argumento de f, de modo que f (g(x) * h(x), x) se reduciría a f (g(x) ,x) * f (h(x), x).
Esta transformación no se realiza cuando f se aplica a expresiones de la forma product (x[i], i, m, n).
Valor por defecto: true
Si negdistrib vale true, -1 se distribuye sobre una expresión. Por ejemplo, -(x + y) se transforma en - y - x. Dándole el valor false se mostrará - (x + y) tal cual. Esto puede ser útil, pero también peligroso; al igual que el indicador simp, no conviene asignarle el valor false.
Valor por defecto: true
Si negsumdispflag vale true, x - y se muestra como x - y
en lugar de - y + x. Dándole el valor false se realiza un análisis adicional para que no se representen de forma muy diferente dos expresiones similares. Una aplicación puede ser para que a + %i*b y a - %i*b se representen ambas de la misma manera.
El símbolo noeval evita la fase de evaluación de ev. Es útil conjuntamente con otras variables globales y para poder volver a simplificar expresiones sin tener que evaluarlas otra vez.
El símbolo noun es una de las opciones de la instrucción declare. Hace que una función se declare como "nombre", lo que significa que no se evaluará automáticamente.
Valor por defecto: false
Si noundisp vale true, los nombres se muestran precedidos de un apóstrofo. Siempre debe valer true cuando se quiera representar la definición de funciones.
El símbolo nouns es una evflag, lo que significa que cuando se utilice como una opción de la instrucción ev, todas las formas nominales que aparezcan en una expresión las convierte en verbales, esto es, las evalúa. Véanse también noun, nounify, verb y verbify.
La variable numer hace algunas funciones matemáticas
con argumentos numéricos se evalúen como decimales de punto flotante.
También hace que las variables de una expresión a las cuales se les ha
asignado un número sean sustituidas por sus valores.
Además, activa la variable float.
Véase también %enumer.
Ejemplos:
(%i1) [sqrt(2), sin(1), 1/(1+sqrt(3))];
1
(%o1) [sqrt(2), sin(1), -----------]
sqrt(3) + 1
(%i2) [sqrt(2), sin(1), 1/(1+sqrt(3))],numer;
(%o2) [1.414213562373095, .8414709848078965, .3660254037844387]
Declara las variables x_1, ..., x_n asignándoles los valores numéricos expr_1, ..., expr_n.
El valor numérico se evalúa y sustituye a la variable en cualquier expresión en la que ésta aparezca si numer toma el valor true. Véase también ev.
Las expresiones expr_1, ..., expr_n pueden ser expresiones no necesariamente numéricas.
La variable opproperties es la lista con las propiedades especiales de los operadores reconocidas por el simplificador de Maxima:
linear, additive, multiplicative, outative, evenfun,
oddfun, commutative, symmetric, antisymmetric, nary,
lassociative, rassociative.
Valor por defecto: true
Si opsubst vale false, subst no sustituye el operdor de una expresión, de manera que (opsubst: false, subst (x^2, r, r+r[0])) trabajará correctamente.
La instrucción declare (f, outative) le indica al simplificador de Maxima que los factores constantes del argumento de la función f pueden ser extraídos.
f es univariante, cada vez que el simplificador se encuentra con f aplicada a un producto, éste será particionado en factores que son constantes y factores que no lo son, siendo entonces los constantes extraídos de la función. Por ejemplo, f(a*x) se reducirá a a*f(x) siendo a una constante. Las constantes no atómicas no serán extraídas.
f es una función de 2 o más argumentos, esta propiedad se define como en sum o integrate, esto es, f (a*g(x), x) se reducirá a a * f(g(x), x) si a no contiene a x.
Las funciones sum, integrate y limit han sido todas declaradas con la propiedad outative.
La instrucción declare (f, posfun) declara a f como
función positiva, de forma que
is (f(x) > 0) devolverá true.
Cuando se utiliza como argumento en una llamada a
ev (expr), pred provoca que los
predicados (expresiones que se reducen a true o
false) se evalúen.
Véase ev.
Ejemplo:
(%i1) 1<2; (%o1) 1 < 2 (%i2) 1<2,pred; (%o2) true
Simplifica la expresión expr, que puede contener logaritmos, exponenciales y
radicales, convirtiéndola a una forma canónica, lo que significa que todas las expresiones funcionalmente equivalentes
se reducen a una forma única. Ciertas expresiones, sin embargo, son reducidas por radcan a una forma regular, lo que significa que dos expresiones equivalentes no tienen necesariamente el mismo aspecto, pero su diferencia puede ser reducida por radcan a cero.
Con algunas expresiones radcan puede consunir mucho tiempo. Este es el coste por explorar ciertas relaciones entre las componentes de la expresión para simplificaciones basadas en factorizaciones y expansiones parciales de fracciones de exponentes.
Ejemplos:
(%i1) radcan((log(x+x^2)-log(x))^a/log(1+x)^(a/2));
a/2
(%o1) log(x + 1)
(%i2) radcan((log(1+2*a^x+a^(2*x))/log(1+a^x)));
(%o2) 2
(%i3) radcan((%e^x-1)/(1+%e^(x/2)));
x/2
(%o3) %e - 1
Valor por defecto: true
La variable radexpand controla algunas simplificaciones de radicales.
Si radexpand vale all, las raíces n-ésimas de los factores de un producto que sean potencias de n se extraen del símbolo radical. Por ejemplo, si radexpand vale all, sqrt (16*x^2) se reduce a 4*x.
Más concretamente, considérese sqrt (x^2).
radexpand vale all o se ha ejecutado assume (x > 0),
sqrt(x^2) se reduce a x.
radexpand vale true y domain es real (su valor por defecto),
sqrt(x^2) se reduce a abs(x).
radexpand vale false o radexpand vale true y domain es complex,
sqrt(x^2) no se simplifica.
Nótese que domain sólo se tiene en cuenta si radexpand vale true.
Valor por defecto: false
Si radsubstflag vale true se permite a ratsubst hacer la sustitución u por sqrt (x) in x.
La instrucción declare (g, rassociative) le indica al simplificador de Maxima que g es asociativa por la derecha. Por ejemplo, g(g(a, b), g(c, d)) se reduce a g(a, g(b, g(c, d))).
Es el "Sequential Comparative Simplification" (método debido a Stoute).
La función scsimp intenta simplificar expr de acuerdo con las reglas rule_1, ..., rule_n.
Si se obtiene una expresión más pequeña, el proceso se repite. En caso contrario, después de que se hayan intentado todas las simplificaciones, devuelve la respuesta original.
La instrucción example (scsimp) muestra algunos ejemplos.
Valor por defecto: true
La variable simp activa y desactiva la simplificación.
La simplificación está activada por defecto. La variable simp
también es reconocida por la función ev como variable de entorno.
Véase también ev.
Cuando simp se utiliza en un entorno ev con el valor false,
la simplificación se evita sólo durante la fase de evaluación de una
expresión. La variable no evita la simplificación que sigue a la fase de
evaluación.
Ejemplos:
La simplificación se suspende globalmente. La expresión sin(1.0)
no se simplifica a su valor numérico. La variable de entorno simp
conmuta el estado de la simplificación.
(%i1) simp:false; (%o1) false (%i2) sin(1.0); (%o2) sin(1.0) (%i3) sin(1.0),simp; (%o3) .8414709848078965
La simplificación se vuelve a activar. La variable de entorno simp
no puede suprimir totalmente la simplificación. El resultado muestra una
expresión simplificada, pero la variable x guarda como valor una
expresión sin simplificar, porque la asignación se realizó durante
la fase de evaluación de la expresión.
(%i4) simp:true; (%o4) true (%i5) x:sin(1.0),simp:false; (%o5) .8414709848078965 (%i6) :lisp $X ((%SIN) 1.0)
Valor por defecto: false
Si simpsum vale true, se simplifica el resultado de un sumatorio sum. Esta simplificación podrá producir en ocasiones una expresión compacta. Si simpsum vale false o si se utiliza la forma apostrofada 'sum, el valor es una forma nominal que representa la notación sigma habitual en matemáticas.
Combina todos los sumatorios de una suma cuyos límites inferiores y superiores difieren por constantes. El resultado es una expresión que contiene un sumatorio para conjunto de tales sumatorios. La función sumcontract combina todos los sumatorios compatibles y utiliza uno de los índices de uno de los sumatorios si puede, si no formará un índice que sea razonable.
Puede ser necesario hacer intosum (expr) antes que sumcontract.
Valor por defecto: false
Si sumexpand vale true, productos de sumatorios y de sumatorios con exponentes se reducen a sumatorios anidados.
Véase también cauchysum.
Ejemplos:
(%i1) sumexpand: true$
(%i2) sum (f (i), i, 0, m) * sum (g (j), j, 0, n);
m n
==== ====
\ \
(%o2) > > f(i1) g(i2)
/ /
==== ====
i1 = 0 i2 = 0
(%i3) sum (f (i), i, 0, m)^2;
m m
==== ====
\ \
(%o3) > > f(i3) f(i4)
/ /
==== ====
i3 = 0 i4 = 0
Valor por defecto: true
Si sumsplitfact vale false,
minfactorial se aplica después de factcomb.
La instrucción declare (h, symmetric) le indica al simplificador de Maxima que h es una función simétrica. Por ejemplo, h (x, z, y) se reduce a h (x, y, z).
El nombre commutative es sinónimo de symmetric.
Devuelve true si y sólo si expr contiene un operador o función no reconocido por el simplificador de Maxima.
| [ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Robert Dodier on enero, 16 2011 using texi2html 1.76.