MAPLE V.5 David Miguel del Río



Estos apuntes tienen como objetivo el poder utilizar MAPLE V.5 con rapidez. Se ha hecho especial hincapié en los aspectos algebraicos (ecuaciones, sistemas y funciones) que puede desarrollar MAPLE No obstante, MAPLE tiene muchas otras posibilidades. A pesar de esto, espero que este manual sea de utilidad.

Puedes hacer consultas o sugerencias en: dmdelrio@hotmail.com

Tengo que agradecer a Ismael su interés en este tipo de sistemas de cálculo simbolico ya que, sin saberlo, fue el mayor promotor de este trabajo.

INTRODUCCIÓN

HOJAS DE TRABAJO

Cuando inicies una sesión de MAPLE aparecerá una hoja de trabajo(worksheet ) en blanco, en la que verás un signo mayor que precedido de un corchete abierto([> ). El corchete indica un área de trabajo y el signo > indica una zona de entrada. Todo lo que teclees ahí aparecerá en rojo y será interpretado como un comando de MAPLE.

TIPOS DE REGIONES

Hay varios tipos de regiones:

Las diferentes regiones pueden unirse utilizando la tecla F4, y separarse con F3

AYUDAS

Lo primero que debes saber es cómo llamar a la ayuda de MAPLE. Es tan sencillo como teclear ? en una línea de comando y pulsar [INTRO]

> ?

Si lo que ocurre es que tienes dudas sobre cuál es la sintaxis de un determinado comando, teclea ? y detrás el nombre del comando, después pulsa [INTRO], por ejemplo:

> ?factor

nos dará información acerca del comando factor

Se puede obtener una ayuda general de todas las posibilidades de MAPLE con el comando:

> ?index

COMANDOS

SINTAXIS GENERAL DE UN COMANDO

Como norma general un comando consta de un palabra clave seguida de unos argumentos que se escribirán englobados en un paréntesis separados por comas. Por ejemplo:

> solve(a*b-c,b);

[Maple Math]

El comando solve resuelve la ecuación del polinomio (igualado a 0) que aparace como primer argumento en el paréntesis despejando la variable que aparecere como segundo argumento en el paréntesis. Para ver con más detalle cómo se utiliza este comando teclea:

> ?solve

Hay comandos que no tienen este tipo de sintaxis, como son las operaciones básicas, la potenciación, el factorial.

FINALIZADOR DE UN COMANDO

Para que el comando sea ejecutado será necesario escribir un finalizador y pulsar [INTRO]. Hay dos tipos de finalizador de comando:

Por ejemplo, el comando para factorizar enteros es ifactor (i por integer y factor por factorizar):

> ifactor(180);

[Maple Math]

> ifactor(180):

Hay comandos que no tienen este tipo de sintaxis, como son las operaciones básicas, la potenciación, el factorial. Puedes ver algunos de ellos tecleando:

> ?index,expression

COMANDOS ENCADENADOS

Es posible encadenar los comando en una misma línea utilizando los separadores entre ellos, por ejemplo:

> 2+3; 5-3;

[Maple Math]
[Maple Math]

También podemos separarlos con una coma, en cuyo caso la salida será de esta manera:

> 2+3 , 5-3;

[Maple Math]

Si no deseamos visualizar la salida utilizaremos los dos puntos:

> 2+3 : 5-3:

simplify Y expand

Dos comandos muy utilizados son simplify y expand.

El comando simplify se utiliza para simplificar expresiones, como quebrados, potencias, etc.

> (x^3-3*x+2)/(x^3+3*x^2-4)=simplify((x^3-3*x+2)/(x^3+3*x^2-4));

[Maple Math]

El comando expand se utiliza para expandir expresiones. Por ejemplo:

> (a+b)^3 = expand((a+b)^3);

[Maple Math]

MAYÚSCULAS Y MINÚSCULAS

MAPLE es case sensitive, es decir, distingue entre mayúsculas y minúsculas . Por esto deberemos tener especial cuidado al escribir variables. Por ejemplo: para MAPLE las variables Numero y numero son distintas.

En general, los comandos se escriben en minúscula.

Reservaremos las mayúsculas para las funciones y procedimientos definidos por nosotros.

EXPRESIÓN INERTE

MAPLE tiene varios comandos que, según se escriban con la primera letra en mayúscula o minúscula, hacen diferenetes acciones. Por ejemplo:

Para hallar un límite se utiliza el comando limit, pero si escribimos Limit lo que aparecerá será la expresión del límite en su notación convencional, que es lo que se denomina expresión inerte:

> Limit(x/(x^2-1),x=infinity);

[Maple Math]

> limit(x/(x^2-1),x=infinity);

[Maple Math]

Esta capacidad de MAPLE se puede utilizar para escribir fórmulas de la siguiente manera:

> Limit(x/(x^2-1),x=infinity)=limit(x/(x^2-1),x=infinity);

[Maple Math]

Otros comandos con capacidad de escribir la expresión inerte son, por ejemplo:

Sum y sum (sumatorio)

Product y product (productorio)

Diff y diff (para el cáculo de derivadas)

Int y int (calcula la integral indefinida de una función).

PAQUETES DE COMANDOS Y LIBRERÍAS

MAPLE guarda en su memoria los comandos más usuales, el resto se guarda en paquetes (packages) que será preciso cargar cuando vayamos a utilizarlos. Para ver el listado de paquetes disponibles teclea:

> ?index,packages

CARGANDO UN PAQUETE

Si necesitamos cargar un paquete concreto utilizaremos el comando with indicando el nombre del paquete. El resultado por pantalla es distinto según el finalizardor: con punto y coma se listan los comando cargados, con dos puntos el paquete se carga pero no se nos indica nada.

> with(linalg);

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

> with(linalg):

Si utilizamos un comando de un paquete no cargado MAPLE no hará nada, simplemente devolverá un eco del comando escrito.

DESCARGANDO UN PAQUETE

Si queremos descargar un paquete (lo que liberará memoria) utilizaremos el comando:

> restart;

LIBRERÍAS

Determinados comandos muy poco usados no están contenidos ni en el núcleo de MAPLE ni en un paquete determinado. En vez de esto están en una librería general. Se pueden cargar con el comando readlib.

Por ejemplo, el comando discont, que calcula puntos de discontinuidad de una función, se carga de la siguiente manera:

> readlib(discont);

[Maple Math]

> discont(1/(x^2-1),x);

[Maple Math]

OPERACIONES NUMÉRICAS BÁSICAS

SUMA, RESTA, MULTIPLICACIÓN, DIVISIÓN Y POTENCIACIÓN

Se utilizan los signos comunes: +, - , *, / y ^ además de los paréntesis (reiterados si es necesario). MAPLE respeta la prioridad de las operaciones. Por ejemplo:

> 2+3*4^2;

[Maple Math]

Para operaciones básicas no se utilizarn corchetes ni llaves, únicamente paréntesis:

> (((2+3)*4)^2)/10;

[Maple Math]

FACTORIALES

El factorial se indica con el signo admiración cerrada< !

> 45!;

[Maple Math]

NÚMEROS ALEATORIOS

Podemos obtener números aleatorios con el comando rand.

Sin argumento, rand() devuelve un número entero aleatorio de 12 dígitos:

> rand();

[Maple Math]

Pero podemos elegir el rango entre los que será elegido el número aleatorio:

> n:=rand(50..60):n();

[Maple Math]

Es interesante ver la generación de números aleatorios (semilla, etc). Teclea:

> ?randomize

EL COMODÍN %

El código % indica que se va a utilizar el último resultado obtenido, aunque no haya salido en pantalla. Por ejemplo:

> 3+2:

> %!;

[Maple Math]

El uso de % se puede reiterar hasta tres veces: %% se referirá al penúltimo resultado y %%% al antepenúltimo:

> 2+2:

> 5-2:

> 2:

> %+%%+%%%;

[Maple Math]

VARIABLES

Una variable puede llamarse como queramos, siempre que no utilicemos como nombre de la variable el de un comando de MAPLE. Tampoco podemos empezar el nombre de la variable con números e interesa que no incluyamo códigos extraños (acentos, eñe, etc). Recordemos, también, que MAPLE distingue entre mayúsculas y minúsculas.

ASIGNACIÓN DE VARIABLES

Para asignar valor a una variable se utiliza la combinación dos puntos e igual :=, por ejemlo:

> a:=13;

que devuelve como eco la asignación a la variable a del valor 13.

[Maple Math]

Si no queremos el eco debemos usar el terminados dos puntos.

> a:=25:

Ahora no hay eco y, además a ha cambiado de valor. Esto podemos comprobarlo preguntando el valor de a:

> a;

[Maple Math]

BORRADO DE VARIABLES

Para borar el valor de una variable basta con igualarla a sí misma entre comillas simples:

> a:='a';

[Maple Math]

Si lo que queremos es borrar todas las variables asignadas podemos utilizar el comando restart

> restart;

EJEMPLO Y COMANDO PRINT

Vamos a calcular el capital final que se retira después de tener 8 años 3000 euros al 4%:

> ci := 3000:

> t := 8:

> redito := 4:

> cf:=ci*(1+redito/100)^t;

[Maple Math]

Para poner la salida de forma más legible usaremos los comandos print y el ya conocido evalf:

> print(`El capital final es de `,evalf(cf));

[Maple Math]

El comando print permite poner entre paréntesis lo que va a salir por pantalla. Si queremos que sea texto se encerrará entre los acentos agudos (^) que aparecen en la tecla a la derecha de la P (junto con [ y ^). Las diferentes partes de la salida se separan con comas. Como único inconveniente de print decir que estas comas separadoras aparecen en la salida por pantalla.

CONVERSIÓN DE TIPOS

A veces puede ser útil convertir una variable de un tipo a otro. Esto se realiza con el comando convert, que recibe dos argumentos: la variable y el tipo final.

Para ver un listado de los tipos de variables teclea:

> ?convert

o, también:

> ?type

Por ejemplo:

> convert(117,binary);

[Maple Math]

TIPOS DE ESTRUCTURAS

CONJUNTOS (SET)

DEFINICIÓN

Por extensión

Un conjunto se define por extensión enumerando sus elementos entre llaves:

> dias:={lunes,martes,miercoles,jueves,viernes,sabado,domingo};

[Maple Math]

Por comprensión

Se define un conjunto por comprensión dando una ley de formación. En MAPLE se usa el signo dolar ($):

> pares:={2*i$i=1..10};

[Maple Math]

OPERACIONES

Las operaciones básicas con conjuntos son la union, intersección y diferencia, que en MAPLE se hacen con los operadores union, intersect y minus, respectivamente:

> A:={1,2,3,4,5,6,7,8,9,10} : B:={2,3,5,7,11,13}:

> A union B;

[Maple Math]

> A intersect B;

[Maple Math]

> A minus B;

[Maple Math]

LISTAS

Las listas se indican entre corchetes. Se diferencian de los conjuntos en que en la listas se respeta el orden. Al igual que los conjuntos, las listas pueden definirs por extensión y por comprensión (utilizando el signo $)

> vocales:=[a,e,i,o,u];

[Maple Math]

> pares:=[2*i$i=1..10];

[Maple Math]

MATRICES

Para definir una matriz (o un vector) utilizamos el comando array, indicando el número de filas y despés el de columnas:

> A:=array(1..2,1..3);print(A);

[Maple Math]
[Maple Math]

Para llenar el array iremos asignando valores de la siguiente manera:

> A[1,1]:=1: A[2,1]:=k : A[1,3]:=x^2:print(A);

[Maple Math]

En el momento de crear el array pueden asignarse los valores de la siguiente manera:

> B:=array(1..2,1..2,[[1.1,1.2],[2.1,2.2]]);

[Maple Math]

MATRICES ESPECIALES

Hay ciertas matrices que pueden definirse de forma directa:

- La matriz nula con el parámetro sparse:

> N:=array(sparse,1..2,1..3);print(N);

[Maple Math]
[Maple Math]

- La matriz simétrica con el parámetro symmetric. Basta con llenar la mitad de la matriz, MAPLE rellenará automáticamente el resto:

> S:=array(symmetric,1..3,1..3): S[1,1]:=1: S[1,2]:=2: S[1,3]:= 3: S[2,2]:=4: S[2,3]:=5: S[3,3]:=6:print(S);

[Maple Math]

- De forma similar se rellena una matriz antisimétrica, con el comando antisymmetric:

- Una matriz diagonal se indica con el parámetro diagonal (a la que no podemos llamar D, porque es el comando función derivada):

> Dg:=array(diagonal,1..3,1..3);print(Dg);

[Maple Math]
[Maple Math]

- La matriz identidad se indica con el parámetro identity:

> Id:=array(identity,1..3,1..3);print(Id);

[Maple Math]
[Maple Math]

PROGRAMACIÓN

En MAPLE podemos definir procedimientos que realicen ciertas operaciones y llamarlos cuando los necesitemos. Vamos a ver un ejemplo sencillo.

Supongamos que en una cierta hoja de trabajo vamos a necesitar calcular constantemente la velocidad final con la que llega al suelo un cuerpo que cae, en caída libre, desde h metros.

Vamos a definir el procedimiento vfinal:

> vfinal:=proc(h)

> sqrt(2*9.8*h):

> end:

Aquí podemos ver:

1.- hemos asignado al procedimiento el nombre vfinal, ahí el uso de :=

2.- la palabra clave para definir un procedimiento es proc. Después se ponen, entre paréntesis y separadas por comas las variables que mandamos desde el exterior y que serán usadas dentro del procedimiento

3.- en este caso concrero el procedimiento consta de una sóla línea que calcula el valor buscado

4.- el procedimiento termina con el comando end:

Para usar este procedimiento, por ejemplço si la altura fuera 10, haríamos:

> vfinal(10);

[Maple Math]

ARGUMENTOS DEL PROCEDIMIENTO

Podemos comprobar qué tipo de datos llegan al procedimiento declarándolos. De esta forma si llega un dato de un tipo no esperado MAPLE devolverá un error.

> restart:

> TERNAP:=proc(p::integer,q::integer)

> local x,y,z:

> if igcd(p,q)<>1 then print(`los números deben ser primos entre si`)

> else x:=2*p*q: y:=abs(p^2-q^2): z:=p^2+q^2: print(x,y,z) fi:

> end:

Este procedimiento calcula ternas pitagóricas. Recibe como parámetros dos número, p y q, que obligamos sean enteros.

> TERNAP(2,6);

[Maple Math]

> TERNAP(2.3,5);

Error, TERNAP expects its 1st argument, p, to be of type integer, 
but received 2.3

También es posible dejar el procedimiento sin entradas, en cuyo caso se dejan los paréntesis vacíos.

VARIABLES

Las variables usadas dentro del procedimiento pueden ser locales o globales.

Una variable local se declara con el comando local seguido del nombre de las variables separados por comas. Una variable local sólo tiene existencia dentro del procedimiento.

Una variable global se declara con el comando global seguido del nombre de las variables separados por comas. Una variable global tiene validez una vez hayamos salido del procedimiento.

RECURSIVIDAD

Un procedimiento puede llamar a otro e incluso llamarse a sí mismo. En este último caso es necesario tener cuidado para poner la condición de salida. Es clásico el ejemplo del factorial de un número por su elegancia:

> FACT:=proc(n::integer)

> if (n<=0) then 1 else n*FACT(n-1) fi

> end:

> FACT(500);

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

En el caso de que la recursividad alcance muchos ciclos es posible que se sature le memoria. Para evitar esto pondremos como segunda línea option remember; que hace que MAPLE construya una tabla con los valores ya calculados.

CONDICIONALES

if then else fi

La sentencia condicional se inicia con if que probará si se cumple una cierta condición, por ejemplo a=b. Si esta condición se cumple se ejecutarán los comando escritos después de then, en caso contrario se ejecutarán los comandos escritos después de else (es parte del condicional es opcional). El condicional termina con fi (que es if al revés).

> DISCRIM1:=proc(a,b,c)

> if (b^2-4*a*c<0) then print(`Discriminante negativo`) fi

> end:

> DISCRIM1(1,2,3);

[Maple Math]

> DISCRIM2:=proc(a,b,c)

> local d:

> d:=b^2-4*a*c:

> if d<0 then print(`No tiene soluciones reales`)

> else print(`Si tiene soluciones reales`)

> fi

> end:

> DISCRIM2(3,4,1);

[Maple Math]

Las condiciones dentro del if se pueden conectar con and, or y not.

CONDICIONALES ANIDADOS

Un condicional puede estar dentro de otro, pero en este caso como alternativa al then no se pone else sino elif.

> DISCRIM3:=proc(a,b,c)

> local d:

> d:=b^2-4*a*c:

> if d<0 then print(`No tiene soluciones reales`)

> elif d=0 then print(`Tiene solución única`)

> else print(`Tiene dos soluciones`)

> fi

> end:

> DISCRIM3(1,2,1);

[Maple Math]

BUCLES

En general la estructura de un bucle es for variable to tope do sentencias do;

En este caso la variable contadora empieza en 1 y va aumentando de 1 en 1 hasta alcanzar el tope:

> for i to 4 do i^2 od;

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

Si necesitamos empezar en un valor distindo de 1 utilizaremos from, y si además, el salto no es de 1 en 1 usaremos by:

> for j from 10 to 7 by -1 do 2*j od;

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

BUCLES SOBRE CONJUNTOS O LISTAS

Para que el efecto de un bucle se ejecute sobre todos los elementos de una lista o un conjunto utilizamos el comando in:

> for a in {5,10,15,20} do a^2 od;

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

BUCLES CONDICIONALES: while

Podemos hacer que un bucle se ejecute mientras se cumpla una determinada condición. Esto se consigue con el comando while:

> for n while n<=4 do n^2 od;

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

NÚMEROS ENTEROS

ARITMÉTICA EXACTA

MAPLE permite trabajar con enteros de enorme tamaño. Por ejemplo: calcular el número de ceros en los que acaba el factorial de 50:

> 50!;

[Maple Math]

Para saber el número total de dígitos que tiene este número utilizamos el comando length

> length(%);

[Maple Math]

Hemos utilizado el comodín % para designar el último resultado obtenido.

Podíamos escribir el resultado hallado con el comando print

> print(`El número de dígitos del factorial de 50 es`,%);

[Maple Math]

DIVISIÓN ENTERA Y ARITMÉTICA MODULAR

DIVISIÓN ENTERA: iquo, irem

Podemos hallar el cociente y el resto de una división de enteros utilizando los comandos iquo (integer quotient), para obtener el cociente, y irem (integer remainder), para obtener el resto. Por ejemplo si dividimos 147 entre 11:

> print(`147 entre 11 cabe a`,iquo(147,11),`y restan`, irem(147,11));

[Maple Math]

ARITMÉTICA MODULAR: mod

Se pueden hacer cálculos de congruencias en cualquier módulo utilizando el operador mod:

> 12 mod 4;

[Maple Math]

Por ejemplo, podemos tratar de ver si Z[4] es un Dominio de Integridad (anillo sin divisores de cero) hallando su tabla de multiplicación: ([0], [1], [2], [3])x([0],[1],[2],[3])

> A:=[0,1,2,3] ; B:=[0,1,2,3];

> for i to 4 do for j to 4 do print(A[i],B[j],A[i]*B[j] mod 4) od od;

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

Podemos ver como el producto 2*2 = 0 en Z[4], luego Z[4] no es un Dominio de Integridad

NÚMEROS PRIMOS

MAPLE permite utilizar números primos con gran facilidad.

Podemos saber si un número es primo con el comando booleano isprime:

> isprime(13453);

[Maple Math]

Podemos obtener los primos anterior y siguiente de un número dado con los comandos prevprime y nextprime:

> prevprime(13453),nextprime(13453);

[Maple Math]

También podemos obtener el i-ésimo primo de la tabla de primos con el comando ithprime:

> ithprime(34);

[Maple Math]

En el paquete numtheory hay muchos otros comandos relacionados con primos.

FACTORIZACIÓN, DIVISORES, MCD Y MCM

FACTORIZACIÓN ENTERA

Para factorizar un entero en producto de primos se utiliza el comando ifactor

> ifactor(2732730);

[Maple Math]

DIVISORES

MAPLE permita hallar todos los divisores de un número entero, para lo cual hay que cargar el paquete numtheory

> with(numtheory):

> divisors(36);

Warning, new definition for B

Warning, new definition for order

[Maple Math]

Fíjate que han salido descolocados...

También podemos saber cuántos divisores son en total con el comando tau del paquete numtheory

> print(`36 tiene`,tau(36),`divisores`);

[Maple Math]

Un consejo: si no se va a volver a utilizar los comandos de un paquete conviene descargarlo de la memoria:

> restart:

MCD Y MCM

También podemos hallar el Máximo Común Divisor y el mínimo común múltiplo:

Para hallar el MCD se utiliza el comando igcd (integer great common divisor) y para hallar el mcm se utiliza el comando ilcm (integer l east common multiple). Podemos mejorar la salida con el comando print

> print(`MCD(126,140)=`,igcd(126,140));

> print(`mcm(126,140)=`,ilcm(126,140));

[Maple Math]
[Maple Math]

MCD: Algoritmo de Euclides

El Algoritmo de Eucides permite calcular el MCD de dos números a y b utilizando un procedimiento recursivo, que podemos programar.

El procedimiento se basa en el siguiente LEMA: si a, b, c y r son enteros no nulos tales que a=bc+r, entonces el MCD(a,b)=MCD(b,r).

Este LEMA permite hacer un encadenamiento hasta encontrar r=0, en cuyo caso el MCD será b.

El procedimiento es el siguiente:

ALGORITMO DE EUCLIDES PARA CALCULAR EL MCD DE DOS NÚMEROS

> MCD:=proc(a::integer,b::integer)

> local r:

> if (a<b) then MCD(b,a) fi:

> r:=irem(a,b):

> if r=0 then RETURN(b)

> else MCD(b,r)

> fi

> end:

Comentarios sobre el procedimiento:

1.- El procedimiento recibe dos variables, a y b, que se pide sean números enteros

2.- Como se va a realizar la división "a entre b" necesitamos que a>=b

3.- Si a<b se vuelve a reiniciar el procedimiento cambiando el orden de las variables

4.- Necesitamos calcular el resto entero de a entr b: Usamos el comando irem . Definimos r como variable local

5.- Si el resto r es 0, se ha terminado y el MCD será el valor de b en ese momento

6.- Si r no es 0 volvemos a empezar tomando b en lugar de a y r en lugar de b

Por ejemplo, el MDC(22, 30) es:

> MCD(22,30);

[Maple Math]

Si quieres quitar MCD de la memoria de MAPLE ejecuta el comando restart

EL LEMA DE BEZOUT: propiedad lineal del MCD

El lema de Bezout aplicado a los números enteros establece la Propiedad lineal del MCD: si a y b son dos enteros no nulos, existen dos enteros u y v tales que: ua + vb = MCD(a,b)

Con MAPLE podemos hallar u y v utilizando el comando igcdex

Por elemplo obtener u y v para a=30 y b=45: 30u + 45v = MCD(30,45)

> igcdex(30,45,'u','v'):

u y v quedan en la memoria:

> u,v;

[Maple Math]

NÚMEROS REALES

Ya sabemos que los números reales resultan de la unión de los racionales e irracionales.

NÚMEROS RACIONALES

En el caso de operaciones con quebrados se devuelve el resultado más simplificado.

> 36/30;

[Maple Math]

Si queremos que el quebrado se opere hasta el final podemos hacer dos cosas.

1.- Poner alguno de los números con coma decimal:

> 36/30.0;

[Maple Math]

2.- Utilizar el comando para evaluar en coma flotante: evalf

> evalf(36/30);

[Maple Math]

NÚMEROS IRRACIONALES

RADICALES

En general, si p no es potencia n-ésima, entonces la raíz n-ésima de p es irracional.

Para obtener la raíz cuadrada de un número utilizamos el comando sqrt (square root). Para que se evalúe la raíz utilizamos evalf:

> sqrt(13) = evalf(sqrt(13));

[Maple Math]

Caso de necesitar únicamente la parte entera de la raíz utilizaremos isqrt (integer square root ):

> isqrt(13);

[Maple Math]

Para raíces de índice superior utilizaremos la expresión potencial (elevando al número racional), por ejemplo, la raíz quinta de 13 será:

> 13^(1/5) = evalf(13^(1/5));

[Maple Math]

SIMPLIFICACIÓN DE RADICALES

Como con otras expresiones, los radicales se simplifican con el comando simplify:

> 32^(3/15) = simplify(32^(3/15));

[Maple Math]

RACIONALIZACIÓN DE DENOMINADORES

Utilizaremos el comando rationalize:

> (a-1)/(sqrt(a)-1) = rationalize((a-1)/(sqrt(a)-1));

[Maple Math]

> 1/(sqrt(x)-sqrt(y))+1/(sqrt(x)+sqrt(y))=rationalize(1/(sqrt(x) -sqrt(y))+1/(sqrt(x)+sqrt(y)));

[Maple Math]

NÚMEROS ESPECIALES

EL NÚMERO PI

En MAPLE se escribe Pi y podemos obtenerlo con la precisión que deseemos con evalf, por ejemplo con 50 decimales:

> Pi = evalf(Pi,50);

[Maple Math]

EL NÚMERO e

El número e es, posiblemente, el número más importante en matemáticas superiores. Aparece en muchos procesos de crecimiento, en la desintegración radiactiva, en la fórmula de la catenaria, etc. Podemos obtenerlo a través del siguiente límite:

> Limit((1+1/n)^n,n=infinity) = evalf(limit((1+1/n)^n,n=infinity));

[Maple Math]

En MAPLE se escribe con e minúscula y podemos obtenerlo con exp(1) y la precisión que deseemos:

> e = evalf(exp(1),25);

[Maple Math]

PARTES DE UN NÚMERO REAL

Podemos obtener el signo de un número con signum: obtendremos 1, 0 ó -1:

> signum(-4.13);

[Maple Math]

El valor absoluto de un número se obtiene con abs:

> abs(-0.34);

[Maple Math]

La parte entera de un número se obtiene con trunc y la parte decimal con frac:

> trunc(5.78);frac(5.78);

[Maple Math]
[Maple Math]

Para redondear al entero más próximo utilizamos round:

> round(5.78);

[Maple Math]

Para conseguir todos los decimales que queramos damos, como segundo argumento de evalf, el número de decimales requerido.

> evalf(1/7,50);

[Maple Math]

LOGARITMOS Y EXPONENCIALES

MAPLE calcula de forma directa los logaritmos neperianos con ln() ó log(). Para que se evalue hay que utilizar evalf:

> ln(10) = evalf(ln(10));

[Maple Math]

> Log(10) = evalf(log(10));

[Maple Math]

Para calcular logaritmos en otra base utilizamos el comando log[base](número) :

> log[10](10);

[Maple Math]

El número e se obtiene con exp:

> exp(3) = evalf(exp(3));

[Maple Math]

Podemos utilizar los comandos expand o simplify para desarrollar expresiones con logaritmos y potencias:

> simplify(log(3*a/5*b^2));

[Maple Math]

LOGARITMO NEPERIANO COMO INTEGRAL

El logaritmo neperiano, o natural, de un número real x positivo se define mediante la integral

> L:=x->Int(1/t,t=1..x);

es decir, el logaritmo neperiano de x se puede interpretar como el área bajo la curva 1/t entre 1 y x.

[Maple Math]

> L(1)=evalf(L(1));

[Maple Math]

> L(2)=evalf(L(2));Ln(2)=evalf(ln(2));

[Maple Math]
[Maple Math]

> with(student):middlebox(1/t,t=1..2,100);evalf(middlesum(1/t, t=1..2));restart:

[Maple Plot]
[Maple Math]

TRIGONOMETRÍA

GRADOS Y RADIANES

MAPLE permite convertir de grados a radianes con el comando convert, utilizando como segundo argumento degrees o radians:

> convert(2*Pi/3,degrees);

[Maple Math]

> convert(210*degrees,radians);

[Maple Math]

LÍNEAS TRIGONOMÉTRICAS

Las líneas trigonométricas en MAPLE se corresponden con los comandos: sin, cos y tan, que reciben como argumento el ángulo en radianes:

> sin(3*Pi/2);cos(Pi/4);tan(Pi/3);

[Maple Math]
[Maple Math]
[Maple Math]

Las funciones inversas son: arcsin, arccos y arctan:

> arccos(1/2);

[Maple Math]

MAPLE conoce todas las relaciones entre líneas trigonométricas. Podemos utilizar los comandos simplify y expand para desarrollar una expresión trigonométrica:

> sin(alpha-beta) = expand(sin(alpha-beta));

[Maple Math]

SENO Y COSENO DE LA SUMA Y LA DIFERENCIA

Utilizando el producto escalar de dos vectores y el cálculo del ángulo entre ellos podemos deducir las fórmulas del seno y coseno de la suma y la diferencia de ángulos.

Vamos a pintar un esquema de los vectores u y v, cuyo módulo es la unidad. Los ángulos que forman u y v con el eje X son a y b, respectivamente, por esto el ánguo entre u y v es a-b. Para pintar todo esto utilizamos los comandos plot, textplot, polarplot y display. Para alguno de ellos necesitamos cargar el paquete plots.

> with(plots):

> c:=polarplot(1,theta=0..Pi/2,scaling=CONSTRAINED,color=green):

> u:=plot([[0,0],[cos(Pi/3),sin(Pi/3)]],x=0..1):

> v:=plot([[0,0],[cos(Pi/6),sin(Pi/6)]],x=0..1):

> angu:=polarplot(0.2,theta=0..Pi/3,color=blue):

> angv:=polarplot(0.4,theta=0..Pi/6,color=blue):

> anguv:=polarplot(0.3,theta=Pi/6..Pi/3,color=blue):

> t:=textplot([[cos(Pi/3),sin(Pi/3),'u(cos(a),sen(a))'],[cos(Pi/6), sin(Pi/6),'v(cos(b),sin(b))'],[0.22,0.05,'a'],[0.42,0.05,'b'],[0.22,0.22,'a-b']],align={ABOVE, RIGHT}):

> display(c,u,v,angu,angv,anguv,t);restart:

[Maple Plot]

Vamos a calcular la expresión del coseno del ángulo (a-b) entre los vectores u y v, para ello haremos uso del comando angle del paquete linalg. Este comando devuelve el arccos el ángulo. Por esto evaluamos su coseno y le pedimos a MAPLE que lo simplifique:

> with(linalg):

> u:=vector([cos(a),sin(a)]);v:=vector([cos(b),sin(b)]);

> cos(a-b):=simplify(cos(angle(u,v)));

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]
[Maple Math]

Ahora podemos calcular el seno de la resta y coseno y seno de la suma sustituyento el ángulo b por determinados valores y pidiendo a MAPLE que simplifique la expresión:

> cos(a+b):=simplify(subs(b=-b,cos(a-b)));

[Maple Math]

> sin(a-b):=simplify(subs(b=b+Pi/2,cos(a-b)));

[Maple Math]

> sin(a+b):=simplify(subs(b=-b,sin(a-b)));

[Maple Math]

De la misma manera podemos hallar el seno y coseno del ángulo doble:

> sin(2*a):=simplify(subs(b=a,sin(a+b)));

> cos(2*a):=simplify(subs(b=a,cos(a+b)));restart:

[Maple Math]
[Maple Math]

TRIGONOMETRÍA HIPERBÓLICA

Las funciones hiperbólicas en MAPLE son: sinh, cosh, tanh y sus inversas arcsinh, arccosh y arctanh.

MAPLE conoce las diferentes relaciones entre las líneas hiperbólicas.

>cosh(alpha)^2-sinh(alpha)^2 = simplify(cosh(alpha)^2-sinh(alpha)^2);

[Maple Math]

NÚMEROS COMPLEJOS

LA UNIDAD IMAGINARIA I

En MAPLE la unidad imaginaria (raíz cuadrada de -1) se escribe con I mayúscula. Sus potencias son:

> for i from 0 to 3 do print(`i elevado a`,i,`da`,I^i) od;

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

FORMAS DE REPRESENTAR UN COMPLEJO

Ya sabemos que los elementos del cuerpo de los números complejos, isomorfo con RxR, se pueden escribir en diferenes notaciones (binómica, polar, exponencial, trigonométrica).

FORMA BINÓMICA

En forma binómica el número complejo se escribe:

> z1 := 3-2*I;

[Maple Math]

Para obtener su forma polar utilizamos el comando convert:

> z2:=convert(z1,polar);

[Maple Math]

FORMA POLAR (MÓDULO-ARGUMENTO)

Para obtener el módulo y el argumento de un complejo se utilizan los comandos abs y argument, respectivamente:

> z:=3-2*I; abs(z); argument(z);

[Maple Math]
[Maple Math]
[Maple Math]

Para escribir directamente un complejo en forma polar hacemos:

> z:=polar(4,Pi/3);

[Maple Math]

Si lo que queremos es pasar un complejo en forma polar a forma binómica usamos evalc (evalue complex):

> evalc(z);

[Maple Math]

FORMA EXPONENCIAL-TRIGONOMÉTRICA

Utilizando la Fórmula de Euler (que podemos obtener utilizando series):

> exp(ix) = cos(x) + I*sin(x);

[Maple Math]

Podemos relacionar la forma trigonométrica de un complejo Z con su forma exponencial:

> r*(cos(theta)+I*sin(theta)) = r*exp(I*theta);

[Maple Math]

Para obtener la forma exponencial y trigonométrica de un complejo utilizaremos exp y evalc, respectivamente.

> z:=3-2*I;

> exp(z) = evalc(exp(z));

[Maple Math]
[Maple Math]

Para convertir un complejo a forma exponencial o trigonométrica utilizamos el comando convert:

> convert(3*(cos(2)+I*sin(2)),exp);

[Maple Math]

> convert(5*exp(I*4),trig);

[Maple Math]

EXPRESIONES RootOf

El comando RootOf pemite definir números como raíces de un polinomio. Si deseamos conocer todos los valores debemos usar el comando allvalues:

> a:=RootOf(x^5+9*x^3-4*x^4-14*x^2+14*x-12);

[Maple Math]

> allvalues(a);

[Maple Math]

OPERACIONES CON COMPLEJOS

SUMA, RESTA, PRODUCTO, COCIENTE, POTENCIA, INVERSO

Utilizando la notación binómica se pueden hacer todos estos cálculos con complejos (utilizando I como unidad imaginaria).

> z1:=3-2*I:z2:=-1+3*I:

> 2*z1-3*z2;

[Maple Math]

> (z1*z2)^2;

[Maple Math]

> z2/z1;

[Maple Math]

El inverso podemos obtener elevando a -1:

> z1^(-1);

[Maple Math]

RAÍCES DE UN COMPLEJO

Para hallar todas las raíces de un complejo deberemos obtener todos los valores (allvalues ) de una expresión RootOf. Para hallar todas las raíces cúbicas de I planteamos la ecuación:

> z:=(-1)^(1/3) ; ec:=convert(z,'RootOf');

[Maple Math]
[Maple Math]

> allvalues(ec);

[Maple Math]

CONJUGADO

Podemos obtener la parte real y la parte imaginaria de un complejo con Re e Im, respectivamente:

> z:=3-2*I;Re(z),Im(z);

[Maple Math]
[Maple Math]

El conjugado lo obtendremos con el comando conjugate:

> z:=3-2*I;conjugate(z);

[Maple Math]
[Maple Math]

LOGARITMO DE UN COMPLEJO

Para tomar el logaritmo de un complejo utilizaremos éste en forma exponencial:

> z:=r*exp(I*theta);

[Maple Math]

Por lo tanto el logaritmo neperiano (principal) de z será:

> ln(z)=ln(r)+I*theta;

[Maple Math]

Así, todemos diseñar un procedimiento que calcule el logaritmo neperiano de un complejo. Lo llamaremos lnc:

> lnc:=proc(z)

> local r,a:

> r:=abs(z):

> a:=argument(z):

> ln(r)+I*a

> end:

> lnc(4-2*I);

[Maple Math]

> lnc(I);

[Maple Math]

De todas formas MAPLE hace este tipo de cálculos con evalc:

> evalc(ln(4-2*I));

[Maple Math]

ELEVAR UN COMPLEJO A OTRO COMPLEJO

Para elevar un complejo a otro utilizamos las funciones exponencial y logaritmo neperiano:

> Z^W = exp(W*ln(Z));

[Maple Math]

Por ejemplo para calcular i^i (la unidad imaginaria elevada a sí misma) haremos:

> I^I = exp(I*Ln(I));

[Maple Math]

Calcularemos primero LN(I) y después lo multiplicaremos por I:

> I*Ln(I) = I*ln(I);

[Maple Math]

Por lo tanto:

> I^I = exp(-Pi/2);

[Maple Math]

Claro que no hace falta tanto proceso: MAPLE realiza este tipo de operaciones con evalc:

> evalc(I^I);

[Maple Math]

COMBINATORIA

Los comandos relativos a combinatoria están en el paquete combinat.

VARIACIONES

Para calcular el número de variaciones sin repetición de m elementos tomados de n en n utilizamos el comando numbperm del paquete combinat. Como primer argumento damos el número de elementos totales y como segundo argumento el tamaño de cada grupo.

> with(combinat):

> V(5,2) = numbperm(5,2);

> restart:

Warning, new definition for Chi

[Maple Math]

MAPLE también permite listar las variaciones utilizando el comando permute:

> with(combinat):

> permute(5,2);

> restart:

Warning, new definition for Chi

[Maple Math]
[Maple Math]

Para calcular las variaciones con repetición de m elementos tomados de n en n utilizaremos la fórmula teórica: m^n<

> VR(3,14) = 3^14;

[Maple Math]

PERMUTACIONES

El comando de MAPLE que permite calcular el número de permutaciones sin repetición de m elementos es numbperm del paquete combinat. En este caso únicamente se da un argumento: m

> with(combinat):

> P(5) = numbperm(5);

> restart:

Warning, new definition for Chi

[Maple Math]

En el caso de ser pocos elementos MAPLE permite listar las permutaciones posibles con el comando permute:

> with(combinat):permute(4);rstart:

Warning, new definition for Chi

[Maple Math]
[Maple Math]
[Maple Math]

> with(combinat):permute([as,reina,rey]);restart:

[Maple Math]

Para obtener las permutaciones con repetición podemos recurrir a la fórmula teórica con el uso de factoriales o al comando multinomial del paquete combinat. Por ejemplo si queremos hallar las permutaciones con repetición de 10 letras: a,a,a,b,b,c,c,c,c,d haremos:

> with(combinat):multinomial(10,3,2,4,1);restart:

Warning, new definition for Chi

[Maple Math]

COMBINACIONES

Para hallar el número de combinaciones sin repetición de m elementos tomados de n en n podemos utilizar el comando numbcomb o el comando binomial, que devuelve el número combinatorio:

> with(combinat):C(5,2)=numbcomb(5,2);C(5,2)=binomial(5,2);restart:

Warning, new definition for Chi

[Maple Math]
[Maple Math]

Si lo que queremos es listar las combinaciones utilizaremos el comando choose, dando como primer parámetro la lista, o el conjunto, de elementos y como segundo parámetro el tamaño de las agrupaciones:

> with(combinat):

> choose({a,b,c,d,e},3);

> restart:

Warning, new definition for Chi

[Maple Math]

Para calcular las combinaciones con repetición de m elementos tomados de n en n, recurrimos a la fórmula teórica, que es el número combinatorio de m+n-1 sobre n. Podríamos escribir un procedimiento para calcular las combinaciones con repetición, será CR:

> CR:=proc(m::integer,n::integer)

> local a:

> with(combinat):a:=binomial(m+n-1,n);restart:

> a

> end:

> CR(4,3);

Warning, new definition for Chi

[Maple Math]

POLINOMIOS

DEFINICIÓN Y GRADO

Para definir un polinomio basta con asignarlo a una variable:

> q:=3*x^4-2*x*y^2+2*x*y-1;

[Maple Math]

Incluso podemos pedir a MAPLE que genere un polinomio aleatoriamente con randpoly, basta con decirle las variables y el número de monomios que deseamos, por ejemplo, un polinomio de 4 monomios en a, b y c:

> p:=randpoly([a,b,c],terms=4);

[Maple Math]

Puedes ver más información de randpoly en la ayuda:

> ?randpoly

Para ver el grado del polinomio q, se utiliza degree:

> degree(q);

[Maple Math]

Si queremos ver el grado del polinomio p podemos hacerlo globalmente o por cada una de sus variables:

> degree(p),degree(p,a),degree(p,b),degree(p,c);

[Maple Math]

Podemos pedir a MAPLE que ordene un polinomio en el grado de la variable que deseemos, por ejemplo:

> sort(q,y);

[Maple Math]

OPERACIONES BÁSICAS

SUMA, RESTA Y MULTIPLICACIÓN

Basta con usar los operadores habituales. Por ejemplo, sea:

> p:=3*x^4-4*x^2+3*x-1 : q:=3*x^2-2*x+3:

> p+q,p-q;

[Maple Math]

> 2*p-5*q;

[Maple Math]

Sin embargo al hacer la múltiplicación únicamente la dejará indicada siendo necesario expandirla:

> p*q;

[Maple Math]

> expand(p*q);

[Maple Math]

POTENCIA DE POLINOMIOS

Con la potencia ocurre igual que con el producto de polinomios, MAPLE se limita a dejarla indicada siendo necesario pedirle que la expand a:

> (2*x-3*y)^4,expand((2*x-3*y)^4);

[Maple Math]

BINOMIO DE NEWTON

Utilizando MAPLE podemos desarrollar diferentes potencias del binomio (a+b) para tratar de obtener la fórmula de Newton:

> (a+b)^0;(a+b)^1;expand((a+b)^2);expand((a+b)^3);expand((a+b)^4);

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

Si observamos con detenimiento veremos que la fórmula para obtener la potencia (a+b)^n es:

> (a+b)^n,Sum(binomial(n,i)*a^(n-i)*b^i,i=0..n);

[Maple Math]

Donde binomial(n.i) es un comando de MAPLE que halla el número combinatorio "n sobre i". Por ejemplo para n=5 obtendremos el binomio de quinto grado:

> n:=5:sum(binomial(n,i)*a^(n-i)*b^i,i=0..n);

[Maple Math]

Un detalle de MAPLE: si usas sum, en minúscula, se calcula la suma; pero si usas Sum, en mayúscula, únicamente se pone la fórmula (es lo que se llama expresión inerte).

FACTOR COMÚN

Para extraer factor común se utiliza el comando collect, indicando sobre qué polinomio actuar y qué queremos sacar factor común:

> p:=3*x^2+4*y^2-5*x^2*y-4*x^3*y^2;

[Maple Math]

> collect(p,x);

[Maple Math]

DIVISIÓN DE POLINOMIOS

Si realizamos la división de polinomios utilizando el operador / no obtendremos los resultados deseados, por ejemplo sean los polinomios p y q:

> p:=6*x^6-7*x^5+4*x^4-10*x^3-x^2+5*x: q:=2*x^2-x:

Vamos a realizar la operacion p/q e incluso a pedir que la expand a:

> p/q;expand(p/q);

[Maple Math]
[Maple Math]

Como podemos ver no hace la división entera de polinomios, para ello tenemos que usar los comandos quo y rem que nos devolverán el cociente y el resto de la división, respectivamente. Como parámetros hay que dar el polinomio dividendo, el polinomio divisor y la variable respecto de la que dividimos:

> quo(p,q,x);rem(p,q,x);

[Maple Math]
[Maple Math]

FRACCIONES ALGEBRAICAS

Las fracciones algebraicas son aquellas cuyo numerador y denominador son polinomios. Una de las operaciones básicas que podemos hacer con ellas es simplificarlas, si es posible. Para ello utilizamos el comando simplify:

> p:=x^3-x^2-x+1 : q:=x^3+x^2-x-1:p/q;

[Maple Math]

> simplify(p/q);

[Maple Math]

Fracciones Simples

MAPLE es capaz de descomponer fracciones algebraica complejas en fracciones más simples. Esto puede ser muy útil en el cálculo de ciertas integrales. Para hacer esto utlizamos en comando convert, que recibe como primer parámetro la fracción a simplificar, como segundo parámetro la palabra clave parfrac y como último parámetro la variable:

> p:=(4*x-2)/(x^3+3*x^2-x-3);

> convert(p,parfrac,x);

[Maple Math]
[Maple Math]

FACTORIZACIÓN DE POLINOMIOS, MCD y MCM

Para factorizar un polinomio utilizamos el comando factor:

> factor(x^6-9*x^5+12*x^4+76*x^3-144*x^2-192*x+256);

[Maple Math]

> factor(a^3-a^2*b-a*b^2+b^3);

[Maple Math]

También podemos hallar el MCD y MCM de dos polinomios con los comandos gcd y lcm, respectivamente:

> p:=x^4-x^3-3*x^2+x+2 : q:=x^5-5*x^4+6*x^3+2*x^2-7*x+3:

> gcd(p,q);

[Maple Math]

> lcm(p,q);

[Maple Math]

FACTORIZACIONES EN Z[i]

También podemos factorizar en los anillos Z[i]. En MAPLE la unidad imaginaria se escribe I, desplegando el menú View>Palettes>Symbol Palette: I es el último símbolo que aperece en la ventana.

Por ejemplo, podemos factorizar x^2+4 en Z[i]:

> factor(x^2+4,I);

[Maple Math]

Mientras que en R, x^2+4 no tiene factorización posible.

> factor(x^2+4);

[Maple Math]

DESARROLLOS DE TAYLOR

Los polinomios de Taylor se utilizan para aproximar funciones en un determinado punto. Para ello es necesario que la función tenga derivada hasta el orden n (n será el grado del polinomio de Taylor) en dicho punto.

La expresión del polinomio de Taylor en x=a es:

> P(x)=Sum(D^i*[f(a)]/i!*(x-a)^i,i=0..n);

[Maple Math]

Donde se calcula la derivada i-ésima de f en x=a, hasta i=n.

Este cálculo lo realiza MAPLE automáticamente con el comando taylor. Por ejemplo, para aproximar la función sen(x) en x=0, con un polinómio de Taylor de grado 8 se haría:

> taylor(sin(x),x=0,8);

[Maple Math]

En este polinomio el último término expresa el error cometido, es lo que se denomina resto de Taylor.

Podemos pintar la función seno y el polinomio hallado en el entorno de x=0 para obsevar su coincidencia. Pero, para esto, es necesario convertir en polinomio la expresión de Taylor hallada. Esto se hace con el comando convert:

> p:=convert(taylor(sin(x),x=0,8),polynom);

[Maple Math]

Para pintar las funciones utilizamos el comando plot:

> plot({sin(x),p},x=-4..4,y=-1..1);

[Maple Plot]

ECUACIONES E INECUACIONES. SISTEMAS

ECUACIONES

El comando para resolver ecuaciones es solve poniendo entre paréntesis dos parámetros: la ecuación a resolver y la variable que queremos hallar. Por ejemplo:

> solve(3*x-1=13,x);

[Maple Math]

Si lo que queremos es hallar soluciones reales aproximadas, el comando es fsolve (float solve):

> fsolve(3*x-1=13,x);

[Maple Math]

MAPLE también encuentra soluciones imaginarias (hay que recordar eu I es la unidad imaginaria):

> solve(x^2-2*x+2);

[Maple Math]

ECUACIONES NO ALGEBRAICAS

MAPLE puede resolver diferentes tipos de ecuaciones no algebraicas (recordemos que las ecuaciones algebraicas son aquellas que se pueden resolver efectuando operaciones algebracias: suma, resta, multiplicación y división).

ECUACIONES CON RADICALES

En el caso de raíces cuadradas, estas ecuaciones se pueden convertir en algebraicas elevando al cuadrado ambos miembros las veces que sea necesario. De todas formas MAPLE resuelve estas ecuaciones sin incluir soluciones falsas (lo que si ocurre al convertirlas en algebraicas). El comando sqrt indica raíz cuadrada. Por ejemplo:

> solve(sqrt(2*x-3)+1=x,x);

[Maple Math]

ECUACIONES TRIGONOMÉTRICAS

MAPLE resuelve las ecuaciones trigonométricas dando la solución para el primer periodo. Hay que recordar que las funciones trigonométricas en MAPLE se escriben: sin(), cos() y tan() para el seno, coseno y tangente, respectivamente. Por ejemplo:

> solve(sin(x)+cos(x)=1,x);

[Maple Math]

ECUACIONES EXPONENCIALES

MAPLE resuelve ecuaciones exponenciales recurriendo a logaritmos neperianos.

> solve(2^x=3);

[Maple Math]

Si queremos la solución real aproximada debemos usar el comando fsolve:

> fsolve(2^x=3);

[Maple Math]

Podemos incluso plantear ecuaciones "curiosas", como: ¿qué número elevado a sí mismo da 2?

> fsolve(x^x=2);

[Maple Math]

ECUACIONES CON VALORES ABSOLUTOS

MAPLE utiliza el comando abs para indicar valor absoluto. Podemos resolver ecuaciones de este tipo con el comando solve:

> abs(x+1)=3;solve(abs(x+1)=3);

[Maple Math]
[Maple Math]

ECUACIONES RECURRENTES

Vamos a resolver el siguiente problema: "Un mono tiene una bolsa de cacahuetes. Cada mañana su dueño le añade 100 cacahuetes. Luego, durante el día el mono se come la mitad de los cacahuetes que hay en la bolsa. Una noche, después de varios años haciendo esto, el dueño contó los cacahuetes ¿cuántos cacahuetes habrá en la bolsa?"

Planteamos la siguiente ecuación recurrente: la noche del día k+1 en la bolsa habrá x(k+1)=(100+x(k))/2 porque al iniciar el día había x(k) cacahuetes, a los que el dueño añade 100, pero luego el mono se come la mitad...

¿Cómo resolvemos esta ecuación recurrente? Utilizamos el comando rsolve, en el que los argumentos son la propia ecuación recurrente y la función incógnita:

> rsolve(x(k+1)=50+x(k)/2,x);

[Maple Math]

Como pasan muchos años tomas el límite de la función obtenida cuando k tiende a infinito.

> limit(%,k=infinity);

[Maple Math]

Esto quiere decir que habrá 100 cacahuetes en la bolsa.

Para informate mejor del comando rsolve teclea:

> ?rsolve

ECUACIONES DIOFÁNTICAS

Las ecuaciones diofánticas son aquellas cuyas soluciones son números enteros.

Por ejemplo, si deseamos llevar 430 euros en billetes de 50 y 20 euros.. 1) ¿es posible? 2) en caso de ser posible ¿cuántos billetes de cada hay que coger?

