Introducci´on a Maxima
1 M. Victoria Redondo Neble J. Rafael Rodr´ıguez Galv´an3 de junio de 2005
1Copyright c° 2005, M. Victoria Redondo Neble, J. Rafael Rodr´ıguez Galv´an, Universidad de C´adiz. Este documento es libre. Se otorga permiso para copiarlo, distribuirlo y/o modificarlo bajo los t´erminos de la Licencia de Documentaci´on Libre GNU, versi´on 1.2 o cualquier otra versi´on posterior publicada por la Fundaci´on de Software Libre, http://es.gnu.org/Licencias/fdles.html
´Indice general
1. Una panorm´amica de Maxima 3
1.1. Arrancando Maxima . . . 4
1.2. Usando Maxima como una calculadora . . . 5
1.3. ´Algebra . . . 8
1.4. C´alculo diferencial e integral . . . 11
1.5. Gr´aficas de funciones . . . 14
1.6. ´Algebra Matricial . . . 17
2. Ejemplo: estudio de una funci´on 20 2.1. Dominio, puntos de corte, as´ıntotas . . . 21
2.2. Continuidad, derivabilidad . . . 24
2.3. Crecimiento, extremos relativos . . . 25
Cap´ıtulo 1
Una panorm´
amica de
Maxima es un programa de ordenador orientado a la manipulaci´on de expresiones algebraicas, que pueden incluir constantes, variables y funcio-nes. Entre estas manipulaciones se encuentran simplificaci´on, factorizaci´on, derivaci´on, integraci´on, etc.
Derivado de la implementaci´on original del conocido programa Macsyma del MIT, une a sus caracter´ısticas t´ecnicas las ventajas que representa su licencia libre1, contando con una din´amica comunidad de desarrollo e
inte-ractuando en simbiosis con otros programas libres como gnuplot, texmacs, emacs, wims, etc. Maxima est´a disponible para distintas plataformas, tales como GNU/Linux, MS Windows, etc.
El objetivo del presente documento, dista mucho de ser confeccionar una guia met´odica o exhaustiva, sino ofrecer una primera panor´amica global so-bre el funcionamiento del programa, mostrando alguna de sus caracter´ısticas m´as usadas desde el punto de vista de la aplicaci´on pr´actica.
1.1.
Arrancando Maxima
Maxima en s´ı, por defecto, posee un aspecto bastante espartano, en modo terminal. No obstante, aquellas personas que prefieran una mayor integra-ci´on en un entorno de ventanas, podr´an elegir entre numerosos programas (todos ellos con licencia libre) que constituyen interfaces que facilitan su uso. Por lo tanto, antes de utilizarlo, puede ser conveniente el investigar cu´ales de estas interfaces est´an instaladas en nuestro ordenador (o cuales ellas pueden ser instaladas con facilidad). Algunas de estas interfaces disponibles2para
Maxima son:
Modo terminal. Se arranca tecleando “maxima” desde la l´ınea de comandos del sistema operativo. Ideal para personas que buscan un acceso r´apido al programa y sacarle todo su jugo. Este modo tiene ven-tajas como el completado de sintaxis pulsando la tecla TAB, hist´orico de comandos, etc.
Interfaces gr´aficas:
• texmacs: es un procesador de textos gr´afico capaz de exportar ficheros en LATEX y ejecutar Maxima (adem´as de otros sistemas
computacionales, como Axiom, Octave, etc.) en una sesi´on que es insertada dentro el editor. El uso de texmacs ofrece ventajas,
1Maxima se distribuye bajo GNU Public License (GPL)
como la posibilidad de facilitar la entrada de expresiones ma-tem´aticas o de formatear autom´aticamente (usando LATEX) los
resultados para facilitar su lectura.
• wxmaxima: una interfaz gr´afica que posee entradas de men´us y de di´alogo espec´ıficas para, utilizar Maxima a golpe de rat´on, sin tener que recordar la sintaxis de sus comandos, e introdu-cir c´omodamente todo tipo de expresiones, como matrices, series num´ericas, etc.
• emacs: dentro de este editor de textos, tremendamente configu-rable, se puede ejecutar desde un entorno Maxima en modo texto (que se arranca tecleando “M-x run-maxima”) hasta un modo es-pecial para ayudar la creaci´on de ficheros en los que se utilice Maxima como lenguaje de programaci´on (“M-x maxima-mode”), pasando por el modo “emaxima”, que facilita la creaci´on de do-cumentos LATEX usando el cual se han escrito estas l´ıneas.
• xmaxima: una de las interfaces para Maxima m´as veteranas, sigue constituyendo una opci´on adecuada para quien desee un acceso gr´afico a Maxima .
1.2.
Usando Maxima como una calculadora
Maxima se puede usar como una calculadora para operaciones b´asicas, potencias, ra´ıces, etc. El sistema presenta una etiqueta de la forma “( %in)”, con n∈ N, espera que el usuario teclee un comando y produce un resultado, con una etiqueta “( %on)”. Como fin de l´ınea se usa “;” o bien3 “$”.
Maxima opera con aritm´etica racional, aunque usando “,numer” se pue-den obtener expresiones num´ericas4.
( %i1) 27*31; ( %o1) 837 ( %i2) 2-5/3; ( %o2) 1 3
3y en este caso no se presenta el resultado, como se puede observar en en ejemplos
posteriores.
( %i3) 2-5/3,numer; ( %o3) 0,33333333333333326 ( %i4) 2^10; ( %o4) 1024 ( %i5) sqrt(8); ( %o5) 2√2 ( %i6) %,numer; ( %o6) 2,8284271247461903 ( %i7) quit();
Como se ve, Maxima es pragm´atico al tratar may´usculas/min´usculas: so-lamente se tienen en cuenta para las expresiones definidas por el usuario (por ejemplo, una variable “a” es distinta de otra “A”), no para las expresiones reservadas por el sistema, como “sqrt” ´o “ %pi”. Existen numerosas funcio-nes y variables num´ericas predefinidas: “sqrt”, “log”, “sin”, “cos”, “ %e”, “ %pi”, “ %i”,... Se puede pedir ayuda sobre estos u otros temas usando el operador “?”, por ejemplo, “? log;”
Una calculadora cient´ıfica
El operador “:” se utiliza para asignaciones de expresiones o variables (el signo “=” no se utiliza para asignaci´on, sino para ecuaciones). La funci´on “kill” se utiliza para eliminar una asignaci´on previa (o todas ellas, usando “kill(all)”).
La etiqueta “ %” referencia a la ´ultima salida. Se pueden usan la etiquetas “ %in” o “ %on” para referenciar a la entrada o a la salida n-´esima.
( %i60) a:3$ ( %i61) %e^a;
( %o61)
e3
( %i62) log(%); ( %o62)
3
( %i63) sin( a * %pi ); ( %o63) 0 ( %i64) % + %o2; ( %o64) 2 ( %i65) kill(a); ( %o65) DONE
Utilizando la funci´on “bfloat”, se puede convertir una expresi´on a un va-lor decimal de con precisi´on arbitraria, controlada por la variable “fpprec” (cuyo nombre proviene de floating point precission), que por defecto es igual a 16. ( %i50) x:%pi$ ( %i51) bfloat(x); 3.141592653589793B0 ( %i52) fpprec:50; ( %o52) 50 ( %i53) bfloat(x); 3.1415926535897932384626433832795028841971693993751B0
1.3.
Algebra
´
Manipulaci´on de expresiones algebraicas
Existe un gran n´umero de funciones relacionadas con la manipulaci´on de ecuaciones y expresiones algebraicas, algunas de las cuales se muestran en el siguiente ejemplo: “expand” (desarrolla expresiones en varios t´ermi-nos), “ratsimp” (agrupa en fracciones con denominador com´un), “factor” (factoriza expresiones).
En cualquier entrada de Maxima , se puede sustituir una expresi´on, “e1” por otra, “e2”, a˜nadiendo un argumento5 del tipo “e1=e2”, como se puede
ver la entrada “( %i3)” del siguiente ejemplo:
( %i1) (x+y)^3; ( %o1) (y + x)3 ( %i2) expand(%); ( %o2) y3+ 3xy2+ 3x2y + x3 ( %i3) %,x=1/y; ( %o3) y3+ 3y +3 y + 1 y3 ( %i4) ratsimp(%); ( %o4) y6+ 3y4+ 3y2+ 1 y3 ( %i5) factor(%); ( %o5) ¡ y2+ 1¢3 y3
Las expresiones trigonom´etricas tienen, adem´as, funciones propias: “trigexpand” (aplica las propiedades trigonom´etricas de suma de ´angulos para que los
ar-gumentos contenidos en las funciones sean lo m´as simple posibles) y “trigreduce” (aplica las propiedades en sentido contrario, de modo que no haya t´erminos que contengan productos funciones seno o coseno).
( %i6) cos(x)^2*sin(x+y); ( %o6) cos2x sin (y + x) ( %i7) expand(%); ( %o7) cos2x sin (y + x) ( %i8) trigexpand(%); ( %o8)
cos2x (cos x sin y + sin x cos y)
( %i9) trigreduce(%); ( %o9) sin (y + 3x) + sin (y − x) 4 + sin (y + x) 2
Ecuaciones y sistemas de ecuaciones
En Maxima , el signo “=” se utiliza para definir ecuaciones. Los siste-mas de ecuaciones se definen como listas de ecuaciones (entre corchetes). La funci´on “solve(e,i)” devuelve una lista formada por las soluciones de la ecuaci´on (o sistema de ecuaciones) “e” para la inc´ognita (o lista de inc´ogni-tas) “i”. ( %i1) x^2+x-3=0$ ( %i2) solve(%,x); ( %o2) " x = − √ 13 + 1 2 , x = √ 13 − 1 2 # ( %i3) x^3-x^2+x-1$
( %i4) solve(%,x); ( %o4)
[x = −i, x = i, x = 1]
( %i5) eq1: x-2*y-z = 1 $ ( %i6) eq2: x-y = 1 $ ( %i7) eq3: 2*x+y-3*z = 4 $
( %i8) /* Un sistema compatible determinado: */ solve([eq1,eq2,eq3],[x,y,z]); ( %o8) ·· x =4 3, y = 1 3, z = − 1 3 ¸¸
( %i9) /* Un sistema compatible indeterminado: */ eq4:eq1+eq2;
( %o9)
−z − 3y + 2x = 2
( %i10) solve([eq1,eq2,eq4],[x,y,z]); Dependent equations eliminated: (3) ( %o10)
[[x = 1 − %R1, y = − %R1, z = %R1]]
( %i11) /* Un sistema incompatible: */ solve([eq1,eq2,eq3,x+y+z = 1],[x,y,z]); Inconsistent equations: (3)
-- an error. Quitting. To debug this try DEBUGMODE(TRUE); ( %i12) /* Un sistema no lineal */
solve([%o1, x^3-x^2=1-x-y],[x,y]); ( %o12) "" x = − √ 13 + 1 2 , y = 3 √ 13 + 10 # , " x = √ 13 − 1 2 , y = 10 − 3 √ 13 ##
En las l´ıneas anteriores se muestra c´omo se pueden introducir comenta-rios, de la forma “/* (...) */”. Adem´as, los par´ametros que aparecen en la soluci´on de sistemas indeterminados se denotan de la forma “ %Rn”, con n ∈ N.
1.4.
C´
alculo diferencial e integral
Como se muestra en esta secci´on, Maxima puede calcular l´ımites, deri-vadas, integrales, desarrollar en series de Taylor...
Sucesiones, funciones y l´ımite
El t´ermino general de una sucesi´on se define de la forma “a[n]:=(...)”. Para el c´alculo de l´ımites se utiliza la funci´on “limit”, junto con los s´ımbolos especiales “inf” (+∞) y “minf” (−∞), como veremos:
( %i1) a[n]:=(-1)^n/n; ( %o1) an:=(−1) n n ( %i2) b[n]:=2*n-1; ( %o2) bn:= 2n − 1 ( %i3) limit(a[n],n,inf); ( %o3) 0 ( %i4) limit(b[n]/log(n),n,inf); ( %o4) ∞ ( %i5) limit(a[n]*b[n],n,inf); ( %o5) IND
Para definir las funciones se utiliza tambi´en el operador “:=”, pero en este caso las variables independientes se incluyen entre par´entesis6.
( %i6) f(x):=x/(1-%e^(x^2)); ( %o6) f (x) := x 1 − ex2 ( %i7) limit(f(x),x,minf); ( %o7) 0 ( %i8) limit(f(x),x,0); ( %o8) UND ( %i9) limit(f(x),x,0,plus); ( %o9) −∞ ( %i10) limit(f(x),x,0,minus); ( %o10) ∞ ( %i11) g(x,y):=x^2+y^2; ( %o11) g (x, y) := x2+ y2 ( %i12) solve(g(x,y)=1,[x,y]); ( %o12) ·· x = %R1, y = q 1 − %R12 ¸ , · x = %R2, y = − q 1 − %R22 ¸¸
6Para definir funciones complejas, se pueden utilizar construcciones de tipo “subrutina”
o bloque de c´odigo de la forma “BLOCK ([v1,...,vk], statement1, ... ,statementj)”, siendo las vi declaraciones de variables locales al bloque
Derivadas e integrales
Para calcular derivadas se utiliza la funci´on “diff”, que toma como argu-mentos la funci´on a derivar, la variable con respecto a la cual hacerlo y, opcio-nalmente, el orden de derivaci´on. Para calcular integrales, se usa la funci´on “integrate” (cuyos argumentos son similares) y para desarrollos de Taylor, “taylor”, que toma como argumentos la funci´on, la variable, el centro y el orden.
( %i628) kill(f,g); ( %o628)
DONE
( %i629) f(x):=x^a * %e^(c*x) * cos(c*x); ( %o629)
f (x) := xaecxcos (cx)
( %i630) diff(f(x),x); ( %o630)
−cxaecxsin (cx) + cxaecxcos (cx) + axa−1ecxcos (cx)
( %i631) diff(f(x),x,2), a=0,b=1 /* Segunda derivada */ ; ( %o631) −2c2ecxsin (cx) ( %i632) g(x,y):=a*x*y/(x^2+y^2+1); ( %o632) g (x, y) := axy x2+ y2+ 1 ( %i633) diff(g(x,y),x); ( %o633) ay y2+ x2+ 1− 2ax2y (y2+ x2+ 1)2 ( %i634) integrate(g(x,y),x); ( %o634) ay log¡y2+ x2+ 1¢ 2
( %i635) h:(%e^x-1)/x; ( %o635) ex− 1 x ( %i636) taylor(h,x,0,4); ( %o636) 1 +x 2 + x2 6 + x3 24 + x4 120+ · · ·
1.5.
Gr´
aficas de funciones
Para dibujar gr´aficas de funciones de una variable se utiliza el comando “plot2D”. Maxima emplear´a, por defecto7, el programa “gnuplot” para abrir una nueva ventana mostrando el resultado8.
( %i24) plot2D( cos(x^2), [x,-2*%pi,2*%pi]) $
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -8 -6 -4 -2 0 2 4 6 8 COS(x2 )
7Maxima puede tambi´en utilizar, mediante la opci´on “plot format”, otros programas
para representar gr´aficos, como “mgnuplot” (una interfaz gr´afica a gnuplot), “geomview” (un interesante programa para visualizar superficies 3d), “ps” (salida a un fichero posts-cript), etc
8Existe tambi´en la posibilidad de enviar la gr´afica a un fichero de tipo postscript
encapsulado, mediante los comandos:
“set plot option([GNUPLOT TERM, PS]);”
“set plot option([GNUPLOT OUT FILE, "nombrefichero.eps"]);”
Precisamente, ´esta es la t´ecnica que se ha utilizado para crear los gr´aficos que aparecen en la presente secci´on.
Se puede usar la opci´on “gnuplot preamble” para pasar a gnuplot una serie de comandos que ser´an ejecutados por este programa antes de repre-sentar la gr´afica (lo que transfiere a Maxima toda la potencia de gnuplot).
( %i35) set_plot_option([gnuplot_preamble, "set zeroaxis"])$ ( %i36) plot2D( x^2/(1-x^2), [x,-7,7], [y,-10,10])$
-10 -8 -6 -4 -2 0 2 4 6 8 10 -8 -6 -4 -2 0 2 4 6 8 x2 /(1-x2 )
Es posible representar varias funciones en la misma gr´afica, introdu-ci´endolas en una lista, como se puede observar en el siguiente ejemplo, en el que se representa una funci´on y desarrollos de taylor de distinto orden:
( %i39) f(x):=1/(1+x^2); ( %o39) f (x) := 1 1 + x2 ( %i40) plot2D([f(x),taylor(f(x),x,0,2),taylor(f(x),x,0,4),taylor(f(x),x,0,6)], [x,-1.2,1.2])$ -1.5 -1 -0.5 0 0.5 1 1.5 2 -1.5 -1 -0.5 0 0.5 1 1.5 1/(x2 +1) 1-x2 1-x2 +x4 1-x2 +x4 -x6
Tambi´en es posible representar gr´aficas de curvas param´etricas, polares o de funciones de dos variables:
( %i36) plot2d([parametric, t*cos(t), t*sin(t), [t,0,2*%pi]], [x,-7,7], [nticks, 150])$ -5 -4 -3 -2 -1 0 1 2 -4 -3 -2 -1 0 1 2 3 4 5 6 7 Fun1
( %i42) plot2d([2+cos(5*phi)], [phi, 0, 2*%pi], [nticks,10], [gnuplot_preamble, "set polar"])$ 3 2 1 0 1 2 3 3 2 1 0 1 2 3 COS(5*ph)+2
( %i43) plot3d(sin(x^2+y^2), [x,-1,1], [y,-1,1], [gnuplot_pm3d, true], [gnuplot_preamble, "unset surface; set contour"]) $
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 -1 -0.8-0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -1-0.8 -0.6-0.4 -0.2 0 0.2 0.4 0.6 0.8 1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0.8 0.6 0.4 0.2
En la gr´afica 3d anterior se ha empleado el modo “pm3d” de gnuplot, que colorea la superficie en funci´on de la coordenada z. Adem´as, como ejemplo, se ha utilizado “gnuplot preamble” para mostrar otras opciones de gnuplot que pueden mejorar el aspecto gr´afico tridimensional.
1.6.
Algebra Matricial
´
( %i553) A:matrix([1,0,-2], [2,3,2], [-2,0,1]); ( %o553) 12 0 −23 2 −2 0 1 ( %i554) determinant(A); ( %o554) −9 ( %i555) B:invert(A); ( %o555) − 1 3 0 −23 2 3 13 23 −2 3 0 −13 ( %i556) I:A.B; ( %o556) 1 0 00 1 0 0 0 1 ( %i557) M:A-x*I; ( %o557) 1 − x2 3 − x0 −22 −2 0 1 − x ( %i558) solve(determinant(M)=0); ( %o558) [x = 3, x = −1] ( %i559) M,x=3; ( %o559) −2 0 −22 0 2 −2 0 −2 ( %i560) rank(%); ( %o560) 1
( %i561) eigenvalues(A) /* [autovalores], [multiplicidades] */; ( %o561)
[[3, −1] , [2, 1]]
( %i562) eigenvectors(A) /* [autovalores], [v1], [v2], [v3] */; ( %o562)
[[[3, −1] , [2, 1]] , [1, 0, −1] , [0, 1, 0] , [1, −1, 1]]
( %i563) col(B,1) /* Primera columna de B */;
( %o563) − 1 3 2 3 −23 ( %i564) addcol(A,%); ( %o564) 1 0 −2 − 1 3 2 3 2 23 −2 0 1 −2
( %i565) triangularize(%); ( %o565) 30 270 −654 −112 0 0 −243 −108 ( %i566) %.transpose(matrix([x,y,z,1])); ( %o566) 54z + 27y + 12−6z + 3x − 1 −243z − 108
Cap´ıtulo 2
Ejemplo: estudio de una
Problema: Dada la funci´on f (x) = 2 1 + x2 si x ≤ 1 1 + ln x si x > 1 1. Estudiar su dominio, puntos de corte y as´ıntotas.
2. Analizar su continuidad y su derivabilidad, calcular su funci´on deriva-da primera.
3. Determinar sus intervalos de crecimiento y decrecimiento, as´ı como sus m´aximos y m´ınimos relativos.
4. Representar su gr´afica.
Soluci´on:
2.1.
Dominio, puntos de corte, as´ıntotas
Definimos: ( %i12) g(x):=1/(1+x^2); ( %o12) g (x) := 1 1 + x2 ( %i13) h(x):=1+log(x); ( %o13) h (x) := 1 + log x
El dominio de g es todo R pues, evidentemente, 1 + x2 6= 0 ∀x ∈ R. Pero si hubiera alguna duda, se podr´ıa utilizar Maxima , para comprobar que 1 + x2 no tiene ninguna ra´ız real (todas sus soluciones son n´umeros
imaginarios puros):
( %i7) solve(1+x^2=0); ( %o7)
Maxima es, incluso, suficientemente astuto para asegurarnos que 1 + x2
es siempre estrictamente positivo, utilizando el comando “is”, que intenta comprobar si una expresi´on es cierta:
( %i10) is(1+x^2=0); ( %o10) false ( %i11) is(1+x^2>0); ( %o11) true
Por otra parte, la funci´on h(x) solamente est´a bien definida para aquellos valores de x para los que tiene sentido log(x), es decir, el dominio de h es {x ∈ R / x > 0}. Luego
El dominio de la funci´on f (x) es todo R, pues cuando x ≤ 1 es igual a g, que est´a perfectamente definida, y cuando x > 1 coincide con h(x), que no tiene ning´un problema para estos valores de x.
Para estudiar los puntos de corte con el eje de las abscisas, plantea-mos ( %i12) solve(g(x)=0,x); ( %o12) [] ( %i13) solve(h(x)=0,x); ( %o13) £ x = e−1¤
El ´unico punto de corte es x = 1
e. En cuanto a posibles puntos de corte
con el eje vertical, cuando x = 0 nuestra funci´on toma el valor f (0) = g(0) = 1:
( %o14)
1
En definitiva:
Los puntos de corte de f (x) son (0, 1) y (1e, 0).
Para estudiar las as´ıntotas verticales, tendr´ıamos que analizar si existe alg´un punto a ∈ R en el que el l´ımite de f (x) por la derecha o por la izquierda sea +∞ ´o −∞, lo que ocurre t´ıpicamente en funciones racionales en las que se anula el denominador, en funciones logar´ıtmicas, etc. En nuestro caso, la funci´on g(x) no tiene ninguna as´ıntota vertical, porque su denominador es siempre distinto de cero. La funci´on h(x) tendr´ıa una as´ıntota vertical en x = 0, debido al logaritmo:
( %i16) limit(h(x),x,0,plus); ( %o16)
−∞
Pero esto no afecta a f (x), ya que en los alrededores de x = 0 no toma los valores de h, sino de g, con lo que f no tiene ninguna as´ıntota vertical.
Con respecto a as´ıntotas horizontales, tendremos que estudiar l´ımites de f (x) cuando x → −∞ (en cuyo caso f = g) y cuando x → +∞ (en cuyo caso f = h), ( %i17) limit(g(x),x,minf); ( %o17) 0 ( %i18) limit(h(x),x,inf); ( %o18) ∞
Por lo tanto, podemos concluir que:
f (x) tiene no tiene ninguna as´ıntota vertical y tiene una as´ıntota horizontal (la recta y = 0) cuando x → −∞.
2.2.
Continuidad, derivabilidad
Las funciones g(x) y h(x) son continuas dentro de sus respectivos domi-nios, por lo tanto f es continua salvo, eventualmente, en x = 1, el punto que divide las regiones donde f toma los valores de g y de h. Pero los l´ımites laterales de f en este punto son distintos, pues
( %i5) limit(g(x),x,1,minus); ( %o5) 1 2 ( %i6) limit(h(x),x,1,plus); ( %o6) 1
en consecuencia, f no es continua en x = 1 (tendr´a una discontinuidad de salto).
Adem´as, f no es derivable en x = 1 (por no ser continua) pero s´ı en el resto de R (pues tanto g como h lo son para valores de x que est´en dentro de sus respectivos dominios). Puesto que
( %i7) diff(g(x),x); ( %o7) − 2x (x2+ 1)2 ( %i8) diff(h(x),x); ( %o8) 1 x
la funci´on derivada de f es:
f0(x) = − 2x (x2+ 1)2 si x < 1 1 x si x > 1
2.3.
Crecimiento, extremos relativos
El crecimiento de f depende del signo de la funci´on derivada, f0(x),
Cuando x > 1, obviamente, 1
x > 0 y por lo tanto, f0(x) > 0. Aunque es un
caso tan sencillo que no merece la pena recurrir al ordenador, puede servir co-mo ilustraci´on la forma en que se podr´ıa comprobar lo anterior, utilizando los comandos “assume” e “is”:
( %i119) assume(x>1); ( %o119) [x > 1] ( %i120) is(1/x>0); ( %o120) true
cuando x < 1, el asunto es diferente, pues el signo de f0(x) depender´a de
la expresi´on
− 2x
(x2+ 1)2, (2.1)
que depende del signo de −2x (puesto que el denominador es siempre es-trictamente positivo), siendo, negativo cuando x > 0 y positivo en caso contrario.
Por lo tanto
f es creciente en (−∞, 0) ∪ (1, +∞) y decreciente en (0, 1).
Aunque en casos tan sencillos como este no merezca la pena, el signo de la expresi´on (2.1) se podr´ıa haber estudiado utilizando el ordenador. Aunque ante una pregunta inicial1, Maxima se muestra incapaz de ofrecer
una respuesta:
( %i126) forget(x>1)$ ( %i127) assume(x<1)$
( %i128) expresion:diff(g(x),x);
1Como se ve, es necesaro utilizar el comando “forget”, que elimina la restricci´on que
fue impuesta anteriormente por “assume”. Se puede usar tambi´en la funci´on “facts()” para obtener un listado de las proposiciones que est´an siendo asumidas.
( %o128)
− 2x
(x2+ 1)2 ( %i129) is(expresion>0);
MACSYMA was unable to evaluate the predicate: \mathrm{ERREXP1}
-- an error. Quitting. To debug this try DEBUGMODE(TRUE);
Evidentemente, lo que est´a ocurriendo es que el signo de la expresi´on anterior depende de −2x, es decir, de si x > 0 ´o x < 0. Lo podemos com-probar: ( %i250) assume(0<x,x<1)$ ( %i251) is(expresion<0); ( %o251) true ( %i252) forget(0<x,x<1)$ ( %i253) assume(x<0)$ ( %i254) is(expresion>0); ( %o254) true
Para hallar m´aximos y m´ınimos relativos, calculemos los puntos cr´ıticos de f :
( %i259) solve( diff(g(x),x)=0, x ); ( %o259)
[x = 0]
( %i260) solve( diff(h(x),x)=0, x ); ( %o260)
Esto es, h no tiene puntos cr´ıticos y g tiene un punto cr´ıtico, x = 0. Cuando x = 0 la funci´on f es igual a g, luego ´este es un punto cr´ıtico de f . Para saber si se trata de un m´aximo o un m´ınimo, podemos estudiar el signo de la derivada segunda:
( %i268) diff(g(x),x,2); ( %o268) 8x2 (x2+ 1)3 − 2 (x2+ 1)2 ( %i269) %,x=0; ( %o269) −2
Por lo tanto, f00(0) = g00(0) = −2 < 0, es decir, f tiene un m´aximo
relativo en x = 0.
2.4.
Representaci´
on gr´
afica
Para representar la gr´afica de f , podemos definir:
( %i311) f(x):= if(x<1) then g(x) else h(x); ( %o311)
f (x) := if x < 1 then g (x) else h (x)
El problema es que Maxima no est´a preparado para representar directa-mente este tipo de funciones, siendo necesario encapsular f (x) en una expre-si´on de la forma “’(f(x))”.
( %i320) plot2d(f(x),[x,-5,5],[y,-1,5]); output file "grafica_prob1.eps".
( %o320)
( %i321) plot2d(’(f(x)),[x,-5,5], [gnuplot_preamble, "set zeroaxis"]); output file "grafica_prob1.eps".
( %o321) 0 0.5 1 1.5 2 2.5 3 -6 -4 -2 0 2 4 6 f(x)
La f´ormula empleada para la representaci´on gr´afica de f tiene un pro-blema: err´oneamente, se representa una l´ınea vertical en x = 1 que oculta la existencia de una discontinuidad de salto en este punto.