Está en la página 1de 17

EJEMPLOS DE USO DE MAXIMA

MART

IN PAV

ON

Indice
1. Introduccion 1
2. Gracos 2
2.1. Las instrucciones plot2d y plot3d 2
2.2. El paquete draw y las instrucciones draw2d y draw3d 3
3. Matrices 5
3.1. Operaciones 5
3.2. Determinante e inversa 6
3.3. Submatrices 6
4. Diferenciacion 7
4.1. Derivadas 7
4.2. Diferencial, matriz jacobiana 9
4.3. Hessiano, extremos locales de funciones de varias variables 10
5. Integracion 12
5.1. Integracion de funciones de una variable. 12
5.2. Integracion de funciones de varias varibles. 13
6. Ecuaciones diferenciales ordinarias 13
6.1. Derivadas 13
6.2. Solucion general de ecuaciones diferenciales lineales de primer y segundo orden 14
6.3. Condiciones iniciales y de borde 14
7. Series de Fourier 16
7.1. Series de Fourier de una funcion dada 16
7.2. Series de senos y cosenos 17
1. Introducci on
Estas notas no pretenden ser una introduccion formal al uso del programa Maxima, solo pretenden
mostrar algunas instrucciones basicas y unos pocos ejemplos de uso, que pueden ser convenientes para
complementar el estudio de cursos de analisis matematico, ecuaciones diferenciales, etc. Ademas de la docu-
mentacion de ayuda que acompa na al programa, en la red pueden encontrarse varios tutoriales (por ejemplo
en http://www.csulb.edu/~woollett/) y a un videos ( http://vimeo.com/maximajaj#3053491). Existen
versiones del programa para Linux, Mac que es instalan de la manera usual y para Windows; esta ultima
puede descargarse de
http://sourceforge.net/projects/maxima/files/Maxima-Windows/5.20.1-Windows/maxima-5.20.1.exe/download
La idea de las notas es que el lector copie los ejemplos que aparecen y a partir de ah comience a
experimentar introduciendo los cambios que desee hasta familiarizarse con la instruccion que este empleando.
Si bien en la ventana aparece una barra con botones para las operaciones mas frecuentes, las intrucciones
estan pensadas para ser tipeadas (o usar copy & paste). Para ejecutar lo que se tipea se debe presionar
enter o crtl + enter seg un la conguracion.
2 MART

IN PAV

ON
2. Gr aficos
2.1. Las instrucciones plot2d y plot3d. Los comandos mas sencillos en Maxima para realizar gracos
relacionados con funciones son plot2d para gracar curvas en el plano (ya sean curvas parametrizadas o
gracos de funciones )y plot3d para obtener el graco de funciones denidas en subconjuntos de R
2
a R .
Ejemplos
(1) Graco de la funcion f(x) = x
2
3x + 2 , con 5 x 6 .
plot2d([x^2 - 3*x +2], [x,-5,5])$
(2) Graco de la funcion f(x) = sen(3x) y g(x) = cos(2x) con x entre y 2 .
plot2d([sin(3*x), cos(2*x)], [x, -%pi, 3*%pi])
(Observar que las distintas funciones estan dentro de un mismo corchete, separadas por comas y
el uso de %pi para el n umero .)
(3) Graco de una circunferencia parametrizada
plot2d ([parametric, cos(t), sin(t), [t,-%pi,%pi]],
[gnuplot_preamble, "set size ratio -1"])
Es conveniente se nalar algunas diferencias en la estructura de las instrucciones, por ejemplo, cuan-
do dibujamos el graco de una funcion, el rango de la variable esta afuera del corchete donde esta la
denicion de la funcion; en cambio en el paso parametrico, ademas de la instruccion parametric
el rango esta dentro del mismo corchete. La instruccion dentro del ultimo corchete se emplea para
enviar instrucciones al programa que ese encarga en ultima instancia de hacer el dibujo (en este caso
la instruccion es la que esta entre comillas), que pasa si no la colocamos?
(4) Graco de f(x, y) = ye
x
+ xsen(y) , 1 x 2 , 2 y 5 .
plot3d(y*exp(x)- x*sin(y), [x,-1,2], [y,-2,5])
(5) El mismo graco del inciso anterior, pero con el agregado del nombre los ejes.
plot3d(exp(x)- x*sin(y), [x,-1,2], [y,-2,5],
[xlabel, "eje x"], [ylabel, "eje y"], [zlabel, "z"])
(6) Graco de la funcion f(x, y) =

x
2
x
2
+ y
2
si y < 0,
0 si y = 0,
y
2

x
2
+ y
2
si y > 0.
Primero denimos la funcion de la siguiente manera:
f(x, y):= if y < 0 then x^2/(x^2 + y^2)
elseif y = 0 then 0
else y^2/sqrt(x^2 + y^2)
Prestar atencion a la manera de realizar la asignacion := y a la estructura
if ... elseif ... else .
Una vez resuelto esto, procedemos con en los ejemplos anteriores pero en lugar de poner la formula,
usamos el nombre de la funcion; en este caso f.
EJEMPLOS DE USO DE MAXIMA 3
plot3d( f, [x, -1, 1], [y, -1, 1], [xlabel, "eje x"], [ylabel, "eje y"])
(7) Para gracar una supercie parametrizada, no es necesaria la instruccion parametric, el siguiente
ejemplo muestra el dibujo de la supercie parametrizada dada por f(u, v) = (u+v, u5v, u
2
v) ,
con u y v entre 3 y 3 .
plot3d([u + v , u - 5*v, u^2 -v], [u, -3, 3 ], [v , -3, 3])
Una vez mas, es conveniente que se detengan unos instantes a observar las diferencias plot2d y
plot3d.
2.2. El paquete draw y las instrucciones draw2d y draw3d. Si bien las instrucciones anteriores son
sucientes para gracos simples, carecen de exibilidad a la hora de encarar gracos mas ambiciosos; en
particular, el de supercies denidas por ecuaciones o representar en un unico dibujo gracos de distinto tipo:
supercies denidas por ecuaciones, curvas parametrizadas y gracos de funciones. En este caso combine
utilizar el paquete draw. Vale la pena se nalar que esta mayor exibilidad se da a costa de una mayor
complejidad, aqu presentamos unos ejemplos mnimos, la referencia obligada tanto para ejemplos como
para mas informacion es
http://www.telefonica.net/web2/biomates/maxima/gpdraw/index.html
Para comenzar, es importante se nalar que si bien draw es un paquete estandar del programa, no se carga
automaticamente, de modo que eso tenemos que hacerlo nosotros; para esto basta ejecutar la instruccion
load(draw).
Ejemplos
(1) Gracar la funcion f(x, y) = x
2
y
2
con 1 x 2 , 2 y 2 .
load(draw);
draw3d(
explicit(x^2 - y^2, x, -2, 2, y, -2, 2),
surface_hide=true)
Vale la pena notar que la formula de la funcion aparece dentro del explicit acompa nada por el
rango de las variables.
(2) Gracar la funcion del inciso (6) del ejemplo anterior.
En este caso utilizamos una caracterstica particular de draw que permite superponer gracos de
distintas funciones en un mismo dibujo. Cual de los dos gracos representa mas elmente al graco
de la funcion?
draw3d(
xu_grid=20, yv_grid=20,
explicit(x^2/(x^2 + y^2), x, -1, 1, y,-1, 0),
color="red",
line_width=3,
parametric(t,0,0, t, -1, 1),
line_width=1,
color="black",
explicit(y^2/sqrt(x^2 + y^2), x, -1, 1, y,0 , 1),
surface_hide=true,xlabel="eje x", ylabel="eje y", zlabel="eje z"
);
En este caso, ademas de las declaraciones de color para el graco aparece la instruccion parametric
para introducir una curva representada en forma parametrica que corresponde a la condicion f(x, y) =
4 MART

IN PAV

ON
0 si y = 0 . Si hubiesemos querido representar una supercie parametrizada, la instruccion que cor-
responde es parametric surface.
xu grid e yv grid se utilizan para indicar las cantidad de puntos que se usan para la malla
que genera la supercie. line width establece el grosor del trazo; damos el valor 3 para que no pase
desapercibida la curva roja y despues volvemos al valor por defecto.
(3) Gracar la esfera de centro (0, 0, 0) y radio 1 y el plano de ecuacion z = x y .
draw3d(
color="red",
implicit(x^2 + y^2 + z^2 = 1, x, -1, 1, y, -1, 1, z, -1, 1),
color="blue",
explicit(x - y, x, -1,1, y, -1, 1),
surface_hide=true,
xlabel="eje x", ylabel="eje y", zlabel= "eje z",
user_preamble="set size 0.5,1;set origin 0.25,0.1")
Este ejemplo muestra el uso de la instruccion implicit para gracar supercies denidas por ecua-
ciones (en el caso de la esfera). Respecto al plano, dado que la ecuacion tiene la forma z = f(x, y)
continuamos usando la instruccion explicit. Por ultimo, en el caso de tres dimensiones, la instruc-
ci on set size ratio square no tiene ninguna utilidad y debemos recurrir a la instruccion mas
complicada dada dentro del user preamble. (Por otro lado, no debemos confundirnos: dentro de
plot2d y plot3d se usa gnuplot preamble, en cambio con draw2d y draw3d se usa user preamble).
(4) Gracar las curvas de nivel 1 , 1/2 , 0 , 1/2 y 1 de la funcion f(x, y) = x
2
y .
draw3d(
explicit(x^2 - y, x, -2, 2, y, -2, 2),
surface_hide=true,
xlabel="eje x", ylabel="eje y", zlabel= "eje z",
contour_levels={ -1, -1/2, 0, 1/2, 1},
contour=map,
user_preamble="set size square"
)
En verdad, es posible gracar curvas de nivel sin necesidad de utilizar el paqauete draw (buscar
contour plot en la ayuda del programa).
(5) Para la misma funcion del inciso anterior, gracar la funcion, las curvas de nivel en el plano xy y
las curvas de nivel sobre el graco de f .
draw3d(
color=green,
explicit(x^2 - y, x, -2, 2, y, -2, 2),
surface_hide=true,
xlabel="eje x", ylabel="eje y", zlabel= "eje z",
contour_levels={ -1, -1/2, 0, 1/2, 1},
contour=both,
user_preamble="set size square"
)
Si comparamos los dos incisos, la ubicacion de las curvas esta dada por las instruccion contour.
Si la denimos como map, aparecen las curvas en el plano, como estan denidas matematicamente.
Si damos a contour el valor base, obtenemos el graco de la funcion y en el plano xy las curvas.
EJEMPLOS DE USO DE MAXIMA 5
Si le damos el valor surface, aparecen sobre el graco y si le damos el valor both, aparecen sobre
el graco de la funcion y en el plano xy .
3. Matrices
Hay dos maneras de introducir matrices en Maxima (ademas de usar el men u desplegable): con la in-
struccion matrix y con entermatrix.
En el primer caso, la instruccion tiene la forma
matrix([primera fila (sep. por comas)], ..., [ultima fila]
En el segundo, la forma es
entermatrix(nro. de filas, nro. de columnas)
En este caso el programa va solicitando los distintos coecientes de la matriz.
3.1. Operaciones. Las instrucciones son +, para la suma - para la resta y . para el producto de matrices
usual (* se usa para calcular el producto un escalar por una matriz o el producto de dos matrices de igual
tama no componente a componente)
Ejemplo
(1) Sean
A =

1 2 3 4
1 3 0 1
3 1 1 2

, B =

1 3 0 0
3 4 1 3
0 2 2 1

, C =

2 3 1
1 0 1
2 2 1

Calcular C(A3B) .
(%i3) A:matrix([1, 2, 3, 4], [-1, 3, 0, 1], [3, -1, -1, 2]);
(%o3) matrix([1,2,3,4],[-1,3,0,1],[3,-1,-1,2])
(%i5) B: entermatrix(3, 4);
Row 1 Column 1: 1;
Row 1 Column 2: 3;
Row 1 Column 3: 0;
Row 1 Column 4: 0;
Row 2 Column 1: -3;
Row 2 Column 2: 4;
Row 2 Column 3: 1;
Row 2 Column 4: -3;
Row 3 Column 1: 0;
Row 3 Column 2: 2;
Row 3 Column 3: 2;
Row 3 Column 4: 1;
Matrix entered.
(%o5) matrix([1,3,0,0],[-3,4,1,-3],[0,2,2,1])
(%i6) C:matrix([2, 3, 1], [-1, 0, 1], [2, 2, 1]);
(%o6) matrix([2,3,1],[-1,0,1],[2,2,1])
(%i7) C.(A - 3*B);
(%o7) matrix([23,-48,-10,37],[5,0,-10,-5],[15,-39,-7,27])
6 MART

IN PAV

ON
3.2. Determinante e inversa. La instruccion para calcular el determinante de una matriz es
determinant(matrix) y para calcular la inversa, si existe, es invert(matrix).
Ejemplos
(1) Sea A =

2 3 1
1 0 1
2 2 1

, calcular el determinante de A .
(%i13) A:matrix([2, 3, 1], [-1, 0, 1], [2, 2, 1]);
(%o13) matrix([2,3,1],[-1,0,1],[2,2,1])
(%i14) determinant(A);
(%o14) 3
Notemos que, dado que el determinante es distinto de cero, la matriz es inversible.
(2) Calcular A
1
con A la matriz de ejemplo anterior.
(%i16) invert(A);
(%o16) matrix([-2/3,-1/3,1],[1,0,-1],[-2/3,2/3,1])
(3) Calcular la inversa de B =

1 2 3
4 5 6
7 8 9

.
(%i17) B: matrix([1, 2, 3], [4, 5, 6], [7, 8, 9]);
(%o17) matrix([1,2,3],[4,5,6],[7,8,9])
(%i18) invert(B);
Division by 0
-- an error. To debug this try debugmode(true);
En este caso el programa informa que la matriz no es inversible.
3.3. Submatrices. En ocasiones, por ejemplo cuando intentamos estudiar el hessiano de una funcion de
varias variables, es importante considerar submatrices de una matriz dada, esto es matrices que obtenemos
al descartar alguna la y/o columna de la matriz original. En este caso la instruccion a usar es submatrix
que tiene la forma
submatrix(filas a remover sep. por comas, matriz, colum. a remover sep. por comas)
Ejemplo
(1) Calcular las submatrices diagonales de A y sus determinantes con
A =

1 2 3 5 6
2 1 5 6 0
2 2 2 0 9
0 9 7 4 2
3 2 1 1 9

.
La submatriz diagonal de 1 1 es 1 , para las demas usamos el programa.
(%i21) A : matrix(
[1, 2, 3, 5, 6], [-2, 1, 5, 6,0 ], [2, 2, 2, 0, -9], [0, 9, 7, -4, 2],
[-3, 2, 1, 1, 9]);
(%o21) matrix([1,2,3,5,6],[-2,1,5,6,0],[2,2,2,0,-9],[0,9,7,-4,2],[-3,2,1,1,9])
(%i24) A2:submatrix(3,4, 5, A, 3, 4, 5);
(%o24) matrix([1,2],[-2,1])
(%i25) A3:submatrix(4, 5, A, 4, 5);
(%o25) matrix([1,2,3],[-2,1,5],[2,2,2])
(%i26) A4: submatrix(5, A, 5);
EJEMPLOS DE USO DE MAXIMA 7
(%o26) matrix([1,2,3,5],[-2,1,5,6],[2,2,2,0],[0,9,7,-4])
(%i27) determinant(A2);
(%o27) 5
(%i28) determinant(A3);
(%o28) 2
(%i29) determinant(A4);
(%o29) -296
(%i30) determinant(A);
(%o30) 4872
4. Diferenciaci on
Esta seccion requiere de los contenidos de la seccion 2.
4.1. Derivadas. La instruccion para calcular las derivadas de una funcion de una o mas variables es diff;
su estructura es
diff(funcion, variable, orden de derivacion, variable, orden de derivacion, . . . )
En ocasiones no deseamos conocer el valor de la derivada en determinado punto. Como diff no devuelve
una funcion sino una expresion, no podemos proceder de la misma manera que con una funcion; en cambio,
usamos la instruccion ev.
Ejemplos
(1) Calcular la derivada de f(x) = x
2
+ sen(3x + 4) .
(%i14) f(x) := x^2 + sin(3*x + 4);
(%o14) f(x):=x^2+sin(3*x+4)
(%i15) diff(f(x), x);
(%o15) 3*cos(3*x+4)+2*x
(2) Calcular las derivadas segundas y terceras de la funcion del inciso anterior.
(%i16) diff(f(x), x, 2);
(%o16) 2-9*sin(3*x+4)
(%i17) diff(f(x), x, 3);
(%o17) -27*cos(3*x+4)
(3) Calcular las derivadas parciales de f(x, y) = x
3
+ xe
y
2
.
(%i18) f(x, y) := x^3 + x*exp(y^2);
(%o18) f(x,y):=x^3+x*exp(y^2)
(%i19) diff(f(x,y), x);
(%o19) %e^y^2+3*x^2
(%i20) diff(f(x, y) , y);
(%o20) 2*x*y*%e^y^2
(4) Evaluar las derivadas parciales del inciso anterior en (2, 0) .
(%i27) f(x,y) := x^3 + x*exp(y^2);
(%o27) f(x,y):=x^3+x*exp(y^2)
(%i23) fx:diff(f(x, y), x);
(%o23) %e^y^2+3*x^2
(%i24) ev(fx, x=2, y=0);
(%o24) 13
8 MART

IN PAV

ON
(%i29) fy:diff(f(x, y), y);
(%o29) 2*x*y*%e^y^2
(%i30) ev(fy, x = 2, y = 0);
(%o30) 0
(5) Vericar que las derivadas segundas mixtas de la funcion del inciso anterior son iguales
(%i13) f(x,y) := x^3 + x*exp(y^2);
(%o13) f(x,y):=x^3+x*exp(y^2)
(%i14) diff(f(x, y), x, 1, y, 1);
(%o14) 2*y*%e^y^2
(%i15) diff(f(x, y), y, 1, x, 1);
(%o15) 2*y*%e^y^2
Otra manera de hacer esto es combinando dos diff. No es la manera mas simple pero apunta
directamente a la denicion de derivada sucesiva.
(%i21) diff(diff(f(x, y), x), y);
(%o21) 2*y*%e^y^2
(%i22) diff(diff(f(x, y), y), x);
(%o22) 2*y*%e^y^2
(6) Gracar la trayectoria g(t) = (t
2
t, t
4
t
3
, 3t 2) , el punto g(1) , el vector tangente a la
trayectoria en g(1) y la recta tangente a la trayectoria en g(1) .
(%i1) g(t) := [t^2 - t, t^4 - t^3, 3*t - 2]; #definimos g
(%o1) g(t):=[t^2-t,t^4-t^3,3*t-2]
(%i2) g(1); #verificamos cuanto vale g(1).
(%o2) [0,0,1]
(%i4) deri:diff(g(t), t, 1); /* calculamos la derivada de g, guardamos
la expresion en la variable deri. */
(%o4) [2*t-1,4*t^3-3*t^2,3]
(%i6) vt:ev(deri, t = 1); /* evaluamos la derivada en t =1,
guardamos el vector g(1) en la variable vt. */
(%o6) [1,1,3]
(%i16) recta : g(1) + t*vt; /* ec. de la recta tangente en forma
parametrica. */
(%o16) [t,t,3*t+1]
(%i7) load(draw); /* cargamos el paquete draw para hacer los graficos */
(%o7) /usr/share/maxima/5.17.0/share/draw/draw.lisp
(%i38) draw3d(
xlabel="eje x", /* nombramos los ejes para orientarnos. */
ylabel="eje y",
color="blue",
parametric(g(t)[1], g(t)[2], g(t)[3],t, -1, 1.5), /* graficamos la
trayectoria en azul. */
color="red",
parametric(recta[1], recta[2], recta[3], t, -1, 2), /* graficamos la recta
en rojo. */
color="black",
point_type = filled_circle,
EJEMPLOS DE USO DE MAXIMA 9
point_size = 2,
points([g(1)]), /* graficamos el punto en negro. Lo graficamos
situando un disco de tama~no 2. */
color = "green",
vector(g(1), vt), /* graficamos el vector tangente en verde. */
user_preamble="set size square"
);
(%o38) [gr3d(parametric,parametric,points,vector)]
4.2. Diferencial, matriz jacobiana. El comando para calcular la matriz jacobiana de una funcion es
jacobian. La instruccion tiene la forma
jacobian(funcion o expresion vectorial, vector de variables)
Es importante notar que la funcion debe estar dada por un vector; este no suele ser el caso de los campos
escalares, de modo que en este caso encerramos la funcion entre corchetes.
Ejemplos
(1) Calcular la matriz jacobiana de f (x, y, z) = x
3
y + 3 z e
(z xxy+y z)
.
(%i31) f(x, y, z) := x^3 *y +3*z - exp(z*x-x*y + y*z);
(%o31) f(x,y,z):=x^3*y+3*z-exp(z*x-x*y+y*z)
(%i19) jacobian([f(x,y, z)], [x, y, z]);
(%o19) matrix([3*x^2*y-(z-y)*%e^(y*z+x*z-x*y),
x^3-(z-x)*%e^(y*z+x*z-x*y),
3-(y+x)*%e^(y*z+x*z-x*y)])
Observen en %i19 que encerramos la funcion entre corchetes. La salida es una matriz de una la
y tres columnas.
(2) Calcular la matriz de la diferencial de f(u, v) = (u + v, u v, u
2
v
2
) en (1, 2) .
(%i34) f(u, v) := [u + v, u - v, u^2 - v^2];
(%o34) f(u,v):=[u+v,u-v,u^2-v^2]
(%i35) df : jacobian(f(u, v), [u, v]);
(%o35) matrix([1,1],[1,-1],[2*u,-2*v])
(%i36) ev(df, u = 1, v = 2);
(%o36) matrix([1,1],[1,-1],[2,-4])
En este caso, la funcion es un campo vectorial (observen como la denimos en%i34) de modo que
en este caso no es necesario encerrarla entre corchetes.
(3) Sea f(x, y) = x
3
3xy + y
3
. En un mismo graco, mostrar la supercie z = f(x, y) , el punto
(1, 1, f(1, 1)) y el plano tangente a la supercie en dicho punto.
(%i37) f(x, y) := x^3 - 3*x*y + y^3; /* definimos la funcion. */
(%o37) f(x,y):=x^3-3*x*y+y^3
(%i38) P : [1, -1, f(1, -1)]; /* calculamos el punto que
nos interesa */
(%o38) [1,-1,3]
(%i39) fx : diff(f(x,y), x); /* calculamos la derivada parcial respecto
de x y la guardamos en la variable
fx. */
(%o39) 3*x^2-3*y
(%i40) a : ev(fx, x=1, y = -1); /* evaluamos la derivada en (1, -1),
asignamos el valor a la variable a. */
10 MART

IN PAV

ON
(%o40) 6
(%i41) fy : diff(f(x, y), y);
(%o41) 3*y^2-3*x
(%i42) b : ev(fy, x = 1, y = -1);
(%o42) 0
(%i48) draw3d( /* graficamos. El paquete draw ya estaba
cargado, si no primero tenemos que
ejecutar load(draw) */
xlabel = "eje x", ylabel = "eje y",
xu_grid = 20, yv_grid = 20, /* damos la cantidad de puntos que se usan
para establecer los graficos; por
default es 30 pero con esto el grafico
queda un poco recargado. */
color = "blue",
explicit(f(x, y), x, 0, 2, y, -2, 0),
color = "red",
explicit(f(1, -1) + a*(x - 1) + b*(y + 1), x, 0, 2, y, -2, 0),
color = "black",
points([P]),
point_type = filled_circle,
point_size = 5,
surface_hide = true,
user_preamble = "set size square"
);
(%o48) [gr3d(explicit,explicit,points)]
(4) Calcular la derivada direccional de g(x, y) = xe
y1
+ ye
x2
en el punto (2, 1) en la direccion del
vector v = (3/5, 4/5) . Ademas, calcular el valor de la derivada direccional maxima de f en ese
punto y la direccion en que se alcanza.
El programa no tiene denida una funcion que calcule el gradiente de una funcion de dos variables,
as que usamos la matriz de la diferencial. Afortunadamente, cuando es necesario, el programa
interpreta a una matriz la como un vector y permite calcular el producto interno tal como se ve
en %i34. (Para calcular el producto vectorial entre los vectores u y v se utiliza .)
(%i31) g(x, y) := x*exp(y-1) + y*exp(x-2);
(%o31) g(x,y):=x*exp(y-1)+y*exp(x-2)
(%i32) Dg : jacobian([g(x,y)], [x, y]);
(%o32) matrix([%e^(y-1)+%e^(x-2)*y,x*%e^(y-1)+%e^(x-2)])
(%i33) Dg21 : ev(Dg, x = 2, y=1);
(%o33) matrix([2,3])
(%i34) der = Dg21 . [3/5, -4/5];
(%o34) der=-6/5
(%i37) der_max : sqrt(Dg21.Dg21);
(%o37) sqrt(13)
(%i38) vec_max : Dg21/der_max;
(%o38) matrix([2/sqrt(13),3/sqrt(13)])
4.3. Hessiano, extremos locales de funciones de varias variables. El comando para calcular hessiano
de una funcion es hessian. La instruccion tiene la forma
hessian(funcion, vector de variables)
Ejemplos
(1) Calcular el hessiano de f(x, y, z) = x
2
y zx + z
3
+ y
2
y evaluarlo en el punto (2, 1, 3) .
EJEMPLOS DE USO DE MAXIMA 11
(%i35) f(x, y, z) := x^2*y - z*x + z^3 + y^2;
(%o35) f(x,y,z):=x^2*y-z*x+z^3+y^2
(%i36) hess : hessian(f(x, y, z), [x, y, z]);
(%o36) matrix([2*y,2*x,-1],[2*x,2,0],[-1,0,6*z])
(%i37) hess : ev(hess, x=2,y=-1,z=3);
(%o37) matrix([-2,4,-1],[4,2,0],[-1,0,18])
Para los ejemplos que siguen son necesarias algunas intrucciones relacionadas con matrices que
aparacen en la seccion 3
(2) Hallar y clasicar los puntos crticos de f(x, y) = (x + y)(xy 1) .
(%i38) f(x, y) := (x + y)*(x*y -1);
(%o38) f(x,y):=(x+y)*(x*y-1)
(%i39) ec1 : diff(f(x, y), x) = 0;
(%o39) y*(y+x)+x*y-1=0
(%i40) ec2 : diff(f(x, y), y) = 0;
(%o40) x*(y+x)+x*y-1=0
(%i41) solve([ec1, ec2], [x, y]);
(%o41) [[x=-1/sqrt(3),y=-1/sqrt(3)],[x=1/sqrt(3),y=1/sqrt(3)],
[x=-%i,y=%i],[x=%i,y=-%i]]
(%i43) hess: hessian(f(x, y), [x, y]);
(%o43) matrix([2*y,2*y+2*x],[2*y+2*x,2*x])
(%i44) hess1: ev(hess,x=-1/sqrt(3),y=-1/sqrt(3) );
(%o44) matrix([-2/sqrt(3),-4/sqrt(3)],[-4/sqrt(3),-2/sqrt(3)])
(%i45) determinant(hess1);
(%o45) -4
(%i46) hess2 : ev(hess,x=1/sqrt(3),y=1/sqrt(3) );
(%o46) matrix([2/sqrt(3),4/sqrt(3)],[4/sqrt(3),2/sqrt(3)])
(%i47) determinant(hess2);
(%o47) -4
En %i38, denimos la funcion que vamos a estudiar; en %i39, %i40 calculamos las derivadas par-
ciales, las igualamos a 0 y asigamos estas expresiones a las variables ec1, ec2.
En %i41 usamos la instruccion solve
1
para resolver el sistema de ecuaciones

f
x
(x, y) = 0
f
y
(x, y) = 0
El sistema tiene cuatro soluciones, pero solo dos son reales; as que los puntos crticos son (1/

3, 1/

3)
y (1/

3, 1/

3) . Para clasicarlos calculamos en hessiano (en %i43) evaluamos en los puntos


crticos (en %i44 y en %i46) y calculamos el determinante ( %i45 e %i47). En ambos casos el deter-
minante es negativo, por lo tanto ambos puntos son puntos de ensilladura.
(3) Hallar y clasicar los puntos crticos de f(x, y, z) = x
2
+ y
2
+ z
2
+ xy .
(%i48) f(x, y, z) := x^2 + y^2 + z^2 + x*y;
(%o48) f(x,y,z):=x^2+y^2+z^2+x*y
(%i49) ec1 : diff(f(x, y, z), x) = 0;
(%o49) y+2*x=0
(%i50) ec2 : diff(f(x, y, z), y) = 0;
(%o50) 2*y+x=0
1
La instruccion solve tiene la forma solve([cjto. ecuaciones], [lista de variables])
12 MART

IN PAV

ON
(%i51) ec3 : diff(f(x, y, z), z) = 0;
(%o51) 2*z=0
(%i52) solve([ec1, ec2, ec3], [x, y, z]);
(%o52) [[x=0,y=0,z=0]]
(%i54) hess :hessian(f(x, y, z), [x, y, z]);
(%o54) matrix([2,1,0],[1,2,0],[0,0,2])
(%i55) determinant(hess);
(%o55) 6
(%i56) hess2: submatrix(3, hess, 3);
(%o56) matrix([2,1],[1,2])
(%i57) determinant(hess2);
(%o57) 3
La resolucion es similar al ejemplo anterior; en este caso, de acuerdo con el criterio para funciones
de tres variables, en el punto crtico se alcanza un mnimo local.
5. Integraci on
5.1. Integracion de funciones de una variable. La instruccion basica para calcular integrales simboli-
coas es integrate. Esta se puede emplear tanto para buscar primitivas como para calcular integrales
denidas. La estructura de la instruccion es
integrate(funcion, variable)
para calcular primitivas e
integrate(funcion, variable, lmite inferior, lmite superior)
para calcular integrales denidas.
Ejemplos
(1) Hallar una primitiva de f(x) = x
2
+ sen(3x) .
(%i1) integrate(x^2 + sin(3*x), x);
(%o1) x^3/3-cos(3*x)/3
(2) Calcular


0
x
2
+ sin(3x) dx .
(%i2) integrate(x^2 + cos(3*x), x, 0, %pi);
(%o2) %pi^3/3
(3) Hallar una primitiva de f(x) = sen(x)/x .
(%i3) integrate(sin(x)/x, x);
(%o3) integrate(sin(x)/x,x)
En este caso es imposible hallar una primitiva y el programa devuelve la expresion de la integral
(4) Calcular

senx
x
dx .
Dado que no es posible determinar una primitiva del integrando, recurrimos a metodos numericos
para estimar la integral.
(%i4) quad_qags(sin(x)/x, x, %pi, 3*%pi);
(%o4) [-0.1771752530025,7.6034219750884554*10^-15,21,0]
La respuesta es un vector de cuatro componentes, la primera es el resultado, la segunda una
estimacion del error cometido, la tercera esta relacionada con la cantidad de evaluaciones y la ultima
es un codigo de errores, 0 signica que se encontraron problemas.
5.2. Integracion de funciones de varias varibles. Para calcular integrales dobles o triples, primero
debemos escoger una iteracion y a partir de esta realizamos el calculo anidando la instruccion para el calculo
de integrales de una variable.
Ejemplos
(1) Calcular

R
x
2
y e
x+y
dxdy con R el rectangulo 0 x 1 , 1 y 2 .
(%i6) integrate( integrate(x^2*y - exp(x+y), x, 0, 1), y, -1, 2);
(%o6) -(%e^(-1)*(6*%e^4-6*%e^3-9*%e+6))/6
(2) Calcular

D
x + 3y dxdy con D el recinto denido por 0 y 1 , y
2
x 2 y .
(%i7) integrate( integrate( x + 3*y, x, y^2, 2 - y), y, 0, 1);
(%o7) 139/6
(3) Calcular el volumen del solido denido por 0 x 1/2 , 0 y 1 2x , 0 z 5 x
2
.
(%i8) integrate( integrate( integrate ( 1, z, 0, 5 - x^2), y, 0, 1-2*x), x, 0, 1/2);
(%o8) 119/96
(4) Calcular el volumen de una esfera de radio 2 empleando coordenadas esfericas.
(%i13) integrate(
integrate(
integrate(
r^2*sin(u),
r, 0, 2),
u, 0, %pi),
v, 0, 2*%pi)$
(%o13) 32%pi/3
6. Ecuaciones diferenciales ordinarias
6.1. Derivadas. Para calcular derivadas de funciones se utiliza la instruccion diff.
Ejemplos.
(1) Calcular la derivada de f(x) = x
2
+ sen(3x + 4) .
(%i14) f(x) := x^2 + sin(3*x + 4);
(%o14) f(x):=x^2+sin(3*x+4)
(%i15) diff(f(x), x);
(%o15) 3*cos(3*x+4)+2*x
(2) Calcular las derivadas segundas y terceras de la funcion del inciso anterior.
(%i16) diff(diff(f(x), x), x);
(%o16) 2-9*sin(3*x+4)
(%i17) diff(diff(diff(f(x), x), x), x);
(%o17) -27*cos(3*x+4)
14 MART

IN PAV

ON
Una manera alternativa y que conviene mencionar es diff(f(x), x, 2) y diff(f(x), x, 3)
respectivamente.
(3) Calcular las derivadas parciales de f(x, y) = x
3
+ xe
y
2
.
(%i18) f(x, y) := x^3 + x*exp(y^2);
(%o18) f(x,y):=x^3+x*exp(y^2)
(%i19) diff(f(x,y), x);
(%o19) %e^y^2+3*x^2
(%i20) diff(f(x, y) , y);
(%o20) 2*x*y*%e^y^2
(4) Vericar que las derivadas segundas mixtas de la funcion del inciso anterior son iguales
(%i21) diff(diff(f(x, y), x), y);
(%o21) 2*y*%e^y^2
(%i22) diff(diff(f(x, y), y), x);
(%o22) 2*y*%e^y^2
6.2. Solucion general de ecuaciones diferenciales lineales de primer y segundo orden. La instruc-
cion para hallar la solucion general de una ecuacion de primer o segundo orden es ode2. Para denir una
ecuacion diferencial, debemos indicar la derivada de una funcion que no conocemos, para esto anteponemos
a diff un apostrofe.
Ejemplos.
Hallar la solucion general de las siguientes ecuaciones
(1) y

+ 3xy = sen(x) .
(%i11) eq:diff(y, x) + 3*x*y = x;
(%o11) diff(y,x,1)+3*x*y=x
(%i12) ode2(eq, y, x);
(%o12) y=%e^(-(3*x^2)/2)*(%e^((3*x^2)/2)/3+%c)
(%i13) expand(%);
(%o13) y=%c*%e^(-(3*x^2)/2)+1/3
Notemos que, a diferencia de lo que ocurre cuando queremos calcular derivadas, no hay que
poner la variable independiente en la funcion dentro de diff (o sea, escribimos diff(y, x), no
diff(y(x), x). Suele ser comodo denir la ecuacion fuera de ode2 como hicimos en la primera
linea, pero esto no es necesario. La instruccion expand distribuye la exponencial que aparece en %o12
(el smbolo % que pasamos como argumento se reere a la ultima salida del programa). El uso de
expand tampoco es necesario pero la solucion aparece mejor presentada.
(2) y

+ 3y

4y = xcos(2x) .
(%i17) eq2: diff(y, x, 2) +3 *diff(y, x) - 4*y = x*cos(2*x);
(%o17) diff(y,x,2)+3*(diff(y,x,1))-4*y=x*cos(2*x)
(%i19) ode2(eq2, y, x);
(%o19) y=((6*x+4)*sin(2*x)+(3-8*x)*cos(2*x))/100+%k1*%e^x+%k2*%e^(-4*x)
6.3. Condiciones iniciales y de borde. Las instrucciones que se usan son ic1 para hallar la solucion
particular de una ecuacion de primer orden que cumple una condicion inicial dada, ic2 para resolver el
problema analogo con ecuaciones de segundo orden y bc2 para hallar, si existen, las soluciones particulares
EJEMPLOS DE USO DE MAXIMA 15
que cumplen satisfacen condiciones de borde dadas. Las tres reciben como parametros la solucion general
obtenida con ode2 mas las condiciones.
Ejemplos
Resolver los siguientes problemas con condiciones iniciale o de borde.
(1) y

3xy = x , y(0) = 3 .
(%i48) eq3: diff(y, x) -3*x*y = x;
(%o48) diff(y,x,1)-3*x*y=x
(%i49) ode2(eq3, y, x);
(%o49) y=(%c-%e^(-(3*x^2)/2)/3)*%e^((3*x^2)/2)
(%i50) ic1(%, x=0, y=3);
(%o50) y=(10*%e^((3*x^2)/2)-1)/3
(2) y

+ 3y

2y = x
2
, y(0) = 1 , y

(0) = 2 .
(%i53) ode2(eq4, y, x);
(%o53) y=%k1*%e^(((sqrt(17)-3)*x)/2)+
%k2*%e^(((-sqrt(17)-3)*x)/2)-(2*x^2+6*x+11)/4
(%i54) ic2(%, x = 0, y= 1, diff(y, x) = 2);
(%o54) y=((73*sqrt(17)+255)*%e^(((sqrt(17)-3)*x)/2))/136-
((73*sqrt(17)-255)*%e^(((-sqrt(17)-3)*x)/2))/136-(2*x^2+6*x+11)/4
En este caso es importante notar la manera de introducir las condiciones inciales.
(3) y

+ 9y = 0 , y(0) = 0 , y() = 0 .
(%i55) eq4: diff(y, x, 2) + 9*y = 0$
(%i56) ode2(eq4, y, x);
(%o56) y=%k1*sin(3*x)+%k2*cos(3*x)
(%i57) bc2(%, x = 0, y = 0, x= %pi, y = 0);
Dependent equations eliminated: (2)
(%o57) y=%r1*sin(3*x)
El programa nos hace saber que en este caso hay innitas soluciones de la forma y(x) = k sen(3x) .
(4) y

+ 5y = 0 , y(0) = 0 , y() = 0 .
(%i58) eq4: diff(y, x, 2) + 5*y = 0$
(%i59) ode2(eq4, y, x);
(%o59) y=%k1*sin(sqrt(5)*x)+%k2*cos(sqrt(5)*x)
(%i60) bc2(%, x = 0, y = 0, x= %pi, y = 0);
(%o60) y=0
En este caso la solucion es unica.
(5) y

+ 5y = 0 , y(0) = 1 , y() = 0 .
(%i58) eq4: diff(y, x, 2) + 5*y = 0$
(%i59) ode2(eq4, y, x);
(%o59) y=%k1*sin(sqrt(5)*x)+%k2*cos(sqrt(5)*x)
(%i60) bc2(%, x = 0, y = 0, x= %pi, y = 0);
(%o60) y=0
(%i61) bc2(%, x = 0, y = 1, x= %pi, y = 0);
Dependent equations eliminated: (2)
Inconsistent equations: [1]
#0: bc2(soln=y = 0,xa=x = 0,ya=y = 1,xb=x = %pi,yb=y = 0)
-- an error. To debug this try debugmode(true);
Y este ejemplo muestra como nos informa el programa que no existe solucion.
7. Series de Fourier
7.1. Series de Fourier de una funcion dada. Para el calculo de series de Fourier, necesitamos cargar el
paquete fourie, como siempre, con la instruccion load. A partir de esto, tenemos funciones que nos permiten
calcular las series de Fourier, de senos y de cosenos de una funcion dada. En cada uno de estos casos, la
respuesta del programa es un vector con los coecientes pedidos; tambien estan disponibles funciones para
calcular sumas parciales de las series.
Ejemplos
(1) Hallar la serie de Fourier de la funcion de perodo 2 denida por f(x) = x
2
, 2 x .
load(fourie);
(%o1) /usr/share/maxima/5.17.0/share/calculus/fourie.mac
(%i2) fourier(x^2, x, %pi);
Is cos(%pi*n) positive, negative, or zero?
positive;
(%t2) a[0]=%pi^2/3
(%t3) a[n]=(2*((%pi^2*sin(%pi*n))/n-(2*sin(%pi*n))/n^3+
(2*%pi*cos(%pi*n))/n^2))/%pi
(%t4) b[n]=0
(%o4) [%t2,%t3,%t4]
En el primer renglon cargamos el paquete fourie (es importante notar que, por alguna razon, no
tiene la r nal de Fourier).
En el segundo, calculamos la serie, al instruccion tiene como primer argmento la funcion cuya serie
queremos calcular, el segundo el nombre de la variable independiente y el tercero L si el perodo
de la funcion es 2L .
Lo que sigue es una pregunta que en ocasiones hace el programa para poder continuar, noten que
no es una respuesta estandar dado que la pregunta no esta precidida por %o; la respuesta usual es
positive (y ctrl + enter).
En la ultima parte tenemos la respuesta, el coeciente a
0
, los a
n
y b
n
y para nalizar todo eso
se guarda en un vector.
(2) Gracar la suma de los primeros cinco terminos de la serie de Fourier de la funcion del ejemplo
anterior entre 6 y 6 .
(%i5) coefi : fourier(x^2, x, %pi);
Is cos(%pi*n) positive, negative, or zero? positive;
EJEMPLOS DE USO DE MAXIMA 17
(%t5) a[0]=%pi^2/3
(%t6) a[n]=(2*((%pi^2*sin(%pi*n))/n-(2*sin(%pi*n))/n^3 +
(2*%pi*cos(%pi*n))/n^2))/%pi
(%t7) b[n]=0
(%o7) [%t5,%t6,%t7]
(%i9) fourexpand(coefi, x, %pi, 5);
(%o9) -(4*cos(5*x))/25+cos(4*x)/4-(4*cos(3*x))/9 +
cos(2*x)-4*cos(x)+%pi^2/3
(%i11) f(x) := fourexpand(coefi, x, %pi, 5);
(%o11) f(x):=fourexpand(coefi,x,%pi,5)
(%i12) plot2d(f(x), [x, -6, 6]);
En el primer renglon, calculamos como en el ejemplo anterior los coecientes de la serie pero, a
diferencia de lo hecho antes, guardamos el resultado del vector con el nombre de coefi (obvia-
mente, podemos poner cualquier nombre).
En ( %i9) aparece una nueva funcion, fourexpand, que es la que calcula la suma. El 5 que
aparece en ultimo lugar tiene que ver con la cantidad de sumandos. Una manera alternativa de
lograr lo mismo sera fourexpand(fourier(x^2, x, %pi), x, %pi,5);. . . Un plomazo.
La salida %o9 es la suma parcial; para gracarla es conveniente asignarla a una funcion, eso lo
hacemos en %i11 (presten atencion al uso de := para denir la funcion).
Finalmente, en %12 ejecutamos la instruccion para hacer el graco.
7.2. Series de senos y cosenos. Otros comandos relacionados con series de Fourier son:
(1) fourcos, foursin que devuelve los coeentes de los desarrollos en cosenos y senos de una funcion;
las instrucciones usan la misma sintaxis que fourier, pero en este caso se considera denida en el
intervalo [0, L] .
(2) totalfourier que intenta encontrar la formula del termino general de la serie y la serie de Fourier
en s (tambien con una sintaxis similar a la de fourier).
(3) foursimp simplica sen(n) y cos(n) (depende de las variables sinnpiflag, cosnpiflag que
por default estan denidas como true) . Por ejemplo,
(%i2) coef_sen : foursin(x^2, x, %pi);
Is sin(%pi*n) positive, negative, or zero?positive;
(%t2) b[n]=(2*((2*%pi*sin(%pi*n))/n^2-(%pi^2*cos(%pi*n))/n +
(2*cos(%pi*n))/n^3-2/n^3))/%pi
(%o2) [%t2]
(%i3) foursimp(coef_sen);
(%t3) b[n]=-(2*(%pi^2*n^2*(-1)^n-2*(-1)^n+2))/(%pi*n^3)
(%o3) [%t3]
Hay mas informacion en la ayuda del programa (dentro del item Numerical).