> isolve(50*x+20*y=430);

[Maple Math]

Obtenemos un conjunto de soluciones sustituyendo _NI por números enteros, por ejemplo:

> for i from -5 to 5 do print(`x=`,1+2*i,`y=`,19-5*i) od;

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

donde nos quedaríamos con las parejas de soluciones positivas,por ejemplo (1,19), es decir 1 billete de 50 y 19 de 20, etc.

ECUACIONES DIFERENCIALES

En ingeniería y el ciencias hay muchos problemas que, cuando se formulan en términos matemáticos, requieren la determinación de una función que debe satisfacer una ecuación que contiene derivadas de la propia función desconocida. Estas ecuaciones se denominan ecuaciones diferenciales.

Por ejemplo, para determinar el movimiento de una partícula sobre la que actúa la fuerza de la gravedad, es necesario determinar una función u(t) que satisfaga la siguiente ecuación:

> ec1:=m*diff(u(t),t$2)=-m*g;

[Maple Math]

El comando de MAPLE para resolver ecuaciones diferenciales es dsolve, que recive dos parámetros: la ecuación diferencial y el nombre de la función incógnita:

> dsolve(ec1,u(t));

[Maple Math]

Como podemos ver, aparecen _C1 y _C2, que son constantes que se pueden determinar si se conocen las condiciones iniciales.

