Minicurso de Introducción a Maple V
Observación:
Este Minicurso de Introducción a Maple V, es una pequeña guia para familiarizar al estudiante con la notación habitual del programa Maple.
No debemos olvidar, que podríamos introducir gran parte de los comandos, expresiones y acciones haciendo uso de las paletas, menús contextuales y el editor matemático.
CUANDO USE MAPLE V NO OLVIDE QUE:
Cuando entre un comando mediante notación Maple, no olvide colocar ; o : al final. El uso de : suprime el output.
La ayuda sobre cualquier comando es disponible desde el prompt usando ?tópico o bien dentro del menú Help, con el submenú Topic Search.
Maple distingue entre mayúsculas y minísculas; por lo tanto, valor y VALOR son variables distintas.
Las líneas de comentario comienzan por #. Estas líneas son ignoradas por el kernel de Maple.
Para cargar un archivo debemos usar comillas simples: 'nombre de archivo'.
El comando restart borra toda la memoria de Maple. Si nos perdemos en medio de una sesión de Maple podemos: o bien salir y iniciar de nuevo Maple V, o bien usar el comando restart.
El operador % permite recuperar el último output.
El operador de producto es *. A*B permite multiplicar A por B; AB no realiza el producto esperado.
Maple dispone de un interfaz de documentos múltiples. Los distintos worksheets hacen uso del mismo kernel. Esto significa que si en un determinado worksheet x toma el valor 5, dentro de la misma sesión cualquier otro worksheet supondrá que el valor de x es 5. Si no se desea trabajar con worksheets que compartan el mismo kernel debe usarse la versión paralela de Maple. Para ello seleccionaremos el icono Parallel Server Maple V en lugar de Maple V Release 5.1 dentro de la directorio Maple V Release 5.1. (o ejecutaremos Maple con wmaple32.exe -km p en lugar de wmaple32.exe
Cálculos Numéricos
Enteros
Maple V puede ser usado como una potente calculadora:
| > | 32*12^13; |
Además, Maple V incorpora un gran número de funciones para trabajar con enteros, incluyendo:
Aritmética modular:
| > | 25 mod 3; |
Factorial:
| > | 200!; |
![]()
![]()
Descomposición en factores primos:
| > | ifactor(%); |
![]()
Tests de primalidad:
| > | isprime(157); |
Racionales
Una de las principales virtudes de Maple V es el cálculo simbólico racional: podemos trabajar con racionales e irracionales sin necesidad de tener que remitirnos a aproximaciones numéricas (en coma flotante).
| > | 1/2 + 2/3; |
Maple V automáticamente se encarga de simplificar las fracciones:
| > | 2/4; |
También la manipulación de números irracionales se realiza de manera simbólica:
| > | sqrt(2); |
| > | (2^30)/(3^20)*sqrt(2)+sqrt(8); |
Decimales
A pesar que Maple V es un Sistema de Cálculo Simbólico (y por lo tanto se trabaja de manera exacta), podemos obtener aproximaciones numéricas de cualquier valor. El límite es de 500.000 dígitos.
Para obtener dichas aproximaciones decimales usaremos el comando evalf.
| > | evalf(%); |
| > | evalf(7/6); |
Podemos manipular constantes como
de manera simbólica o a partir de aproximaciones numéricas:
| > | Pi; |
| > | evalf(Pi,200); |
![]()
Cuando intervienen expresiones decimales dentro de los inputs, los outputs obtenidos también son expresiones decimales:
| > | 1.0/5.3; |
| > | sin(.2); |
Maple V puede calcular valores numéricos tanto para las funciones elementales como para funciones más especiales (y obtener expresiones decimales cuando lo deseeemos):
| > | sin(2*Pi); |
| > | exp(2); |
| > | evalf(%); |
Complejos
Maple V trabaja con números imaginarios. En particular, la unidad imaginaria
es representada por el símbolo I:
| > | (2+5*I)+(1-I); |
| > | (1+I)/(3-2*I); |
Cálculos Simbólicos
Manipulación de expresiones polinómicas
La verdadera virtud de Maple (como Sistema de Computación Algebraica) se encuentra en el área del cálculo simbólico, donde es capaz de trabajar con expresiones matemáticas:
| > | (1+x)^2; |
Maple V trabaja de manera matemática y automática con las expresiones polinómicas:
| > | (1+x)+(3-2*x); |
Disponemos de miles de funciones para la manipulación de expresiones simbólicas. A continuación podemos ver algunos ejemplos:
| > | expand((1+x)^2); |
| > | factor(%); |
| > | diff(sin(x),x); |
| > | sum(n^2,n); |
| > | int(x^3+x+1,x); |
| > | series(sin(x),x=0); |
Manipulación algebraica de expresiones
Maple V proporciona al usuario un potente entorno para simplificación de expresiones. En particular, hace uso de distintas identidades trigonométricas para la simplificación de expresiones:
| > | simplify(cos(x)^5+sin(x)^4+2*cos(x)^2-2*sin(x)^2-cos(2*x)); |
Para simplificar expresiones algebraicas racionales, podemos usar también el comando normal.
| > | normal((x^3-y^3)/(x^2+x-y-y^2)); |
El comando convert permite al usuario transformar una determinada expresión a otro tipo de formato. En particular, podemos transformar una expresión racional a una expresión equivalente en forma de suma de distintas expresiones racionales:
| > | expr:=(a*x^2+b)/(x*(-3*x^2-x+4)); |
| > | convert(expr,parfrac,x); |
Con el mismo comando podemos transformar una expresión trigonométrica a su equivalente en formato exponencial:
| > | convert(cot(x),exp); |
Resolución de ecuaciones
Es conveniente usar el comando restart al comienzo de una sesión, o cuando vayamos a involucrarnos dentro de una misma sesión en cálculos que no están relacionados con las variables o expresiones definidas con anterioridad.
| > | ?restart; |
Con el comando restart eliminamos de la memoria del kernel cualquier definición o asignación que hayamos realizado.
| > | restart; |
Para resolver ecuaciones algebraicas usaremos el comando solve:
| > | solve(a*x^2+b*x+c,x); |
Observación: Maple V asume que la ecuación contenida dentro del comando solve está igualada a 0, si no se indica lo contrario. Si Maple V devuelve la ecuación sin resolver, esto no significa que la ecuación no tenga solución, sino que Maple V no ha sido capaz de determinarla con el comando que le hemos indicado.
Con el mismo comando, Maple V puede resolver sistemas de ecuaciones y sistemas de inecuaciones:
| > | solve({x+2*y=3,y+1/x=1},{x,y}); |
| > | solve({x^2*y^2=0,x-y=1,x<>0},{x,y}); |
En ocasiones, el comando solve devuelve la expresión Root_Of. Con esta expresión representamos de manera simbólica el conjunto de raíces de ciertas ecuaciones de una variable. Si queremos obtener todos los valores (mediante una aproximación numérica) podemos hacer uso del comando allvalues:
| > | solve(x^5-2*x+2,x); |
| > | ### WARNING: allvalues now returns a list of symbolic values instead of a sequence of lists of numeric values
allvalues(%); |
Error, (in allvalues) redundant option RootOf(_Z^5-2*_Z+2, index = 3)
Sumas y productos
Maple V es capaz de calcular sumas finitas y series, y productos finitos e infinitos:
| > | Sum(k^2,k); |
| > | value(%); |
| > | sum(1/k!,k=0..infinity); |
| > | Product(k^2,k=1..4); |
| > | value(%); |
Visualización
Maple V permite realizar gráficos bidimensionales y tridimensionales. Además, podemos representar ecuaciones explícitas, implícitas, paramétricas y conjuntos de datos. También podemos representar funciones con discontinuidades.
| > | restart; |
Gráficos 2D
Simples Gráficos
Para generar gráficos 2D usaremos el comando plot.
| > | plot(sin(x),x=-2*Pi..2*Pi); |
![[Plot]](minicursoimag/minicurso_49.gif)
Para modificar los gráficos, podemos usar el menú contextual que aparece al pulsar el botón derecho del ratón o bien al pulsar sobre la ventana gráfica mediante los botones que aparecen en el menú de gráficos. También podemos indicar las distintas opciones dentro del comando plot.
| > | ?plot[options]; |
Funciones con Discontinuidades
Para indicar a Maple que la función que vamos a representar presenta discontinuidades usaremos la opción discont=true.
| > | plot(tan(x),x=-2*Pi..2*Pi,y=-4..4,discont=true,title=`Representación de Tan(x)`); |
![[Plot]](minicursoimag/minicurso_50.gif)
Representación Conjunta de distintas funciones
| > | plot({x,x^2,x^3,x^4,x^5},x=-10..10,y=-10..10); |
![[Plot]](minicursoimag/minicurso_51.gif)
Observación: Hemos usado en el gráfico anterior el menú contextual para cambiar el grosor de los gráficos.
Representación Polar de curvas
| > | plot(sin(3*t),t=0..Pi,coords=polar); |
![[Plot]](minicursoimag/minicurso_52.gif)
Gráficos 3D
Representación de Superficies
| > | plot3d(sin(x*y),x=-2..2,y=-2..2); |
![[Plot]](minicursoimag/minicurso_53.gif)
Representación Paramétrica de Superficies
| > | plot3d([sin(t),cos(t)*sin(u),sin(u)],t=-Pi..Pi,u=-Pi..Pi); |
![[Plot]](minicursoimag/minicurso_54.gif)
Representación Esférica de Superficies
| > | plot3d(1,t=0..2*Pi,p=0..Pi,coords=spherical); |
![[Plot]](minicursoimag/minicurso_55.gif)
Animaciones
Maple V puede realizar animaciones de gráficos bidimensionales y de superficies.
| > | with(plots); |
Warning, the name changecoords has been redefined
![]()
![]()
![]()
![]()
| > | animate(sin(x*t),x=-10..10,t=1..2,frames=50); |
![[Plot]](minicursoimag/minicurso_61.gif)
| > | animate3d(cos(t*x)*sin(t*y),x=-Pi..Pi,y=-Pi..Pi,t=1..2); |
![[Plot]](minicursoimag/minicurso_62.gif)
Gráficos Especiales
El paquete plots contiene rutinas para producir distintos tipos de gráficos especiales, incluyendo mapas topográficos, mapas de densidades y representaciones conformes de funciones complejas.
| > | with(plots); |
![]()
![]()
![]()
![]()
| > | implicitplot3d(x^3+y^3+z^3+1=(x+y+z+1)^3,x=-2..2,y=-2..2,z=-2..2,grid=[13,13,13]); |
![[Plot]](minicursoimag/minicurso_68.gif)
Composición de Gráficos
Los comandos display y display3d permiten la creación de composición de gráficos.
Cuando asignamos un nombre a un gráfico, se omite el gráfico (debemos utilizar en lugar de punto y coma, dos puntos para omitir el output que muestra la estructura del gráfico). Para representar el gráfico asignado hay que utilizar el comando display o display3d. El uso de estos comandos también nos permite representar conjuntamente distintos gráficos.
| > | with(plots); |
![]()
![]()
![]()
![]()
En este primer ejemplo, crearemos mediante una representación conforme una rejilla. Usando el comando display mostraremos conjuntamente la rejilla y la función seno.
| > | c:=coordplot(cartesian,colour=GREY): |
| > | d:=plot(2*sin(3*x),x=-2*Pi..2*Pi,y=-2*Pi..2*Pi,color=RED): |
| > | display([c,d],view=[-2*Pi..2*Pi,-5..5],axes=NORMAL); |
![[Plot]](minicursoimag/minicurso_74.gif)
También es posible combinar gráficos con etiquetas de texto:
| > | p:=plot(sin(x),x=-Pi..Pi): |
| > | t1:=textplot([Pi/2,1,`Máximo Local`],align=ABOVE): |
| > | t2:=textplot([-Pi/2,-1,`Mínimo Local`],align=BELOW): |
| > | display({p,t1,t2}); |
![[Plot]](minicursoimag/minicurso_75.gif)
Paquetes específicos.
Álgebra Lineal
| > | restart; |
Introducción
Maple V proporciona al usuario un amplio abanico de paquetes especiales relacionados con Estadística, Teoría de Números, Teoría de Grafos... y uno especialmente diseñado para la enseñanza de Análisis a los estudiantes.
Existen distintos procedimientos para cargar un paquete:
Carga de todas las funciones contenidas en el paquete: with(nombre_paquete);
| > | with(stats); |
Carga de algunas funciones del paquete: with(nombre_paquete,rutina1,rutina2,...,rutinaN);
| > | with(DEtools,odeadvisor); |
Carga y uso (a la vez) de una sola rutina: nombre_paquete[rutina](...);
| > | finance[cashflows]([100, 200, 50], 0.1); |
Uno de los paquetes más usados es el paquete de álgebra lineal, linalg. Este paquete contiene comandos para la manipulación de matrices y vectores.
| > | with(linalg); |
Warning, the protected names norm and trace have been redefined and unprotected
![]()
![]()
![]()
![]()
![]()
![]()
Operaciones Matriciales
Un array es una generealización de la estructura matricial de datos. La conversión entre arrays y matrices es automática; por ello, cuando creamos un array podemos utilizarlo como una matriz.
Definamos una matriz numérica 3 x 3 mediante el comando array.
| > | M1:=array([[1/2,-1/3,2],[-5,14/3,9],[0,11,-5/6]]); |
Para mostrar una matriz, usaremos los comandos print o evalm.
| > | print(M1); |
| > | evalm(M1); |
Para calcular la inversa tenemos el comando inverse:
| > | inverse(M1); |
Definimos a continuación una matriz con valores simbólicos. En esta ocasión nos serviremos del comando matrix con una variación sobre la sintaxis habitual:
| > | M2:=matrix(3,3,[1/2,0,-2,sin(theta),1,phi^2,0,phi-1,3/4]); |
Para multiplicar las matrices M1 y M2 tenemos el comando multiply :
| > | M3:=multiply(M1,M2); |
Calculemos el determinante de esta última matriz:
| > | det(M3); |
El paquete linalg contiene definiciones de matrices especiales como la matriz de Hilbert o la matriz de Vandermonde:
| > | hilbet(4); |
| > | vandermonde([s,t,u,v,w]); |
Operaciones con Vectores
Veamos a continuación algunos de los comandos para la creación y manipulación de vectores dentro del entorno de Maple V:
| > | v1:=vector([1,1,1]); |
| > | v2:=vector([1,0,0]); |
Calculemos el ángulo determinado por los dos vectores anteriores:
| > | angle(v1,v2); |
También podemos calcular el producto escalar y el producto vectorial de ambos vectores:
| > | dotprod(v1,v2); |
| > | crossprod(v1,v2); |
Cuando los elementos del vector son funciones, tenemos la posibilidad de manipular de la misma manera todos los elementos del vector, de la misma manera que haríamos con una función:
| > | diff_vector:=vector([sin(x),cos(x),sin(x)*cos(x)]); |
| > | map(diff,diff_vector,x); |
Cálculo Infinitesimal
| > | restart; |
Límites
Calculemos el límite de una función racional cuando x se aproxima al valor 1.
| > | f:=(x^2-2*x+1)/(x^4+3*x^3-7*x^2+x+2); |
| > | Limit(f,x=1); |
| > | value(%); |
Cuando el límite en un punto no se encuentra definido, siempre podemos recurrir al cálculo de límites laterales:
| > | limit(tan(x),x=Pi/2); |
| > | limit(tan(x),x=Pi/2,left); |
| > | limit(tan(x),x=Pi/2,right); |
Derivación e Integración
Maple V, como manipulador algebraico, permite calcular derivadas e integrales de manera simbólica:
| > | diff(sin(x)*x,x); |
| > | int(cos(x),x); |
| > | int(sin(x),x=0..Pi); |
Ahora podemos derivar una expresión, integrar el resultado y comparar la expresión inicial con la final:
| > | f:=x*sin(a*x)+b*x^2; |
| > | df:=diff(f,x); |
| > | int(df,x); |
| > | simplify(%); |
Podemos realizar integrales definidas:
| > | int(df,x=1..2); |
E incluso integrales mucho más complejas:
| > | f:=exp(-x^2); |
| > | Int(f,x); |
| > | value(%); |
En caso que Maple V no sepa resolver simbólicamente la integral, podemos usar el comando evalf para obtener una aproximación numérica.
| > | int(exp(-x^3),x=0..1); |
| > | evalf(%); |
Estudiemos otro ejemplo:
| > | f:=exp(-a*t)*ln(t); |
| > | int(f,t=0..infinity); |
Vemos cómo la solución simbólica consiste en un límite, cuyo valor final depende de los distintos valores que puede tomar el parámetro a. Si asumimos ciertas condiciones sobre el parámetro a, podemos obtener una expresión más concreta:
| > | assume(a>0); |
| > | int(f,t=0..infinity); |
Observación: El símbolo ~ indica que el parámetro a tiene en su memoria ciertas suposiciones. Para eliminar las posibles suposiciones que tenga el símbolo a debemos escribir:
| > | a:='a'; |
Ecuaciones Diferenciales
Maple V puede resolver ecuaciones diferenciales ordinarias simbólica y numéricamente:
| > | dsolve(diff(y(x),x)=y(x)); |
| > | edsist:=diff(y(x),x)=z(x),diff(z(x),x)=y(x); |
| > | dsolve({edsist,y(0)=0,z(0)=1},{y(x),z(x)}); |
Las opciones del comando dsolve permiten especificar tres posibles metodologías para resolver ecuaciones diferenciales: métodos numéricos, métodos de series y métodos de Laplace:
| > | ecuac:={diff(y(t),t)=x(t)+y(t),diff(x(t),t)=y(t),x(0)=2,y(0)=1}; |
| > | result:=dsolve(ecuac,{x(t),y(t)},type=numeric); |
El resultado es un procedimiento de Maple (es decir, una función implementada con lenguaje de programación de Maple) que puede ser representado gráficamente o evaluado en puntos concretos:
| > | result(0); |
| > | result(1); |
| > | result; |
Desarrollos de Taylor
| > | restart; |
Vamos a calcular la aproximación de Taylor de orden 8 en x = 0 de cierta función:
| > | f:=sin(4*x)*cos(x); |
| > | fs1:=taylor(f,x=0,8); |
Podemos comparar la función inicial con la aproximación gráficamente:
| > | plot({f,convert(fs1,polynom)},x=-1..1,-2..2,title=`sin(4x) cos(x) vs. Desarrollo de Taylor`); |
![[Plot]](minicursoimag/minicurso_135.gif)
El orden del desarrollo de Taylor puede especificarse como opción del comando taylor o bien usando la variable global Order. Cambiaremos el orden, y estudiaremos cómo varía el gráfico con esta nueva aproximación:
| > | Order:=12; |
| > | fs2:=taylor(f,x=0); |
| > | plot({f,convert(fs2,polynom)},x=-1..1,-2..2,title=`sin(4x) cos(x) vs. Desarrollo de Taylor de orden 12`); |
![[Plot]](minicursoimag/minicurso_138.gif)
Por último, crearemos una animación para estudiar la aproximación de f por distintos desarrollos de Taylor:
| > | taylordisplay:=proc(func,xpoint,n::posint,xrange::range)
local x,p,q,i; if type(xpoint,name) then x:=xpoint; elif type(xpoint,name=constant) then x:=lhs(xpoint); fi; p:=plots[display]([seq(plot(convert(taylor(func,xpoint,i),polynom),x=xrange,color=blue,args[5..nargs]),i=1..n)],insequence=true); q:=plot(func,x=xrange,color=red,args[5..nargs]); plots[display]([p,q]); end: |
Veamos un par de ejemplos-animaciones. Una vez obtenido el output debemos pulsar sobre él y seleccionar el botón "Play" del menú de animaciones:
| > | taylordisplay(exp(x),x=0,10,-6..6); |
![[Plot]](minicursoimag/minicurso_139.gif)
| > | taylordisplay(sin(x),x=2*Pi,26,-3*Pi..3*Pi,view=-2..2); |
![[Plot]](minicursoimag/minicurso_140.gif)
| > |
Student Package
Este paquete permite mostrar paso a paso cómo se resuelven los distintos problemas matemáticos que se plantean a los alumnos:
Rectas tangentes
| > | restart; |
| > | with(student); |
![]()
![]()
La pendiente de la recta tangente a una curva en x=a se calcula como el límite del cociente incremental:
| > | f:=x->x^2+3; |
| > | slope([x,f(x)],[a,f(a)]); |
| > | Limit(%,x=a); |
Para calcular el límite, en primir lugar debemos simplificar la expresión racional (dado que presenta una indeterminación), y luego realizar el límite:
| > | normal(%); |
| > | value(%); |
En el caso particular que queramos calcular la pendiente de la recta tangente a la curva dada por f en x=3, simplemente debemos sustituir en la expresión anterior a=3.
| > | subs(a=3,%); |
Para mostrar gráficamente la tangente podemos usar el comando showtangent:
| > | showtangent(f(x),x=3,x=0..4); |
![[Plot]](minicursoimag/minicurso_150.gif)
Ahora podríamos crear un programa que representara las rectas tangentes a f(x) en los puntos x= 0.8+0.2*i, cuando i toma valores enteros de 1 a 11. Usaremos el comando display con la opción insequence=true para obtener la animación:
| > | for i to 11 do
p||i:=showtangent(f(x),x=0.8+0.2*i,x=0..4,colour=black) od: |
| > | plots[display]([p||(1..11)],insequence=true); |
![[Plot]](minicursoimag/minicurso_151.gif)
| > |
Área bajo la curva
El Student Package contiene un conjunto de funciones que pueden resultar útiles para el aprendizaje de Cálculo Infinitesimal por parte de los alumnos.
| > | restart; |
| > | with(student); |
![]()
![]()
Consideremos el área de la curva y=sin(x), de x=0.1 a x=1. Podemos aproximarla mediante 4 rectángulos usando la función leftbox (contenida en el Student Package).
| > | leftbox(sin(x),x=0..1,4); |
![[Plot]](minicursoimag/minicurso_155.gif)
La parte coloreada representa la aproximación al área bajo la curva. Si aumentamos el número de rectángulos (disminuyendo su base) parece ser que obtendremos mejores aproximaciones. Realicemos algunas pruebas:
| > | leftbox(sin(x),x=0..1,8); |
![[Plot]](minicursoimag/minicurso_156.gif)
| > | leftbox(sin(x),x=0..1,16); |
![[Plot]](minicursoimag/minicurso_157.gif)
Ahora realizaremos las aproximaciones numéricamente. Calcularemos la suma de las áreas de los rectángulos que hemos empleado en cada caso:
| > | leftsum(sin(x),x=0..1,4); |
| > | value(%); |
| > | leftsum(sin(x),x=0..1,8); |
| > | value(%); |
| > | leftsum(sin(x),x=0..1,16); |
| > | value(%); |
![]()
Veamos cómo varía el valor aproximado cuando aumentamos el número de rectángulos usados. Para ello usaremos un lazo:
| > | for k from 20 to 200 by 20 do
print(evalf(leftsum(sin(x),x=0..1,k))); od; |
Podemos observar cómo las sumas convergen hacia cierto valor 0.457... Calculemos el límite de la suma de rectángulos para un número indeterminado n de rectángulos:
| > | leftsum(sin(x),x=0..1,n); |
| > | limit(%,n=infinity); |
Para comprobar la bondad de esta aproximación, podemos calcular la integral de la curva desde 0.1 hasta 1:
| > | Int(sin(x),x=0..1); |
| > | value(%); |
| > |