Álgebra Lineal
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);
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.
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.
Para calcular la inversa tenemos el comando inverse:
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 :
Calculemos el determinante de esta última matriz:
El paquete linalg contiene definiciones de matrices especiales como la matriz de Hilbert o la matriz de Vandermonde:
| > |
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:
Calculemos el ángulo determinado por los dos vectores anteriores:
También podemos calcular el producto escalar y el producto vectorial de ambos vectores:
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
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); |
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,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:
Ahora podemos derivar una expresión, integrar el resultado y comparar la expresión inicial con la final:
Podemos realizar integrales definidas:
E incluso integrales mucho más complejas:
En caso que Maple V no sepa resolver simbólicamente la integral, podemos usar el comando evalf para obtener una aproximación numérica.
Estudiemos otro ejemplo:
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:
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:
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:
Desarrollos de Taylor
Vamos a calcular la aproximación de Taylor de orden 8 en x = 0 de cierta función:
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`); |
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:
| > |
plot({f,convert(fs2,polynom)},x=-1..1,-2..2,title=`sin(4x) cos(x) vs. Desarrollo de Taylor de orden 12`); |
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); |
| > |
taylordisplay(sin(x),x=2*Pi,26,-3*Pi..3*Pi,view=-2..2); |