El paquete DEtools contiene comandos sobre ecuaciones diferenciales. Interesa echarle un vistazo:

> ?DEtools

También es interesante que veamos la explicación del comando que resuelve ecuaciones diferenciales:

> ?dsolve

El comando dsolve admite, como tercer argumento, que se le inidique el método de resolución de la ecuación diferencial:

- poniendo method=laplace, utilizará la transformada de Laplace

- poniendo type=series, se obtendrá una serie como solución aproximada

- poniendo type=numeric, se obtendrá una solución numérica utilizando un Runge-Kutta de orden 4-5.

CONDICIONES INICIALES

Cuando conocemos las condiciones iniciales podemos hallar una solución particular de la ecuación diferencial. Las condiciones iniciales se incluyen en el comando dsolve haciendo un conjunto cuyo primer elemendo es la ecuación a resolver, y después las condiciones iniciales separadas por comas.

Encontrar la solución de y'=y^2 sabiendo que y(0)=1:

> ec:=diff(y(x),x)=y(x)^2;

[Maple Math]

> dsolve({ec,y(0)=1},y(x));

[Maple Math]

Podemos comprobar que la solución obtenida cumple la ecuación planteada. Para ello debemos coger la parte derecha (comando rhs, right side) de la última salida (comodín %) y sustituirla en la ecuación:

> y:=unapply(rhs(%),x);

[Maple Math]

> ec;

[Maple Math]

Además hay que verificar que se cumple la condición inicial y(0)=1:

> y(0);

[Maple Math]

Otro ejemplo, una ecuación en la que es posible hacer separación de variables:

> restart:

> ec:=diff(y(x),x)=(3*x^2+4*x+2)/(2*(y(x)-1));

> dsolve({ec,y(0)=1},y(x));

[Maple Math]
[Maple Math]

ECUACIONES DIFERENCIALES CON DERIVADAS PARCIALES

MAPLE puede resolver ecuaciones diferenciales en derivadas parciales utilizando el comando pdsolve, que recibe dos parámetros: la ecuación diferencial y la función incógnita.

Vamos a resolver la siguiente ecuación en derivadas parciales:

> restart:

> ec:=alpha^2*diff(u(x,t),x)=diff(u(x,t),t);

> sol:=pdsolve(ec,u(x,t));

[Maple Math]
[Maple Math]

La solución aparece expresada como una función arbitraria _F1 que podemos elegir nosotros. Vamos a tomar como _F1 la función seno:

> subs(_F1=sin,%);

[Maple Math]

Ahora vamos a sustituirla en la ecuación y a simplificar la expresión para ver que, en efecto, se cumple la ecuación:

> simplify(subs(u(x,t)=rhs(%),ec));

[Maple Math]

INECUACIONES

Se resuelven utilizando el comando solve. En la solución se indica si el intervalo es abierto con Open.

> solve(x-1>5);

[Maple Math]

> solve(x^2+2*x-3>=0);

[Maple Math]

Puede ocurrir que no tengan solución:

> solve(x^2-2*x+3<0);

SISTEMAS

SISTEMAS DE ECUACIONES

Para resolver un sistema de ecuaciones se utiliza el comando solve dando dos argumentos. El primero es el conjunto de las ecuaciones, y el segundo el conjunto de las incógnitas.

> solve({y-3*x=-5,x^2+y=-1},{x,y});

[Maple Math]

En el caso de ser sistema compatible indeterminado, la solución se expresa con parámetros:

> solve({3*x-2*y+z=4,x+y-3*z=2},{x,y,z});

[Maple Math]

En el caso de que el sistema sea incompatible, MAPLE no devuelve nada:

> solve({x-y=3,2*y-2*x=3},{x,y});

SISTEMAS LINEALES: TEOREMA DE ROUCHE-FROBENIUS

Según el Teorema de Rouche-Frobenius un sistema es compatible si el rango de la matriz del sistema es igual que el rango de la matriz ampliada. Si además es igual al número de incógnitas, el sistema será compatible determinado.

Veamos un ejemplo con el sistema:

> ec1:=x+2*y+z=9:

> ec2:=x-y-z=-10:

> ec3:=2*x-y+z=5:

En primer lugar tenemos que generar la matriz (matrix) del sistema (S) y la matriz ampliada (A). Esto se hace con el comando genmatrix. Para ello necesitamos cargar el paquete linalg.

> with(linalg):

> S:=genmatrix([ec1,ec2,ec3],[x,y,z]):

> A:=genmatrix([ec1,ec2,ec3],[x,y,z],flag):

> rank(S);rank(A);

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

y como el número de incógnitas es 3, el sistema es compatible determinado. Ahora descargamos el paquete para liberar memoria.

> restart:

Podemos escribir un procedimiento que utilice el teorema de Rouche-Frobenius para discutir un sistema lineal y dar su solución:

> rouchef:=proc(ecuaciones::list,variables::list)

> local S,A,n:

> with(linalg):

> S:=genmatrix(ecuaciones,variables):

> A:=genmatrix(ecuaciones,variables,flag):

> n := nops(variables);

> if rank(S)<>rank(A) then print(`Sistema incompatible`)

> elif rank(S)=n then print(`Sistema compatible determinado`)

> else print(`Sistema compatible indeterminado`)

> fi:

> restart:

> S:=convert(ecuaciones,set):A:=convert(variables,set);

> solve(S,A):

> end:

Para utilizar el procedimiento definido haremos:

> rouchef([x+2*y+z=9,x-y-z=-10,2*x-y+z=5],[x,y,z]);

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

EIGENVALORES Y EIGENFUNCIONES

La ecuación matricial formada a partir de un sistema de ecuaciones: Ax = y puede imaginarse como una transformación lineal de un vector dado x en un nuevo vector y.

En este tipo de transformaciones los vectores que se transforman en múltiplos de sí mismos tienen múltiples aplicaciones (por ejemplo, en el problema de encontrar los ejes principales de los esfuerzos de un cuerpo elástico, o en el caso de encontrar los modos de vibración libre en un sistema conservativo con un número finto de grados de libertad).

Para encontrar estos vectores haremos:

> y=lambda*x;

[Maple Math]

siendo lamda un factor escalar. Por lo tanto buscaremos soluciones de la ecuación:

> A*x=lambda*x;

> with(linalg):Id:=diag(1,1,1):(A-lambda*Id)*x=0;

[Maple Math]
[Maple Math]

Donde Id es la matriz identidad.

Esta última ecuación sólo tiene soluciones diferentes (del caso trivial x=0) si el determinande de A-lamda·Id es nulo:

> Det(A-lambda*Id)=0;restart:

[Maple Math]

Los valores de lambda que satisfacen esta ecuación se denominan eigenvalores o valores propios de la matriz A y las soluciones que se obtienen utilizando estos eigenvalores en la ecuación Ax=lambda·y se denominan eigenvectores, o vectores propios, asociados a ese eigenvalor.

Vamos a encontrar los eigenvectores y eigenvalores de la matriz A:

> A:=matrix([[0,1,1],[1,0,1],[1,1,0]]);Id:=matrix([[1,0,0],[0,1,0],[0,0,1]]);

[Maple Math]
[Maple Math]

> B:=evalm(A)-lambda*evalm(Id);evalm(B);

[Maple Math]
[Maple Math]

Obtenemos el determinante, lo igualamos a cero y resolvemos la ecuación:

> with(linalg):det(B)=0;solve(det(B)=0);

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

Hemos obtenido tres eigenvalores: lambda1=2, lambda2=-1 y lambda3=-1 (luego 2 es un eigenvalor simple y -1 es un eigenvalor de multiplicidad dos)

Vamos ahora a encontrar los eigenvectores asociados. El sistema será:

> X=matrix([[x[1]],[x[2]],[x[3]]]);nulo:=matrix([[0],[0],[0]]):

> evalm(B)*X=evalm(nulo);

[Maple Math]
[Maple Math]

Tomamos el primer eigenvalor: lambda1=2 y sustituimos:

> lambda:=2;evalm(B)*X=evalm(nulo);

[Maple Math]
[Maple Math]

Resolviendo este sistema encontraremos el eigenvector asociado al eigenvalor lambda=2.

Sin embargo, MAPLE no necesita hacer todo este proceso para obtener los eigenvalores y eigenvectores. Para ello disponde de los comandos eigenvalues y eigenvectors, respectivamente, del paquete linalg.

> restart:with(linalg):

> A:=matrix([[0,1,1],[1,0,1],[1,1,0]]);

> eigenvalores:=eigenvalues(A);

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

> eigenvectores:=eigenvectors(A);restart:

[Maple Math]

Esta salida se debe leer así: hay dos listas:

[2,1,{[1,1,1,]}] , que indica el eigenvalor: 2, su multiplicidad: 1 y el eigenvector asociado: [1,1,1]

[-1,2,{[0,-1,1],[1,-1,0]}] que indica el segundo eigenvalor: -1, su multiplicidad: 2 y los eigenvectores asociados: [0,-1,1] y [1,-1,0]

SISTEMAS DE INECUACIONES

Para resolverlos utilizaremos el comando solve con dos parámetros: el conjunto de inecuaciones y el conjunto de incógnitas. En caso de no aparecer respuesta es que el sistema no tiene soluciónPor ejemplo:

SISTEMAS DE INECUACIONE S CON UNA INCÓGNITA

Basta con utilizar el comando solve, dando la inecuación entre llaves y la incógnita entre también entre llaves.

> solve({4*x-3<=1,x+6>2},{x});

[Maple Math]

SISTEMAS DE INECUACIONES CON DOS INCÓGNITAS

El comando solve simplifica el conjunto de inecuaciones.

> solve({2*x-y<=3,2*x+y<=3},{x,y});

[Maple Math]

En este tipo de sistemas es más útil pintar las soluciones. Para ello necisatamos cargar el paquete plots, y utilizar el comando inequal. Este comando tiene como argumentos el conjunto de inecuaciones, el rango en X, el rango en Y y la posibilidad de indicar el color de las diferentes zonas. Interesa ver las diferentes opciones del comando:

> ?inequal

> with(plots):

> inequal({2*x-y<=3,2*x+y<3},x=-3..3,y=-5..5,optionsfeasible=(color=green),optionsopen=(color=blue,thickness=2),optionsclosed=(color=red, thickness=3),optionsexcluded=(color=yellow));

> restart:

[Maple Plot]

En este ejemplo hemos pedido: - La zona solución en color verde; - La zona excluida en color amarillo; -Las fronteras abiertas en color azul; - Las fronteras cerradas en color rojo.

SISTEMAS DE ECUACIONES DIFERENCIALES ORDINARIAS

Para resolver un sistema de ecuaciones diferenciales MAPLE dispone del comando dsolve, al que hay que dar el conjunto de las ecuaciones (y condiciones iniciales si las hubiere) y el conjunto de las funciones incógnita:

> ec1:=diff(x[1](t),t)=x[1](t)+x[2](t);

> ec2:=diff(x[2](t),t)=4*x[1](t)+x[2](t);

> soluciones=dsolve({ec1,ec2},{x[1](t),x[2](t)});

[Maple Math]
[Maple Math]

[Maple Math]
[Maple Math]

Si conocemos condiciones iniciales los incluímos con las ecuaciones:

> restart:

> ec1:=diff(x(t),t)=x(t)-5*y(t);

> ec2:=diff(y(t),t)=x(t)-3*y(t);

> dsolve({ec1,ec2,x(0)=1,y(0)=1},{x(t),y(t)});

[Maple Math]
[Maple Math]
[Maple Math]

MATRICES Y VECTORES

VECTORES

Para definir un vector utilizamos el comando vector, dando las componentes del vector en forma de lista:

> v:=vector([1,2,3,4,5]);

[Maple Math]

Para ver su contenido podemos utilizar print o evalm (evalue matrix)

> evalm(v);

[Maple Math]

En el caso de necesitar que una lista se convierta en vector, podemos usar el comando convert con la opción vector.

Para transferir el contenido de un vector a otro se utiliza el comando copy:

> w:=copy(v);

[Maple Math]

OPERACIONES CON VECTORES

En general se puede hacer cualquier operación con vectores pidiendo que se evalúe con el comando evalm.

> u:=vector([u1,u2,u3]):v:=vector([v1,v2,v3]):

La suma, resta y multiplicación por un número real se expresan con los operadores habituales (+,-,*):

> evalm(r*u+s*v);

[Maple Math]

> evalm(u-v);

[Maple Math]

PRODUCTO ESCALAR

El producto escalar se calcula a través del comando dotprod del paquete linalg, que recibe como parámetros los dos vectores que se multiplican. Está definido considerando que los vectores pueden ser complejos. Esto quiere decir que dotprod de los vectores u y v, devuelve el producto escalar de u por el conjugado de v (esto permite calcular el módulo de un complejo):

> u:=vector([u1,u2*I]);v:=vector([v1,v2*I]);

> with(linalg):dotprod(u,v);restart:

[Maple Math]
[Maple Math]

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]

Si se necesitara calcular el producto escalar de u por v sin utilizar el conjugado podemos hacerlo con dotprod del paquete linalg, utilizando como tercer parámetro la opción 'orthogonal':

> u:=vector([u1,u2*I]);v:=vector([v1,v2*I]);

> with(linalg):dotprod(u,v,'orthogonal');restart:

[Maple Math]
[Maple Math]

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]

Norma o módulo de un vector

El módulo de un vector se puede calcular como la raíz cuadrada positiva del producto escalar de un vector por sí mismo. Resordemos que para calcular el producto escalar se utiliza el comando dotprod del paquete linalg.

> with(linalg):

> v:=vector([I,-2,3*I]);sqrt(dotprod(v,v));restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

MAPLE tiene el comando norm del paquete linalg. Damos como primer parámetro el vector y como segundo parámetro el índice de la raíz para calcular el módulo (2).

> with(linalg):v:=vector([I,-2,3*I]):norm(v,2);restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]

Cálculo del vector unitario

Calcular el vector unitario de otro dado, esto es, el vector de módulo 1 de la misma dirección y sentido que el primero, se denomina normalizar un vector.

Para obtener el vector normalizado se multiplica el vector por el inverso de su propio módulo:

> with(linalg):

> V:=([I,1,2*I]);v:=norm(V,2);

> U:=evalm(V*1/v);

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]
[Maple Math]

Vamos a comprobar que el vector U hallado es unitario:

> u:=norm(U,2);restart:

[Maple Math]

De todas formas MAPLE puede normalizar un vector directamente con el comando normalize del paquete linalg.

> with(linalg):

> V:=([I,1,2*I]);

> U:=normalize(V);

> restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

Ángulo entre dos vectores

Utilizando la definición de producto escalar: u·v = |u|·|v|·cos(uv) podemos encontrar el ángulo que fomar ambos vectores sencillamente despejando el coseno y calculando arccos. Recoremos que la respuesta aparece en radianes.

Utilizando esta misma definición de producto escalar, está claro que si dos vectores son perpendiculares, su producto escalar será nulo (puesto que cos(90)=0).

> u:=vector([1,0]);v:=vector([1,1]);

> with(linalg):

> angulorad:=arccos(dotprod(u,v)/(norm(u,2)*norm(v,2)));

[Maple Math]
[Maple Math]

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]

Si queremos el resultado en grados:

> angulogrados:=convert(angulorad,degrees);restart:

[Maple Math]

De todas formas MAPLE permite hallar el ángulo entre dos vectores con el comando angle del paquete linalg. El resultado aparece en radianes.

> u:=vector([1,0]);v:=vector([1,1]);

> with(linalg):

> angulorad:=angle(u,v);

> angulograd:=convert(angulorad,degrees);

> restart:

[Maple Math]
[Maple Math]

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

PRODUCTO VECTORIAL

El producto vectorial se consigue con el comando crossprod del paquete linalg.

> with(linalg):

> u:=vector([1,0,0]);v:=vector([0,1,0]);

> uxv:=crossprod(u,v);

> restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]
[Maple Math]

Como podemos ver, el vector resultante es perpendicular al plano definido por los otros dos vectores.

Interpretación geométrica

El producto vectorial de dos vectores u y v se puede interpretar como el área del paralelogramo definido por los dos vectores (tomando el módulo de producto vectorial, naturalmente).

Por ejemplo, si queremos hallar el área del triángulo cuyos vértices tienen por coordenadas A(3,-1,2), B(0,1,2) y C(2,2,2) haremos lo siguiente:

Hallamos los vectores u=AB y v=AC y obtenemos la mitad del modulo del producto vectorial (porque el área del triángulo es la mitad del área del paralelogramo):

> u:=vector([0-3,1-(-1),2-2]);v:=vector([2-3,2-(-1),2-2]);

> with(linalg):

> area=1/2*norm(crossprod(u,v),2);

> restart:

[Maple Math]
[Maple Math]

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]

ANÁLISIS VECTORIAL

GRADIENTE

El gradiente de una función escalar f(x,y,z), continua y derivable, es una función vectorial que se obtiene calculando sus derivadas parciales con respecto a cada una de las coordenadas. MAPLE permite calcular el gradiente de una función escalar con el comando grad del paquete linalg, que recibe como primer argumento la expresión de la función, y como segundo argumento la lista de las variables.

> restart:

> `grad`(f)=(Diff(f,x),Diff(f,y),Diff(f,z));

[Maple Math]

El operador gradiente es comunmente utilizado en Física. Por ejemplo, el campo eléctrico (E) es una función vectorial que resulta de aplicar el gradiente a la función potencial: E = -grad(V)

> with(linalg):

> V:=x^2+y^2+z^2;E:=-grad(V,[x,y,z]);

> restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

También podemos calcular el gradiene en coordenadas esféricas o cilíndricas. Para ello incluímos el parámetro coords=spherical o coords=cylindrical, respectivamente. Por defecto el gradiente se calcula en coordenadas cartesianas.

> with(linalg):

> V:=x^2+y^2+z^2;E:=-grad(V,[x,y,z],coords=cylindrical);

> restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

> with(linalg):

> V:=x^2+y^2+z^2;E:=-grad(V,[x,y,z],coords=spherical);

> restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

DIVERGENCIA

El operador divergencia actúa sobre una función vectorial F (Fx,Fy,Fz) devolviendo un escalar. En coordenadas cartesianas la divergencia se expresa:

> div(F)=Diff(Fx,x)+Diff(Fy,y)+Diff(Fz,z);

[Maple Math]

El operador divergencia se utiliza mucho en Fïsica. Por ejemplo, en electromagnetismo, la divergencia del campo electrico hace referencia al flujo total de las líneas de campo eléctrico (que puede ser nulo, positivo y entonces hay una fuente, o negarivo y entonces hay un sumidero). Por ejemplo, sea el campo E:

> Ex:=6*x*y:Ey:=3*x^2-3*y^2:Ez:=3*z:

> e:=[Ex,Ey,Ez];

> with(linalg):

> divergencia(E)=diverge(e,[x,y,z]);

> restart:

[Maple Math]

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]

En este resultado la divergencia del campo eléctrico es positiva. Tenemos, por lo tanto, una fuente.

En este otro caso la divergencia resulta ser nula:

> Ex:=6*x*y:Ey:=3*x^2-3*y^2:Ez:=0:

> e:=[Ex,Ey,Ez];

> with(linalg):

> divergencia(E)=diverge(e,[x,y,z]);

> restart:

[Maple Math]

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]

También podemos calcular la divergencia en coordenadas esféricas o cilíndricas. Para ello incluímos el parámetro coords=spherical o coords=cylindrical, respectivamente. Por defecto la divergencia se calcula en coordenadas cartesianas.

> with(linalg):

> Ex:=2*Pi*rho*x:Ey:=rho*y/(2*epsilon[0]):Ez:=0:

> e:=[Ex,Ey,Ez];

> divergencia(E)=diverge(e,[x,y,z],coords=cylindrical);

> restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

ROTACIONAL

El operador rotacional actúa sobre una función vectorial y devuelve otra función vectorial. Desde el punto de vista de la Física el rotacional distinto de cero significa que el campo tiene circulación, o turbulencia. Por ejemplo, el campo de velocidades del agua al vaciar una bañera adquiere, generalmente, una circulación. Su rotacional no es cero en la mayor parte de la superficie (cualquier cuerpo que flote en la superficie gira mientras avanza).

MAPLE dispone del comando curl del paquete linalg para calcular el rotacional. Como parámetros es necesario dar la función vectorial y la lista de variables.

> with(linalg):

> f1:=x*y*z:f2:=3*x^2*z:f3:=-2*y*z^2:

> F:=[f1,f2,f3];rot(f)=curl(F,[x,y,z]);

> restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

También podemos calcular el rotacional en coordenadas esféricas o cilíndricas. Para ello incluímos el parámetro coords=spherical o coords=cylindrical, respectivamente. Por defecto el rotacional se calcula en coordenadas cartesianas.

> with(linalg):

> f1:=x*y*z:f2:=3*x^2*z:f3:=-2*y*z^2:

> F:=[f1,f2,f3];rot(f)=curl(F,[x,y,z],coords=cylindrical);

> restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

LAPLACIANA

El operador laplaciana se puede considerar como "la divergencia del gradiente", es decir, partiendo de una función escalar aplicamos el gradiente, por lo que obtenemos la variación de dicha función en las tres direcciones del espacio. Ahora aplicamos sobre esta función vectorial recien hallada el operador divergencia, por lo que volvemos a obtener una función escalar.

En coordenadas cartesianas la laplaciana tiene la siguiente forma:

> laplaciana(f)=Diff(f,x$2)+Diff(f,y$2)+Diff(f,z$2);

[Maple Math]

El comando de MAPLE que hace de operador laplaciana es laplacian, del paquete linalg. Este comando recibe como argumentos la función escalar y la lista de variables:

> with(linalg):

> f:=x^2+y^2+z^2:

> laplaciana(f)=laplacian(f,[x,y,z]);

> restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]

Dondequiera que la densidad de carga sea nula (todas las regiones del espacio que no contienen carga eléctrica) el potencial eléctrico V tiene que satisfacer la ecuación de Laplace:

> laplaciana(V)=0;

[Maple Math]

También podemos calcular la laplaciana en coordenadas esféricas o cilíndricas. Para ello incluímos el parámetro coords=spherical o coords=cylindrical, respectivamente. Por defecto la laplaciana se calcula en coordenadas cartesianas.

> with(linalg):

> f:=x^2+y^2+z^2:

> laplaciana(f)=laplacian(f,[x,y,z],coords=spherical);

> restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]

MATRICES

DEFINIENDO MATRICES

En la introducción ya se habló de como definir matrices. Vamos a ver ahora cómo definir una matriz de otras formas:

El comando matrix permite definir y rellenar matrices dando las sucesivas filas en forma de lista:

> m:=matrix([[1,2,3],[4,5,6]]);

[Maple Math]

También podemos ir rellenando la matriz indicando el valor de cada posición:

> m[1,1]:=8;

[Maple Math]

Para visualizar la matriz podemos usar print o evalm:

> evalm(m);

[Maple Math]

Podemos copiar el contenido de una matriz en otra utilizando el comando copy:

> n:=copy(m):print(`n=`,n);

[Maple Math]

PROCEDIMIENTOS PARA LLENAR MATRICES

Podemos rellenar una matriz utilizando bucles anidados:

> m:=matrix(2,3);for i to 2 do for j to 3 do m[i,j]:=1 od od:evalm(m);

[Maple Math]
[Maple Math]

También, MAPLE tiene definidas ciertas matrices especiales.

Otras matrices definidas por MAPLE en el paquete linalg son:

> with(linalg):

Warning, new definition for norm

Warning, new definition for trace

Matriz de Vandermonde:

> vandermonde([a,b,c]);

[Maple Math]

Matriz diagonal:

> diag(a,b,c);

[Maple Math]

Matriz jacobiana: se aplica sobre funciones vectoriales, evaluándose en cada fila las dereivadas parciales de cada componente de la función con respecto a cada una de las variables. El comando es jacobian.

> f=f(fx,fy,fz),jacobiano=matrix([[Diff(fx,x),Diff(fx,y),Diff(fx,z)],[Diff(fy,x),Diff(fy,y),Diff(fy,z)],[Diff(fz,x),Diff(fz,y),Diff(fz,z)]]);

[Maple Math]

> f:=[x*y*z,x^2+y^2+z^2,y]:

> funcion=f,jacobiana=jacobian(f,[x,y,z]);

[Maple Math]

Matriz wronskiana: se utiliza para la resolución de determinadas ecuaciones diferenciales. La primera fila muestra las componentes de una función vectorial, y las filas siguientes son sus derivadas sucesivas. El comando es wronskian.

> f:=[sin(x^2),exp(-x),1/x]:

> funcion=f,wronskiana=wronskian(f,x);

[Maple Math]

OPERACIONES CON MATRICES

Podemos hacer las operaciones básicas con matrices (suma resta y multiplicación por un número) utilizando los operadores normales (+, - ,*), y después evaluar la matriz resultado con el comando evalm:

> a:=matrix([[1,1,1],[3,3,3]]);b:=matrix([[2,2,2],[4,4,4]]);

[Maple Math]
[Maple Math]

> a+b=evalm(a+b);

[Maple Math]

> 3*a=evalm(3*a);

[Maple Math]

> 4*a-2*b=evalm(4*a-2*b);

[Maple Math]

MULTIPLICACIÓN DE MATRICES

Para multiplicar dos matrices es necesario utilizar la combinación de símbolos &*, dado que este producto no es conmutativo. Tenemos que recordar que, para que dos matrices se puedan multiplicar, es necesario que el número de columnas de la primera coincida con el número de filas de la segunda. Para evaluar el resultado utilizaremos el comando evalm.

> a:=matrix([[a11,a12,a13],[a21,a22,a23]]);b:=matrix([[b11,b12],[b21,b22],[b31,b32]]);

[Maple Math]
[Maple Math]

> evalm(a&*b);

[Maple Math]

Como caso especial comentar que si multiplicamos un vector fila (1xM) por una matriz (MxN) obtendremos otro vector fila (1xM)

> v:=vector([v1,v2]):

> evalm(v)&*evalm(a)=evalm(v&*a);

[Maple Math]

Si multiplicamos una matriz (MxN) por un vector columna (Nx1) obtendremos otro vector columna (Mx1), aunque MAPLE devuelva el resultado en forma de vector fila.

> w:=vector([w1,w2,w3]):

> evalm(a)*evalm(w)=evalm(a&*w);

[Maple Math]

Si queremos el resultado en forma de vector columna debemos definir el vector como una matriz de tres filas y una única columna:

> a:=matrix([[1,2,3],[4,5,6]]):v:=matrix([[-1],[0],[1]]):

> evalm(a)*evalm(v)=evalm(a&*v);

[Maple Math]

POTENCIA DE MATRICES

Elevar una matriz a una potencia significa multiplicarla por sí misma tantas veces como sea necesario, por lo tanto únicamente podremos calcular la potencia de matrices cuadradas, o de lo contrario no se podrían multiplicar. Para indicar la potencia utilizamos el operador ^ y el comando evalm para visualizar el resultado.

> a:=matrix([[1,I],[-I,1]]);

[Maple Math]

> evalm(a^2);

[Maple Math]

> evalm(a^4);

[Maple Math]

MATRIZ TRASPUESTA

La traspuesta At de una matriz A se obtiene intercambiando las filas y las columnas de A. MAPLE utiliza el comando transpose, del paquete linalg, para obtener la traspuesa de una matriz:

> with(linalg):

> A:=matrix([[3,2-I],[4+3*I,-5+2*I]]);At:=transpose(A);

> restart:

[Maple Math]
[Maple Math]

MATRIZ CONJUGADA

La conjugada de una matriz se consigue reemplazando cada elemento de la matriz por su conjugado. El comando conjugate aplicado sobre una matriz realiza esta tarea. Si queremos visualizar la matriz debemos utilizar el comando evalm:

> A:=matrix([[3,2-I],[4+3*I,-5+2*I]]);conjugate(A)=evalm(conjugate(A));

[Maple Math]
[Maple Math]

MATRIZ ADJUNTA

La matriz adjunta de otra es la traspuesta de su matriz conjugada. Maple obtiene la adjunta de una matriz con la combinación de los comando conjugate y transpose del paquete linalg:

> with(linalg):

> A:=matrix([[3,2-I],[4+3*I,-5+2*I]]);

> Aadj=transpose(conjugate(A));

> restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

MATRIZ INVERSA

Se define la matriz inversa de A a otra tal que multiplicada por A da la matriz identidad. No todas las matrices tienen inversa (en primer lugar hay que decir que únicamente se define la inversa de matrices cuadradas). En el caso de que una matriz no tenga inversa se denomina singular.

El cálculo de una matriz inversa es largo y tedioso, pero MAPLE puede calcular la inversa de una matriz de dos formas distintas: evaluando 1/A ó elevando A^(-1)

> A:=matrix([[1,-1,-1],[3,-1,2],[2,2,3]]);

> Ainv:=evalm(1/A);

> Ainv:=evalm(A^(-1));

[Maple Math]
[Maple Math]
[Maple Math]

En el caso de que queramos hallar la inversa de una matriz singular, MAPLE devuelve un error:

> B:=matrix([[1,2],[2,4]]);evalm(1/B);

[Maple Math]

Error, (in linalg[inverse]) singular matrix

TRAZA DE UNA MATRIZ

MAPLE obtiene la traza de una matriz (cuadrada, evidentemente) con el comando trace del paquete linalg.

> with(linalg):

> A:=matrix([[a11,a12],[a21,a22]]);

> traza=trace(A);

> restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

ELIMINACIÓN GAUSSIANA. TRIANGULACIÓN

Podemos intercambiar filas y columnas en una matriz con los comandos swaprow y swapcol, respectivamente, del paquete linalg. Ambos comandos deben recibir como argumento la matriz y la posición de las filas, o columnas, que vamos a intercambiar:

> with(linalg):

> A:=matrix([[2,-1,-1],[-1,1,-2],[1,-2,3]]):

> A=evalm(A),cambio_fila_2y3=swaprow(A,2,3),cambio_columna_1y3=swapcol(A,1,3);

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]

Para multiplicar todos los elementos de una fila, o de una columna, por un escalar se utilizan los comando mulrow y mulcol, respectivamente, del paquete linalg. Como argumentos se dan la matriz, la posición de la fila o columna y el escalar:

> A=evalm(A),fila2por3=mulrow(A,2,3),columna3por_k=mulcol(A,3,k);

[Maple Math]

También es posible multiplicar todos los elementos de una fila, o columna, por un escalar y sumar el resultado a otra fila, o columna. Para esto se utilizan los comando addrow y addcol, respectivamente, del paquete linalg. Como argumentos damos la matriz; la posición de las fila, o columna, que va a ser multiplicada; la posición de la fila, o columna, a la que vamos a sumar la anterior; y el valor del escalar:

> A=evalm(A),fila1+fila2_por3=addrow(A,2,1,3),col3+col1_por(-1)=addcol(A,1,3,-1);

[Maple Math]

Con todos estos comandos podemos triangular una matriz dada. Por ejemplo:

> A=evalm(A);

> A1:=swaprow(A,1,3):A2:=addrow(A1,1,2,1):A3:=addrow(A2,1,3,-2):

> swapfil1y3=evalm(A1),fila2+fila1por(1)=evalm(A2),fila3+fila1por(-2)=evalm(A3);

> A4:=addrow(A3,2,3,3):fila3+fila2por3=evalm(A4);restart:

[Maple Math]
[Maple Math]
[Maple Math]

De todas formas MAPLE es capaz de hacer todo este proceso por sí solo, con el comando gausselim (eliminación gaussiana) del paquete linalg, que recibe como parámetro la matriz inicial:

> with(linalg):A:=matrix([[2,-1,-1],[-1,1,-2],[1,-2,3]]);gausselim(A);restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]
[Maple Math]

Pivoteo de una matriz

Podemos elegir en una matriz un elemento pivote. Pivotar una matriz con respecto a un elemento supone conservar la fila del elemento tal y como está, pero anular los demás elementos de la columna del pivote (sumando a cada fila la del elemento pivote multiplicada por el escalar apropiado). El comando de MAPLE para pivotar una matriz es pivot, del paquete linalg, que recibe como argumentos la matriz y la posición del elemento pivote:

> A:=matrix([[2,-1,-1],[-1,1,-2],[1,-2,3]]):

> with(linalg):

> A=evalm(A),pivote2,3=pivot(A,2,3);

> restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]

RANGO

Podemos obtener el rango de una matriz con el comando rank, del paquete linalg:

> A:=matrix([[1,2,3],[4,5,6],[2,4,6]]):

> with(linalg):

> A=evalm(A),rango=rank(A),eliminacion_gaussiana=gausselim(A);

> restart:

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]

DETERMINANTES

Para calcular el valor de un determinante MAPLE tiene el comando det del paquete linalg. Como argumento damos la matriz (cuadrada evidentemente) cuyo determinante queremos hallar.

> A:=matrix([[1,0,2],[-2,-4,5],[0,1,-1]]);

> with(linalg):

> Det(A)=det(A);

> restart:

[Maple Math]

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]

VOLUMEN DE UN TETRAEDRO

Para hallar el volumen de un tetraedro de vértices A(a1,a2,a3), B(b1,b2,b3), C(c1,c2,c3) y D(d1,d2,d3) podemos utilizar el determinante de la siguiente matriz:

> M:=matrix([[b1-a1,c1-a1,d1-a1],[b2-a2,c2-a2,d2-a2],[b3-a3,c3-a3,d3-a3]]);

[Maple Math]

Esta matriz se puede transformar en esta:

> M:=matrix([[1,0,0,0],[a1,b1-a1,c1-a1,d1-a1],[a2,b2-a2,c2-a2,d2-a2],[a3,b3-a3,c3-a3,d3-a3]]);

[Maple Math]

Que es igual a esta:

> M:=matrix([[1,1,1,1],[a1,b1,c1,d1],[a2,b2,c2,d2],[a3,b3,c3,d3]]);

[Maple Math]

Así, el volumen del tretraedro se calcula:

> Vol(ABCD)=1/6*Det(evalm(M));

[Maple Math]

Vamos a escribir un procedimiento que devuelva el volumen de un tetraedro dando sus vértices como argumento:

> voltetra:=proc(a,b,c,d::list)

> local M,A,vol:

> A:=matrix([[1,1,1,1]]);

> with(linalg):

> M:=stackmatrix(A,transpose(matrix([a,b,c,d])));

> #stackmatrix apila dos matrices

> restart:

> vol:=1/6*det(M)

> end:

> vol=voltetra([2,3,1],[4,1,-2],[6,3,7],[-5,-4,8]);

Warning, new definition for norm

Warning, new definition for trace

[Maple Math]

ECUACIÓN DEL PLANO

Para definir un plano necesitamos dos vectores v(v1,v2,v3) y w(w1,w2,w3) y un punto m(m1,m2,m3). Así, cualquier punto genérico X(x,y,z) que pertenezca al plano cumplirá el sistema:

> ec1:=v1*t+w1*s=x-m1;

> ec2:=v2*t+w2*s=y-m2;

> ec3:=v3*t+w2*s=z-m3;

[Maple Math]
[Maple Math]
[Maple Math]

En el paquete linalg el comando genmatrix, con la opción flag, genera la matriz del sisema.

> with(linalg):

> C:=genmatrix([ec1,ec2,ec3],[t,s]): #genmatrix genera la matriz de coeficientes

> S:=genmatrix([ec1,ec2,ec3],[t,s],flag): #genmatrix, con la opción flag, genera la matriz del sistema

> Coeficientes=evalm(C),Sistema=evalm(S);

[Maple Math]

La matriz de coeficientes debe tener rango 2, pues los dos vectores que definen el plano deben ser linealmente independientes. Por los tanto, el sistema tendrá solución únicamente si el rango de la matriz del sistema tiene rango 2 (si tuviera rango 3 el sistema sería incompatible). Por lo tanto el determinante de la matriz del sistema debe ser nulo:

> Det(evalm(S))=0;

[Maple Math]

Podemos desarrollar este determinante, sacando factor común x,y,z, con el comando collect de MAPLE:

> d:=det(S)=0:

> collect(d,[x,y,z]);

[Maple Math]
[Maple Math]

Podemos escribir un procedimiento que devuelva la ecuación que define un plano dando como argumentos los vectores directores del plano y un punto del plano:

> ecuplano:=proc(v,w,m::list)

> local X,M,Ind,S;

> X:=matrix([[x,y,z]]):M:=matrix([m]):Ind:=evalm(X-M);

> with(linalg):

> S:=concat(transpose(matrix([v,w])),transpose(Ind)); #concat une matrices del mismo nº de filas, una a la derecha de otra

> det(S)=0

> end:

> ec:=ecuplano([1,2,3],[2,0,1],[0,1,1]);

[Maple Math]

FUNCIONES

MAPLE permite dibujar funciones en el plano y en el espacio, para ello utiliza los comandos plot y plot3d, respectivamente.

FUNCIONES EN EL PLANO

DEFINICIÓN

A PRIORI

Para definir una función a priori se utiliza el operador ->

> f:=x->x^2-2*x+1;

[Maple Math]

> g:=t->1/2*9.8*t^2;

[Maple Math]

En el caso de haber varias variables se escriben todas entre paréntesis:

> h:=(x,y,z)->x^2+y*z-1;

[Maple Math]

Es posible especificar el tipo de variable independiente, por ejemplo:

> f:=(x::integer)->x;

[Maple Math]

FUNCIONES DEFINIDAS A TROZOS

Para definir funciones a trozos utilizamos en comando piecewise, inidcando el primer intervalo, la primera función, el segun inervalor, la segunda función, etc:

> f:=x->piecewise(x<=0,x^2+2*x+1,x<4,1,x>=4,x-3);

> plot(f(x),x=-4..6,y=-1..3);

[Maple Math]
[Maple Plot]

FUNCIONES CON VALORES ABSOLUTOS

El comando abs calcula el valor absoluto de una expresión.

> g:=x->abs((x-1)*(x+1));plot(g(x),x=-3..3);

[Maple Math]
[Maple Plot]

A POSTERIORI

Podemos tomar el resultado de un cálculo anterior y convertirlo en función con el comando unapply, que tiene como primer argumento la candidata a función y como segundo argumento la candidata a variable independiente.

> a:=expand(2*(x-1)^2+3);

> f:=unapply(a,x);

[Maple Math]
[Maple Math]

IMÁGENES

Para obtener la imagen de un cierto valor se hace:

> f:=x->3*x-1;

[Maple Math]

> f(2);

[Maple Math]

> g:=(ci,r,t)->ci*(1+r/100)^t;

[Maple Math]

> g(3000,5,3);

[Maple Math]

Podemos obligar a que se evalúe la salida obtenida con evalf:

> evalf(%);

[Maple Math]

OPERACIONES CON FUNCIONES

SUMA Y RESTA DE FUNCIONES

A partir de dos o más funciones podemos definir la función suma y resta:

> f:=x->2*x-4:g:=x->x^2-4:

> suma:=x->f(x)+g(x);resta:=x->f(x)-g(x);

[Maple Math]
[Maple Math]

> with(plots):

> p:=plot({f(x),g(x),suma(x),resta(x)},x=-2..4,color=[yellow,red,green,blue]):

> t:=textplot([[4,f(4),'f(x)'],[4,g(4),'g(x)'],[4,suma(4),'f+g'],[4,resta(4),'f-g']]):

> display(p,t,title=`Suma y resta de funciones`);

> restart:

[Maple Plot]

PRODUCTO Y DIVISIÓN DE FUNCIONES

Para definr el producto o división de dos funciones hacemos:

> f:=x->x-1 : g:=x->x^2-4:

> m1:=x->2*f(x); m2:=x->f(x)*g(x); m3:=x->f(x)^2 ; d1:=x->f(x)/g(x);

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

> plot(m3(x),x=-4..4);

[Maple Plot]

COMPOSICIÓN DE FUNCIONES

Para componer dos funciones podemos hacer:

> f:=x->x-1 : g:=x->x^2+1:

> h:=x->g(f(x));

[Maple Math]

> with(plots):

> p:=plot({f(x),g(x),h(x)},x=-3..3,color=[red,green,blue]):

> t:=textplot([[-3,f(-3),'f(x)'],[-3,g(-3),'g(x)'],[-3,h(-3),'g(f(x))']]):

> display(p,t,title=`Composición de funciones`);

> restart:

[Maple Plot]

TRASLACIÓN DE FUNCIONES

Vamos a tratar aquí cómo podemos trasladar matemáticamente una determinada función horizontal y verticalmente.

TRASLACIÓN VERTICAL

Para trasladar una función verticalmente basta con sumar, o restar, un valor a la función: g(x)=f(x)+k

Vamos a ver cómo se traslada verticalmene la función f(x)=x^2-3:

> f:=x->x^2-3:

> with(plots):

> animate(f(x)+t,x=-3..3,t=-3..3);

> restart:

[Maple Plot]

Como podemos ver, el comando animate (que está en el paquete plots) permite ver la secuencia de movimientos. Como parámetros tiene la función (con dos variables: la x y el paso de tiempo), el rango del eje x y el rango de tiempo. Si hacemos click sobre la figura aparecerá un menú con las opciones clásicas de un video. Únicamene tenemos que probar.

TRASLACIÓN HORIZONTAL

Para trasladar una función horizontalmente basta con sumar, o restar, un valor al argumento de la función: g(x)=f(x+k)

Vamos ver cómo se traslada horizontalmente la función f(x)x^2-3:

> f:=x->x^3:

> with(plots):

> animate(f(x+t),x=-6..6,t=-3..3);

> restart:

[Maple Plot]

INVERSA DE UNA FUNCIÓN

La función inversa de otra dada se puede obtener así:

> f:=x->x^(1/2);solve(y=f(x),x);g:=unapply(%,y);

[Maple Math]
[Maple Math]
[Maple Math]

> plot({f(x),g(x)},x=0..4,y=0..4,scaling=constrained);

[Maple Plot]

LOS COMANDOS MAP Y ZIP

Se puede aplicar una función de una variable a una estructura (conjunto, lista, vector, etc) usando el comando map:

> f:=x->2*x;C:={1,2,3,4,5};map(f,C);

[Maple Math]
[Maple Math]
[Maple Math]

El comando para funciones de dos variables es zip:

> g:=(x,y)->x^2+y^2;A:=[1,3,5,7];B:=[2,4,6,8];zip(g,A,B);

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

GRÁFICA DE UNA FUNCIÓN

EL COMANDO PLOT

Con el comando plot podemos dibujar una o varias funciones. Además de la función indicamos el intervalo de valroes en los que se pintará la función (obligatorio) y el intervalo de valores del eje Y (opcional).

> f:=x->(x-1)^3:

> plot(f(x),x=-1..3);

[Maple Plot]

Si hacemos click sobre el cuadro de la función veremos cómo se activa un nuevo menú que nos permitirá colocar los ejes, cambiar el aspecto de la función, etc. Ánimo... la curiosidad es la mejor baza.

Si lo que queremos es representar varias funciones a la vez también podemos usar el comando plot, pero ahora debemos pasar un conjunto de funciones (entre llaves, aunque también podemos pasar una lista de las funciones, entre corchetes). Podemos elegir los colores de cada una con la opción color y el nombre de los colores en inglés:

> f:=x->x : g:=x->x^2 : h:=x->x^3:

> plot({f(x),g(x),h(x)},x=-2..2,color=[red,green,blue]);

[Maple Plot]

Podemos utilizar más opciones de plot. Lo mejor es acudir a la ayuda y experimentar:

> ?plot

TEXTOS EN LAS GRÁFICAS

Se puede rotular una gráfica utilizando el comando textplot. Como argumentos se dan listas que se forman con las coordenadas y el texto, entre comilla simple, que queremos escribir:

Para ver el resultado necesitamos el comando display.

> ?textplot

EL COMANDO DISPLAY

El comando display está en el paquete plots, y permite pintar varias gráficas juntas, con rótulos e incluso título:

> ?plots,display

Si queremos pintar varais gráficas y rotularlas, la mejor opción es ir definiendo cada gráfica con el comando plot y guardarlas como variables. Los rótulos se definen con textplot y se guardan en otra variable. El comando display permite recoger todas estas variables y pintar la gráfica.

> with(plots):

> g1:=plot(ln(x),x=0.1..7,color=red):

> g2:=plot(exp(x),x=-5..2,color=blue):

> g3:=plot(x,x=-4..5,color=green):

> t:=textplot([[6,ln(6)-1,'ln(x)'],[3,exp(2),'exp(x)'],[6,5,x]]):

> display(g1,g2,g3,t,title=`Funciones inversas`,scaling=CONSTRAINED);

> restart:

[Maple Plot]

MOVIMIENTO EN LAS GRAFICAS: animate

El comando animate del paquete plots permite animar gráficas. Es necesario dar tres parámetros: la función, que debe depender de dos variables (la variable independiente normal y otra variable que indique el paso temporal para la animación), el rango de variación de la variable independiente y el intervalo de variación del paso temporal. Es recomendable ver qué otras opciones tiene animate:

> ?plots,animate

Una vez pintada la gráfica, al hacer click sobre ella quedará seleccionada y aparecerá un menú, parecido al de un video, en la barra de menús: la curiosidad es la mejor recomendación:

> with(plots):animate(sin(t*x),x=-Pi..Pi,t=-10..10);restart:

[Maple Plot]

GRÁFICAS EN DIFERENTES COORDENADAS

Además de la representación en forma explícita clásica, que se realiza con el comando plot. También podemos representar curvas implícitas, en paramétricas y en coordenadas polares.

REPRESENTACIÓN IMPLÍCITA

Para representar una función con ecuaciones implícitas se utiliza el comando implicitplot del paquete plots. Al comando implicitplot hay que darle la función implícita, el intervalo de variación de la variable independiente y el intervalo de variación de la variable dependiente.

> with(plots):implicitplot(x^2-y^2=2,x=-3..3,y=-3..3,scaling=CONSTRAINED);restart:

[Maple Plot]

Haciendo click sobre la figura, ésta queda seleccionada y se activa un menú (en la barra de menús) con diferentes opciones para probar.

REPRESENTACIÓN PARAMÉTRICA

Para representar una curva en ecuaciones paramétricas se utiliza el comando plot. El conjunto de ecuaciones paramétricas se le da a plot en forma de lista ordenada: primero x(t), luego y(t), junto con la variación del parámetro t. El resto de opciones de plot siguen siendo válidas.

Una de las conocidas curvas de Lissajous se puede obtener así:

> plot([5*sin(1/4*t),7*sin(t),t=-2*Pi..8*Pi]);

[Maple Plot]

La curva locura de Stanley S. Miller ilustra de una forma excelente la representación de curvas a través de ecuaciones parametrizadas:

> plot([sin(0.99*t)-0.7*cos(3.1*t),cos(1.01*t)+0.1*sin(15.03*t),t=0..50],color=blue);

[Maple Plot]

COORDENADAS POLARES

MAPLE puede representar curvas dadas en coordenadas polares utilizando el comando polarplot del paquete plots. Este comando recibe dos parámetros: la función polar r=r(theta) y el intervalo de variación del argumento.

> with(plots):polarplot(5,theta=0..Pi/2,scaling=CONSTRAINED);restart:

[Maple Plot]

> with(plots):polarplot(cos(6*alpha),alpha=0..2*Pi,scaling=CONSTRAINED);restart:

[Maple Plot]

También podemos dar el módulo y el argumento en forma paramétrica, utilizando también el comando polarplot dando una lista ordenada con la ecuación del módulo y la del argumento en función de un parámetro, y dando el intervalo de variación del parámetro.

> with(plots):polarplot([t,t,t=0..4*Pi],color=blue,scaling=CONSTRAINED);restart:

[Maple Plot]

GRÁFICAS A TRAMOS

Podemos representar una curva poligonal haciendo una lista de los vértices por los que pasa. Los pares ordenados se ponen entre corchetes, como las listas, para indicar precisamente que están ordenados.

> p:=[[-3,1],[-1,0],[1,3],[2,4],[4,5],[6,2]]:

> plot(p,x=-4..7);

[Maple Plot]

SUPERFICIES Y CURVAS EN EL ESPACIO

Además de la representación en forma explícita, que se realiza con el comando plot3d. También podemos representar superficies dadas de modo implícito, en paramétricas y en coordenadas esféricas y cilíndricas.

EL COMANDO plot3d

MAPLE puede representar superficies en el espacio con el comando plot3d, al que hemos de darle la función explícita de dos variables y el intervalo de variación de cada una de ellas

> f:=(x,y)->x^2-y^2;

> plot3d(f(x,y),x=-8..8,y=-8..8,grid=[50,50]);

[Maple Math]
[Maple Plot]

Si hacemos click sobre la imagen se activará un menú en la barra de menús que nos permitirá elegir el tipo de grid, los ejes y la escala, así como rotar la función alrededor de los ejes. Si hacemos click sin soltar el botón sobre la función podremos moverla para verla desde diferentes ángulos.

El comando plot3d tiene muchas opciones con las que podemos cambiar el aspecto de la gráfica (como la opción grid utilizada en el ejemplo. Es recomendable acudir a la ayuda de MAPLE para ver estas opciones:

> ?plot3d[option]

Con el comando plot3d podemos pintar varias funciones a la vez, basta con pasar como parámetro al comando plot3d el conjunto de las funciones a representar.

> f:=(x,y)->sin(x)-cos(x);

> g:=(x,y)-> cos(x*y);

> plot3d({f(x,y),g(x,y)},x=-Pi..Pi,y=0..Pi,axes=BOXED);

[Maple Math]
[Maple Math]
[Maple Plot]

SUPERFICIES EN PARAMÉTRICAS

Para representar una superficie dada en forma de ecuaciones paramétricas basta con utilizar el ç comando plot3d dando como primer argumento la lista de las ecuaciones paramétricas y después el intervalo de variación de los parámetros:

> x:=-(3+sin(u))*sin(v):y:=(3+sin(u))*cos(v):z:=cos(v):

> plot3d([x(u,v),y(u,v),z(u,v)],u=-Pi..Pi,v=-Pi..Pi,axes=BOXED,orientation=[137,72]);

[Maple Plot]

Si hacemos girar una circunferencia definida en el plano YZ, en torno al eje X, obtendremos un toro:

> x:=10*cos(u)+3*cos(u)*cos(v):y:=10*sin(u)+3*sin(u)*cos(v):z:=3*sin(v):

> plot3d([x(u,v),y(u,v),z(u,v)],u=0..2*Pi,v=0..2*Pi,axes=NORMAL,labels=[X,Y,Z],scaling=CONSTRAINED);

[Maple Plot]

SUPERFICIES EN FORMA IMPLÍCITA

Para representar superficies dadas en forma implícita necesitamos el comando implicitplot3d del paquete plots. Como primer argumento damos la función en forma implícita y después el intervalo de variación de las tres variables. Aquí tenemos la representación de un paraboloide hiperbólico:

> restart:with(plots):

> implicitplot3d(x^2-y^2-z=0, x=-5..5, y=-5..5,z=-5..5,orientation=[68,51],grid=[20,20,20],axes=BOXED);

> restart:

[Maple Plot]

Y aquí la de un hiperboloide (de una hoja):

> with(plots):

> implicitplot3d(x^2+y^2-z^2=1, x=-4..4, y=-4..4, z=-4..4,orientation=[59,67],grid=[20,20,20],axes=BOXED);

> restart:

[Maple Plot]

CUÁDRICAS

Las llamadas superficies cuadráticas, o simplemente cuádricas, se definen mediante ecuaciones de la forma:

> f:=Sum(a[ij]*x[i]*x[j],ij=i..3)+Sum(b[i]*x[i],i=1..3)+c=0;

[Maple Math]

Los casos no triviales se pueden llevar a uno de los seis siguientes:

1.- Elipsoide:

> with(plots):

> ec1:=x^2/a^2+y^2/b^2+z^2/c^2=1;a:=5:b:=4:c:=3:

> implicitplot3d(ec1,x=-5..5,y=-4..4,z=-3..3,axes=BOXED,scaling=CONSTRAINED,title=`Elipsoide`,orientation=[68,73]);

> restart:

[Maple Math]
[Maple Plot]

2.- Hiperboloide de una hoja:

> with(plots):

> ec1:=x^2/a^2+y^2/b^2-z^2/c^2=1;a:=5:b:=4:c:=3:

> implicitplot3d(ec1,x=-10..10,y=-10..10,z=-6..6,axes=BOXED,scaling=CONSTRAINED,title=`Hiperboloide de una hoja`,orientation=[61,73]);

> restart:

[Maple Math]
[Maple Plot]

3.- Hiperboloide de dos hojas:

> with(plots):

> ec1:=x^2/a^2-y^2/b^2-z^2/c^2=1;a:=5:b:=4:c:=3:

> implicitplot3d(ec1,x=-15..15,y=-15..15,z=-10..10,axes=NORMAL,scaling=CONSTRAINED,title=`Hiperboloide de dos hojas`,orientation=[115,74]);

> restart:

[Maple Math]
[Maple Plot]

4.- Paraboloide elíptico:

> with(plots):

> ec1:=x^2/a^2+y^2/b^2-z=0;a:=5:b:=4:

> implicitplot3d(ec1,x=-20..20,y=-20..20,z=0..17,axes=NORMAL,scaling=CONSTRAINED,title=`Paraboloide elíptico`,orientation=[81,69]);

> restart:

[Maple Math]
[Maple Plot]

5.- Paraboloide hiperbólico:

> with(plots):

> ec1:=x^2/a^2-y^2/b^2-z=0;a:=5:b:=4:

> implicitplot3d(ec1,x=-10..10,y=-10..10,z=-6..6,axes=BOXED,scaling=CONSTRAINED,title=`Paraboloide elíptico`,orientation=[69,64]);

> restart:

[Maple Math]
[Maple Plot]

6.- Cono cuádrico (x,y,z><>(0,0,0):

> with(plots):

> ec1:=x^2/a^2+y^2/b^2-z^2/c^2=0;a:=5:b:=4:c:=3:

> implicitplot3d(ec1,x=-10..10,y=-10..10,z=-6..6,axes=BOXED,scaling=CONSTRAINED,title=`Cono cuádrico`,orientation=[52,81]);

> restart:

[Maple Math]
[Maple Plot]

SUPERFICIES EN COORDENADAS ESFÉRICAS

MAPLE puede representar superficies dadas en coordenadas esféricas usando el comando sphereplot del paquete plots.

> with(plots):

> r:=(theta,phi)->5*theta*phi;

> sphereplot(r(theta,phi),theta=0..2*Pi,phi=0..2*Pi,axes=BOXED,style=LINE,orientation=[-137,36]);

> restart:

[Maple Math]
[Maple Plot]

SUPERFICIES EN COORDENADAS CILÍNDRICAS

MAPLE puede representar superficies dadas en coordenadas cilíndricas usando el comando cylinderplot del paquete plots.

> with(plots):

> r:=(theta,z)->2*theta;

> cylinderplot(r(theta,z),theta=0..5*Pi,phi=0..10,axes=BOXED,style=LINE);

> restart:

[Maple Math]
[Maple Plot]

TEXTO EN LAS GRÁFICAS. COMANDO display

Se puede incluir texto en las gráficas con el comando textplot3d del paquete plots indicando, en forma de lista, las tres coordenadas y el text.

El proceso es el siguiente:

1) definimos la gráfica (con plot3d o implicitplot3d) y la guardamos en una variable

2) usando textplot3d definimos los textos y los guardamos en otra variable

3) por último utilizamos el comando display, del paquete plots, para pintarlo todo. display recibe en forma de conjunto las variariables que guardan las gráficas y los textos. Además display puede recibir muchas opciones. Conviene visitar la ayuda de MAPLE y tener curiosidad.

> with(plots):

> ec1:=x^2/a^2-y^2/b^2-z=0;a:=5:b:=4:

> c:=implicitplot3d(ec1,x=-10..10,y=-10..10,z=-6..6,axes=BOXED,scaling=CONSTRAINED,title=`Paraboloide elíptico`,orientation=[139,57],style=PATCHNOGRID): #hemos guardado la grafica en la variable g

> t:=textplot3d([0,0,0,`Punto de silla`], font=[COURIER,BOLD,14],color=black): #hemos guardado los textos en la variable t

> display({c,t},title=`Punto de silla en un paraboloide hiperbólico`);

> restart:

[Maple Math]
[Maple Plot]

CURVAS EN EL ESPACIO

Para representar curvas en el espacio se utiliza el comando spacecurve del paquete plots. Este comando recibe las ecuaciones paramétricas de la función en forma de lista, y el intervalo de variación del parámetro.

> with(plots):

> x:=t->2*cos(t):y:=t->2*sin(t):z:=t->t:

> spacecurve([x(t),y(t),z(t)],t=0..6*Pi,axes=NORMAL,labels=[X,Y,Z],orientation=[96,63],title=`HELICE CIRCULAR`);

> restart:

[Maple Plot]

El comando tubeplot, del paquete plots, permite realzar la curva con la opción radius, que permite dar grosor, en forma de tubería, a la curva. Para ello incluiremos la opción radius=a un número que será el grosor de la tubería:

> with(plots):

> x:=t->20*cos(t):y:=t->20*sin(t):z:=t->t:

> tubeplot([x(t),y(t),z(t)],t=0..6*Pi,axes=NORMAL,labels=[X,Y,Z],orientation=[-32,67],radius=2,scaling=UNCONSTRAINED,title=`Tubo en forma de hélice circular`);

> restart:

[Maple Plot]

ANIMACIÓN EN TRES DIMENSIONES: animate3d

MAPLE permite animar gráficas en el espacio con el comanod animate3d del paquete plots. Es necesario dar la función con un parámetro, que indicará el paso temporal. También es preciso dar los intervalos de variación de las variables de la función y del parámetro temporal.

> with(plots):

> f:=(x,y)->cos(t*x)^2+sin(t*y):

> animate3d(f(x,y),x=0..Pi,y=0..Pi,t=1..2);

> restart:

[Maple Plot]

Una vez dibujada la gráfica hacemos click sobre ella. Entonces aparecerá un menú, similar al de un video, en la barra de menús. Basta con pular el play...

LÍMITES DE FUNCIONES

Podemos hallar el límite de una función con el comando limit, que presenta la expresión inerte si se escribe Limit. Es necesario pasar dos parámetros a este comando: la función cuyo límite queremos calcular y el valor hacia el que tiende la variable.

> f:=x->x^2/(2*x^2+3):

> Limit(f(x),x=2)=limit(f(x),x=2);

[Maple Math]

En el caso de que la variable tienda a infinito utilizaremos la palabra clave infinity:

> Limit(f(x),x=infinity)=limit(f(x),x=infinity);

[Maple Math]

Cuando el límite no existe recibiremos contestaciones como esta:

> Limit(sin(x),x=infinity)=limit(sin(x),x=infinity);

[Maple Math]

LÍMITES LATERALES

También podemos evaluar el límite de una función en un punto por la izquierda y por la derecha con las opciones left y right, respectivamente, del comando limit:

> f:=x->x/(x-1):

> Limit(f(x),x=1,left)=limit(f(x),x=1,left);

> Limit(f(x),x=1,right)=limit(f(x),x=1,right);

> Limit(f(x),x=1)=limit(f(x),x=1);

> plot(f(x),x=-3..3,y=-5..5,discont=true,color=red);

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Plot]

CONTINUIDAD DE UNA FUNCIÓN

Ya sabemos que para que una función sea continua en un punto x=a, el límite de la función en x=a, por la izquierda y por la derecha, y el valor de la función en el punto, f(a), deben coincidir.

> f:=x->piecewise(x<0,x^2,x<2,x,x>=2,1):

> plot(f(x),x=-2..5,discont=true,color=blue);

[Maple Plot]

Vamos a ver la continuidad de esta función en x=0 y en x=2.

La función es continua en x=0.

> limit(f(x),x=0,left);

> limit(f(x),x=0,right);

> f(0);

[Maple Math]
[Maple Math]
[Maple Math]

Pero es discontinua en x=2

> limit(f(x),x=2,left);

> limit(f(x),x=2,right);

> f(2);

[Maple Math]
[Maple Math]
[Maple Math]

En la librería general está el comando iscont, que nos dice si una función es, o no, contínua:

> readlib(iscont):iscont(f(x),x=-2..5);

[Maple Math]

Y, también en la librería general está el comando discont, que devuelve los valores de abscisa donde se encuentran puntos anómalos (aunque a veces no son discontinuidades):

> readlib(discont):discont(f(x),x);restart:

[Maple Math]

ASÍNTOTAS DE UNA FUNCIÓN

Podemos encontrar las asíntotas de una función mediante la utilización de límites.

ASÍNTOTAS HORIZONTALES

Las asíntotas horizontales (AH) se calculan de la siguiente manera:

> restart:

> AHd=Limit(f(x),x=infinity);

También podemos ver las AH hacia la izquierda:

> AHi=Limit(f(x),x=-infinity);

[Maple Math]
[Maple Math]

La siguiente función tiene AH en y=0 por la derecha y por la izquierda:

> f:=x->x/(x^2+1);

> AHd=limit(f(x),x=infinity);

> AHi=limit(f(x),x=-infinity);

> plot(f(x),x=-100..100);

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Plot]

La siguiente función tiene AH en y=0 únicamente por la izquierda:

> f:=x->exp(x);

> AHd=limit(f(x),x=infinity);

> AHi=limit(f(x),x=-infinity);

> plot(f(x),x=-4..4);

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Plot]

ASÍNTOTAS VERTICALES

Una función tiene asíntotas verticales (AV) en x=k si el límite cuando x tiende a k de la función es infinito (más infinito o menos infinito) o indeterminado.

El comando discont de la librería general devuelve puntos anómalos candidatos a ser AV:

> readlib(discont):

> f:=x->x^2/(x^2-1);

> discont(f(x),x);

> limit(f(x),x=-1);

> limit(f(x),x=1);

> plot(f(x),x=-2..2,y=-10..10,discont=true,color=blue);

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Plot]

ASÍNTOTAS OBLICUAS

Las asíntotas oblicuas (AO) son rectas (y=mx+n) cuya pendiente y ordenada hay que determinar.

Para determinar la pendiente efectuamos el límite:

> restart:

> m=Limit(f(x)/x,x=infinity);

[Maple Math]

Si este límite se va a infinito no hay AO. Si el límite se anula es probable que haya una AH.

Para determinar la ordenada en el origen (n) de la AO se calcula el siguiente límite:

> n=Limit(f(x)-m*x,x=infinity);

[Maple Math]

> f:=x->x^2/(x-2);

> m:=limit(f(x)/x,x=infinity);

> n:=limit(f(x)-m*x,x=infinity);

[Maple Math]
[Maple Math]
[Maple Math]

> AO:=x->m*x+n;

[Maple Math]

> plot([f(x),AO(x)],x=-3..10,y=-5..20,color=[blue,red]);

[Maple Plot]

SUCESIONES Y SERIES

A pesar de que en el lenguaje corriente sucesión y serie sean términos sinónimos, en el lenguaje matemático son conceptos muy distintos.

Matemáticamente hablando, una sucesión es una aplicacion que asigna a un entero positivo un número real, o complejo. La sucsión converge si, cuando n tiende a infinito, la difencia entre dos términos consecutivos de la sucesión tiende a cero.

Se llama serie a la sucesión de las sumas parciales de los términos de sucesión.

SUCESIÓN:

> seq(a[n],n=1..5);

[Maple Math]

SERIE:

> seq(s[n]=sum(a[i],i=1..n),n=1..5);

[Maple Math]

SUCESIONES

El comando seq (sequence) define sucesiones finitas a través de su ley de formación. Este comando recive dos parámetros: la ley de formación expresada con una variable contadora y la variación de la variable contadora:

> seq(i,i=0..10);

[Maple Math]

> seq(evalf((1+1/n)^n,5),n=1..10);

[Maple Math]

Podemos poner subíndices indicándolos entre corchetes:

> seq(a[i],i=1..10);

[Maple Math]

LÍMITE DE UNA SUCESIÓN

Para hallar el límite de una sucesión utilizamos el comando limit, que en su forma Limit devuelve la expresión inerte del límite. Como parámetros limit precisa la expresión de la sucesión y la opción n=infinity:

> restart:

> seq(1/n,n=1..10);

> Limit(1/n,n=infinity)=limit(1/n,n=infinity);

[Maple Math]
[Maple Math]

SERIES

Ya sabemos que la serie es la sucesión de las sumas parciales. Para evaluarla utilizamos el sumatorio a través del comando sum. Este comando devuelve la expresión inerte si se escribe Sum, y recibe dos parámetros: la expresión y el rango de variación del contador:

> Sum(2*n+1,n=0..10)=sum(2*n+1,n=0..10);

[Maple Math]

Si evaluamos el sumatorio sobre infinitos términos obtenemos la serie infinita o, sencillamente, la serie. Para indicar el infinito utilizamos la palabra clave infinity. Por ejemplo, la serie armónica diverge, como podemos ver aqui:

> Sum(1/i,i=1..infinity)=sum(1/i,i=1..infinity);

[Maple Math]

Sin embargo la serie resultante de sumar los inversos de las potencias de 2 converge:

> Sum(1/2^i,i=0..infinity)=sum(1/2^i,i=0..infinity);

[Maple Math]

MAPLE es capaz de evaluar series dando expresiones, no únicamente resultados numéricos:

> Sum((-1)^(i-1)*1/i,i=1..infinity)=sum((-1)^(i-1)*1/i,i=1..infinity);

[Maple Math]

MAPLE también puede evaluar series que contienen parámetros:

> assume(r<1);

> Sum(r^i*cos(i*alpha),i=0..infinity)=sum(r^i*cos(i*alpha),i=0..infinity);

> restart:

[Maple Math]

PRODUCTORIOS

De igual forma que los sumatorios, los productorios se evaluan en MAPLE con un comando, product, que si se escribe Product devuelve la expresion inerte, y que recibe dos parámetros: la expresión y la variación del contador:

> Product(1/i,i=1..10)=product(1/i,i=1..10);

[Maple Math]

DERIVADAS

MAPLE es capaz de realizar cualquier cálculo con derivadas: derivación implícita, logarítmica, derivada parcial, etc. Para ello utiliza los comandos diff y D. El comando diff ofrece la forma inerte si lo escribimos Diff:

EL COMANDO diff

Para hallar la derivada de una función se utiliza el comando diff, que en su forma Diff da la expresión inerte de la derivada. diff tiene dos argumentos: la función a derivar y la variable respecto de la que se deriva.

> f:=x^2*sin(x):

> Diff(f,x) = diff(f,x);

[Maple Math]

diff puede aplicarse sobre una expresión, como en el caso anterior, o sobre una función:

> f:=x->x^2*sin(x):

> Diff(f(x),x) = diff(f(x),x);

[Maple Math]

Podemos preguntarle a MAPLE las diferentes reglas de derivación: ¡se las sabe todas! (incluso con la aplicación de la regla de la cadena):

> restart:

> Diff(sin(x),x)=diff(sin(x),x);

[Maple Math]

> Diff(cos(f(x)),x)=diff(cos(f(x)),x);

[Maple Math]

> Diff(arctan(f(x)),x)=diff(arctan(f(x)),x);

[Maple Math]

DERIVADAS DE ORDEN SUPERIOR

Para hacer una deriva de orden superior ponemos la variable a derivar tantas veces como sea el orden de la derivada. Por ejemplo, para hallar la derivada quinta de la función f=sin(x^2), hacemos:

> diff(sin(x^2),x,x,x,x,x);

[Maple Math]

Aunque también podemos escribir x$5 en vez de x cinco veces:

> diff(sin(x^2),x$5);

[Maple Math]

DERIVADAS PARCIALES

Cuando una función tiene varias variables se deriva respecto de una de ellas, considerando constante a las demás:

> f:=(x,y,z)->x^2+4*x*y-y^2*z^3+5:

> Diff(f(x,y,x),y,x) = diff(f(x,y,z),y,x);

[Maple Math]

DERIVACIÓN LOGARÍMICA

Para hacer derivadas de funciones potencial exponenciales recurrimos al logaritmo neperiano.

> y=x^x;

> ln(y(x)) = x*ln(x);

> diff(ln(y(x)),x) = diff(x*ln(x),x);

> diff(y(x),x) = y(x)*diff(x*ln(x),x);

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

MAPLE no tiene por qué realizar todo este proceso. MAPLE realiza estas deriadas de forma automática:

> diff(x^x,x);

[Maple Math]

FUNCIÓN DERIVADA

Para obtener la función derivada (no la expresión de la derivada) se utiliza el operador D. Este operador únicamente actúa sobre funciones.

> f:=x->x^2;

> F:=D(f);

> plot({f(x),F(x)},x=-3..3,title=`Una función y su función derivada`);

[Maple Math]
[Maple Math]
[Maple Plot]

APLICACIONES DE LA DERIVADA

La derivada se utiliza en multitud de cálculos matemáticos, como pueden ser los desarrollos de Taylor y en serie de potencias, el cálculo de máximos y mínimos, la determinación de ciertos límites de funciones, etc.

PROBLEMAS DE MÁXIMOS Y MÍNIMOS

Hallar los máximos y mínimos relativos de la función: y = e^x·sen(x)

> y:=x->x^4*exp(-x^2);

[Maple Math]

Hallamos la derivada primera y la derivada segunda de la función:

> Diff(y(x),x)=diff(y(x),x);

[Maple Math]

> dp:=rhs(%);

[Maple Math]

> Diff(y(x),x$2)=diff(y(x),x$2);

[Maple Math]

> ds:=rhs(%);

[Maple Math]

Igualamos a cero la primera derivada y resolvemos la ecuación, así encontramos la abscisa de un punto singular, pero no sabemos si es un máximo o un mínimo:

> p:=solve(dp=0,x);

[Maple Math]

Probamos los valores obtenidos en la segunda derivada:

> DS:=unapply(ds,x);

[Maple Math]

> p[1],DS(p[1]);

[Maple Math]

> p[4],DS(p[4]);

[Maple Math]

> p[5],DS(p[5]);

[Maple Math]

Como la derivada segunda en p=0, es 0 sería necesario analizar el comportamiento de f'

La derivada segunda en p=+sqrt(2) da negativo, luego la función tiene un máximo en +sqrt(2)

La derievada segunda en p=-sqrt(2) da negativo, luego la función tiene otro máximo en -sqrt(2)

REGLA DE L'HÔPITAL

En 1696, Guillermo Francisco Antonio de L'Hôpital (1661-1704) escribió el primer libro de cálculo diferencial. Gran parte del contenido de este libro, incluyendo el método conocido como "regla de L'Hôpital", se basó en el trabajo anterior de Juan Bernoulli, uno de los maestros de L'Hôpital.

La regla de L'Hôpital se utiliza para calcular el límite de expresiones f(x)/g(x) donde el numerador f(x) y el denominador g(x) tienden a 0. Se dice que el cociente adopta la forma indeterminada 0/0.

Supongamos que f(x) y g(x) son dos funciones para las que f(a)=g(a)=0. Entonces, para x<>a, tenemos:

> f(x)/g(x)=(f(x)-f(a))/(g(x)-g(a));

[Maple Math]

Si dividimos arriba y abajo por x-a y hacemos el límite cuando x->a obtendremos:

> f(x)/g(x)=Diff(f(a),x)/Diff(g(a),x);

[Maple Math]

Por lo tanto, si existen las derivadas de f y g en a y si la derivada de g en a es distinta de 0, entonces cuando x tiende a a, el cociente f(x)/g(x) tiende al conciente de sus derivadas. Esta es la conocida como "regla de L'Hôpital". Vamos a ver un ejemplo: hallar el límite cuando x tiende a 0 de (1-exp(2x))/(x)

> f:=x->1-exp(2*x):g:=x->x:

> Limit(f(x),x=0)=limit(f(x),x=0);Limit(g(x),x=0)=limit(f(x),x=0);

[Maple Math]
[Maple Math]

> df:=unapply(diff(f(x),x),x);dg:=unapply(diff(g(x),x),x);

[Maple Math]
[Maple Math]

> Limit(df(x),x=0)=limit(df(x),x=0);Limit(dg(x),x=0)=limit(dg(x),x=0);

[Maple Math]
[Maple Math]

Luego el límite buscado es -2/1 = -2

MAPLE aplica la regla de L'Hôpital de forma automática con el comando limit:

> f:=x->1-exp(2*x):g:=x->x:

> Limit(f(x)/g(x),x=0)=limit(f(x)/g(x),x=0);

[Maple Math]

SERIES DE POTENCIAS

Desarrollar una función en serie de potencias supone encontrar un polinomio que aproxime esa función tanto como queramos. Esto puede ser muy útil, ya que los polinomios son fáciles de operar, deivar, integrar, etc.

Se llaman series de potencias a las aproximaciones polinómicas de la forma

> Sum(a[n]*x^n,n=0..infinity);

[Maple Math]

Estas series son un caso particular de las serier geométricas cuya convergencia está asegurada si |r|<1, donde r es la razón de la serie. Así, por ejemplo, si x es complejo y |x|<1, la serie geométrica.

> Sum(x^n,n=0..infinity);

[Maple Math]

converge y su suma es:

> Sum(x^n,n=0..infinity)=sum(x^n,n=0..infinity);

[Maple Math]

Si sustituimos x por -x (utilizando el comando subs) e integramos:

> subs(x=-x,lhs(%))=1/(x+1);

> int(lhs(%),x)=int(rhs(%),x);

[Maple Math]
[Maple Math]

Acabamos de encontrar la serie de potencias que aproxima el logaritmo neperiano de x+1, válido si |x|<=1. Como podemos evaluar la integral del sumatorio, convergene, como el sumatorio de las integrales, obtendremos la serie con el grado de aproximación requerido. Por ejemplo, si n=5:

> ln(x+1)=int(sum((-x)^n,n=0..5),x);p:=unapply(rhs(%),x):

[Maple Math]

Podemos ver el grado de aproximación pintando las funciones: en rojo el logaritmo, en azul el polinomio.

> plot({ln(x+1),p(x)},x=-1..1,color=[red,blue]);

[Maple Plot]

El comando series hace todo esto por nosotros:

> ln(x+1)=series(ln(x+1),x);

[Maple Math]

El paquete powseries de MAPLE contiene comandos sobre la manipulación de series de potencias:

> ?powseries


INTEGRALES

MAPLE puede calcular integrales con el comando int. Si escribimos el comando Int obtendremos la expresión interte de la integral.

En el paquete student hay comandos referidos a la integración. Conviene, por lo tanto, mirar la ayuda:

> ?student

INTEGRAL INDEFINIDA

Podemos integrar expresiones con el comando int dando como primer argumento la expresión, y como segundo argumento la variable con respecto a la cual integramos:

> int(2*x*sin(x),x);

[Maple Math]

Para integrar funciones basta con que el primer parámetro sea la función a integrar:

> f:=x->x*exp(x);Int(f(x),x)=int(f(x),x);

[Maple Math]
[Maple Math]

MAPLE conoce todas las reglas de integración, por ejemplo:

> Int(sin(x),x)=int(sin(x),x);

[Maple Math]

MAPLE es capaz de integrar por diferentes métodos: cambio de variable, por partes y por fracciones simples, aunque para el usuario el procedimiento no se ve, basta con utilizar el comando int. De todas formas podemos forzar a MAPLE a integrar por partes con el comando intparts del paquete student, dando como primer parámetro la expresión de la integral y como segundo parámetro la función u (de int(u·dv) = u·v-int(v·du)):

> with(student):intparts(int(x^4*exp(x),x),x^4);restart:

[Maple Math]

INTEGRAL DEFINIDA

Para evaluar una integral definida también se utiliza el comando int, dando como primer parámetro la expresión o la función a integrar, y como segundo argumento el intervalo de variación de la variable. Recordemos que Int devuelve la expresión inerte:

> Int(x*sin(x),x=0..Pi)=int(x*sin(x),x=0..Pi);

[Maple Math]

> f:=x->1/sqrt(a^2-x^2):

> Int(f(x),x=0..a)=int(f(x),x=0..a);

[Maple Math]

ÁREA BAJO UNA CURVA

Utilizando los comandos letbox, rightbox y middlebox del paquete student podemos ver la interpretación geométrica de la integral definida: como parámetros damos la función, el intervalo del eje X y el número de rectángulos que queremos que aparezcan. También podemos pedir direrentes colores, etc.

Incluso podemos pedir que se calcule la suma de las áreas de los rectángulos (interpretación de la integral de Riemann)

> f:=x->10*x/(x^2+4):

> with(student):

> rightbox(f(x),x=0..5,10);Suma1:=evalf(rightsum(f(x),x=0..5,10));

[Maple Plot]
[Maple Math]

> middlebox(f(x),x=0..5,10);Suma2:=evalf(middlesum(f(x),x=0..5,10));

[Maple Plot]
[Maple Math]

> leftbox(f(x),x=0..5,10);Suma3:=evalf(leftsum(f(x),x=0..5,10));

[Maple Plot]
[Maple Math]

Podemos ver cómo estos tres valores convergen cuando el número de rectángulos crece.

INTEGRALES IMPROPIAS

MAPLE calcula automáticamente integrales impropias, sean de la especie que sean, con el comando int.Como primer argumento se da la expresión a integrar y como segundo argumento el intervalo de integración, poniendo el infinito como infinity

> f:=x->x/(sqrt(x^4+1)):

> Int(f(x),x=0..infinity)=int(f(x),x=0..infinity);

[Maple Math]

> f:=x->exp(-x^2):

> Int(f(x),x=0..infinity)=int(f(x),x=0..infinity);

[Maple Math]

> Int(f(x),x=-infinity..infinity)=int(f(x),x=-infinity..infinity);

[Maple Math]

> f:=x->sin(p*x)^2/x^2:

> Int(f(x),x=0..infinity)=int(f(x),x=0..infinity);

[Maple Math]

> f:=x->exp(-a*x^2):

> assume(a>0):Int(f(x),x=0..infinity)=int(f(x),x=0..infinity);

[Maple Math]

> assume(a=0):Int(f(x),x=0..infinity)=int(f(x),x=0..infinity);

[Maple Math]

> assume(a<0):Int(f(x),x=0..infinity)=int(f(x),x=0..infinity);

[Maple Math]

INTEGRACIÓN NUMÉRICA

El paquete student ofrece métodos numéricos para el cálculo aproximado de integrales, como son el método de los trapecios y el método de Simpson. Los comandos a utilizar son trapezoid y simpson, respectivamente. En ambos casos se pasan tres: la función a integrar, el intervalo de integración y el número de rectángulos (a mayor número mejor aproximación en el cálculo).

> f:=x->x/(sin(x)):

> Int(f(x),x=0..Pi/2)=evalf(int(f(x),x=0..Pi/2));

[Maple Math]

> with(student):evalf(simpson(f(x),x=0.00001..Pi/2,10));restart:

Warning, new definition for D

[Maple Math]

INTEGRALES MÚLTIPLES

Podemos hacer integrales múltiples reiterando el comando int.

> f:=(x,y,z)->x^2+y^2+z^2:

> Int(Int(Int(f(x,y,z),z=0..1),y=0..1),x=0..1)=int(int(int(f(x,y,z),z=0..1),y=0..1),x=0..1);

[Maple Math]

> Int(Int(Int(x^2+y^2+z^2,z = 0 .. 1),y = 0 .. 1),x = 0 .. 1) = 1;

[Maple Math]

También podemos utilizar los comando Doubleint y Tripleint del paquete student, siendo necesario evaluar luego la salida de estos comandos:

> with(student):

> f:=(x,y,z)->x*y*z+x^2:

Warning, new definition for D

> Tripleint(f(x,y,z),z=0..1,y=-2..2,x=-1..1);

[Maple Math]

> %=value(%);

[Maple Math]

En este último comando hemos utilizado el comodín.


OTROS TEMAS

El objetivo de estos apuntes no era el hacer un "manual de referencia" de MAPLE. Lo que se pretendía era mostrar la potencia de este programa de cálculo simbólico, sobre todo para estudiantes universitarios. Por ello no se han tratado todos los comandos posibles, si no únicamente aquellos que podían resultar más útiles para este tipo de público.

MAPLE puede desarrollar también cálculo de lógica, a través del paquete logic; operaciones con elementos de conjuntos y particiones de un número, con el paquete combinat; multitud de operaciones geométricas, con el paquete geometry; cáculos estadísticos, con el paquete stats, etc.

Puede que para futuras revisiones se traten estos temas.

Espero que estos apuntes sean de utilidad. Sin embargo, la mejor recomendación que se puede dar es tener curiosidad a la hora de utilizar MAPLE y hacer constante uso de las ayudas que proporciona (en perfecto inglés).


BIBLIOGRAFÍA

Para la confección de estos apuntes se han utilizado, aparte de las propias ayudas de MAPLE, los siguientes libros:

1.-"Cálculos matemáticos por ordenador con MAPLE V.5", E.Roanes Macías, E.Roanes Lozano. Ed.Rubiños1999

2.-"Cálculus" vol I y II, Tom M. Apostol. Ed.Reverté1986

3.-"Números, grupos y anillos" J.Dorronsoro y E.Hernández. Ed.Addison-Wesley/UAM1996

4.-"Ejercicios de análisis" B. de Diego. Ed.Deimos1983

5.-"Ecuaciones diferenciales y problemas con valores en la frontera" W.E.Boyce y R.C.DiPrima. Ed.Limusa1989

6.-"Fórmulas y tablas de matemática aplicada" Serie Schaum. M.R.Spiegel y L.Abellanas. Ed.McGrawHill1988

7.- "Geometría diferencial" Serie Schaum. M.Lipschutz. Ed.McGrawHill1985

8.-"Juegos de ordenador" de A.K.Dewdney de la revista Investigación y Ciencia, julio 1988

9.-"Electricidad y magnetismo" Berkeley Physics Course-Volumen 2. Ed.Reverté1988