Está en la página 1de 127

INTRODUCCIN

HOJAS DE TRABAJO
Cuando inicies una sesin de MAPLE aparecer una hoja de trabajo(worksheet ) en blanco, en la que vers 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:

Regin de entrada de texto, como esta que ests leyendo, donde aparecen comentarios en negro. Puedes activar una zona de comentarios pulsando el icono T en la barra de comandos. Podrs ecribir con diferentes formatos, tamaos, etc. Regin de comando(input), como la que aparece al iniciar MAPLE. Se reconoce por el signo > y en ella el texto escrito aparecer en rojo. Puedes iniciar una zona de comando pulsando el icono [> en la barra de comandos. Dentro de una zona de comando se pueden introducir comentarios aclaratorios. Para ello utilizamos el smbolo #, despus se escribe el comentario. Regin de salida (output), en la que aparecer, en azul, la salida producida por un comando

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

AYUDAS
Lo primero que debes saber es cmo llamar a la ayuda de MAPLE. Es tan sencillo como teclear ? en una lnea de comando y pulsar [INTRO] >? Si lo que ocurre es que tienes dudas sobre cul es la sintaxis de un determinado comando, teclea ? y detrs el nombre del comando, despus pulsa [INTRO], por ejemplo: > ?factor nos dar informacin 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 escribirn englobados en un parntesis separados por comas. Por ejemplo: > solve(a*b-c,b);

El comando solve resuelve la ecuacin del polinomio (igualado a 0) que aparace como primer argumento en el parntesis despejando la variable que aparecere como segundo argumento en el parntesis. Para ver con ms detalle cmo se utiliza este comando teclea: > ?solve Hay comandos que no tienen este tipo de sintaxis, como son las operaciones bsicas, la potenciacin, 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:

el punto y coma (;) ejecutar el comando y producir una salida que se ver en pantalla en color azul. los dos puntos (:) que ejecuta el comando pero no producir salida alguna. Es muy til cuando sea necesario ejecutar una serie de comandos donde nicamente interese la salida del ltimo de ellos.

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

> ifactor(180): Hay comandos que no tienen este tipo de sintaxis, como son las operaciones bsicas, la potenciacin, el factorial. Puedes ver algunos de ellos tecleando: > ?index,expression

COMANDOS ENCADENADOS
Es posible encadenar los comando en una misma lnea utilizando los separadores entre ellos, por ejemplo: > 2+3; 5-3;

Tambin podemos separarlos con una coma, en cuyo caso la salida ser de esta manera: > 2+3 , 5-3;

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));

El comando expand se utiliza para expandir expresiones. Por ejemplo: > (a+b)^3 = expand((a+b)^3);

MAYSCULAS Y MINSCULAS
MAPLE es case sensitive, es decir, distingue entre maysculas y minsculas . 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 minscula. Reservaremos las maysculas para las funciones y procedimientos definidos por nosotros.

EXPRESIN INERTE
MAPLE tiene varios comandos que, segn se escriban con la primera letra en mayscula o minscula, hacen diferenetes acciones. Por ejemplo: Para hallar un lmite se utiliza el comando limit, pero si escribimos Limit lo que aparecer ser la expresin del lmite en su notacin convencional, que es lo que se denomina expresin inerte: > Limit(x/(x^2-1),x=infinity);

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

Esta capacidad de MAPLE se puede utilizar para escribir frmulas de la siguiente manera: > Limit(x/(x^2-1),x=infinity)=limit(x/(x^2-1),x=infinity);

Otros comandos con capacidad de escribir la expresin inerte son, por ejemplo: Sum y sum (sumatorio) Product y product (productorio) Diff y diff (para el cculo de derivadas) Int y int (calcula la integral indefinida de una funcin).

PAQUETES DE COMANDOS Y LIBRERAS


MAPLE guarda en su memoria los comandos ms 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 segn 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

> 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;

LIBRERAS
Determinados comandos muy poco usados no estn contenidos ni en el ncleo de MAPLE ni en un paquete determinado. En vez de esto estn en una librera general. Se pueden cargar con el comando readlib. Por ejemplo, el comando discont, que calcula puntos de discontinuidad de una funcin, se carga de la siguiente manera: > readlib(discont);

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

OPERACIONES NUMRICAS BSICAS SUMA, RESTA, MULTIPLICACIN, DIVISIN Y POTENCIACIN


Se utilizan los signos comunes: +, - , *, / y ^ adems de los parntesis (reiterados si es necesario). MAPLE respeta la prioridad de las operaciones. Por ejemplo: > 2+3*4^2;

Para operaciones bsicas no se utilizarn corchetes ni llaves, nicamente parntesis: > (((2+3)*4)^2)/10;

FACTORIALES
El factorial se indica con el signo admiracin cerrada< ! > 45!;

NMEROS ALEATORIOS
Podemos obtener nmeros aleatorios con el comando rand. Sin argumento, rand() devuelve un nmero entero aleatorio de 12 dgitos: > rand();

Pero podemos elegir el rango entre los que ser elegido el nmero aleatorio: > n:=rand(50..60):n();

Es interesante ver la generacin de nmeros aleatorios (semilla, etc). Teclea: > ?randomize

EL COMODN %
El cdigo % indica que se va a utilizar el ltimo resultado obtenido, aunque no haya salido en pantalla. Por ejemplo: > 3+2: > %!;

El uso de % se puede reiterar hasta tres veces: %% se referir al penltimo resultado y %%% al antepenltimo: > 2+2: > 5-2: > 2: > %+%%+%%%;

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 nmeros e interesa que no incluyamo cdigos extraos (acentos, ee, etc). Recordemos, tambin, que MAPLE distingue entre maysculas y minsculas.

ASIGNACIN DE VARIABLES
Para asignar valor a una variable se utiliza la combinacin dos puntos e igual :=, por ejemlo: > a:=13; que devuelve como eco la asignacin a la variable a del valor 13.

Si no queremos el eco debemos usar el terminados dos puntos. > a:=25: Ahora no hay eco y, adems a ha cambiado de valor. Esto podemos comprobarlo preguntando el valor de a: > a;

BORRADO DE VARIABLES
Para borar el valor de una variable basta con igualarla a s misma entre comillas simples: > a:='a';

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 despus de tener 8 aos 3000 euros al 4%: > ci := 3000: > t := 8: > redito := 4:

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

Para poner la salida de forma ms legible usaremos los comandos print y el ya conocido evalf: > print(`El capital final es de `,evalf(cf));

El comando print permite poner entre parntesis 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.

CONVERSIN 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, tambin: > ?type Por ejemplo: > convert(117,binary);

TIPOS DE ESTRUCTURAS CONJUNTOS (SET) DEFINICIN Por extensin


Un conjunto se define por extensin enumerando sus elementos entre llaves: > dias:={lunes,martes,miercoles,jueves,viernes,sabado,domingo};

Por comprensin
Se define un conjunto por comprensin dando una ley de formacin. En MAPLE se usa el signo dolar ($): > pares:={2*i$i=1..10};

OPERACIONES
Las operaciones bsicas con conjuntos son la union, interseccin 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;

> A intersect B;

> A minus B;

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 extensin y por comprensin (utilizando el signo $) > vocales:=[a,e,i,o,u];

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

MATRICES
Para definir una matriz (o un vector) utilizamos el comando array, indicando el nmero de filas y desps el de columnas: > A:=array(1..2,1..3);print(A);

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);

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]]);

MATRICES ESPECIALES
Hay ciertas matrices que pueden definirse de forma directa: - La matriz nula con el parmetro sparse: > N:=array(sparse,1..2,1..3);print(N);

- La matriz simtrica con el parmetro symmetric. Basta con llenar la mitad de la matriz, MAPLE rellenar automticamente 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);

- De forma similar se rellena una matriz antisimtrica, con el comando antisymmetric: - Una matriz diagonal se indica con el parmetro diagonal (a la que no podemos llamar D, porque es el comando funcin derivada):

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

- La matriz identidad se indica con el parmetro identity: > Id:=array(identity,1..3,1..3);print(Id);

PROGRAMACIN
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 cada 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. Despus se ponen, entre parntesis y separadas por comas las variables que mandamos desde el exterior y que sern usadas dentro del procedimiento 3.- en este caso concrero el procedimiento consta de una sla lnea que calcula el valor buscado 4.- el procedimiento termina con el comando end: Para usar este procedimiento, por ejemplo si la altura fuera 10, haramos: > vfinal(10);

ARGUMENTOS DEL PROCEDIMIENTO


Podemos comprobar qu tipo de datos llegan al procedimiento declarndolos. 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 nmeros 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 pitagricas. Recibe como parmetros dos nmero, p y q, que obligamos sean enteros. > TERNAP(2,6);

> TERNAP(2.3,5);

Error, TERNAP expects its 1st argument, p, to be of type integer, but received 2.3
Tambin es posible dejar el procedimiento sin entradas, en cuyo caso se dejan los parntesis vacos.

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 slo 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 condicin de salida. Es clsico el ejemplo del factorial de un nmero por su elegancia: > FACT:=proc(n::integer) > if (n<=0) then 1 else n*FACT(n-1) fi

> end: > FACT(500);

En el caso de que la recursividad alcance muchos ciclos es posible que se sature le memoria. Para evitar esto pondremos como segunda lnea 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 condicin, por ejemplo a=b. Si esta condicin se cumple se ejecutarn los comando escritos despus de then, en caso contrario se ejecutarn los comandos escritos despus de else (es parte del condicional es opcional). El condicional termina con fi (que es if al revs). > DISCRIM1:=proc(a,b,c) > if (b^2-4*a*c<0) then print(`Discriminante negativo`) fi > end: > DISCRIM1(1,2,3);

> 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);

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 solucin nica`) > else print(`Tiene dos soluciones`) > fi > end: > DISCRIM3(1,2,1);

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;

Si necesitamos empezar en un valor distindo de 1 utilizaremos from, y si adems, el salto no es de 1 en 1 usaremos by: > for j from 10 to 7 by -1 do 2*j od;

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;

BUCLES CONDICIONALES: while


Podemos hacer que un bucle se ejecute mientras se cumpla una determinada condicin. Esto se consigue con el comando while: > for n while n<=4 do n^2 od;

NMEROS ENTEROS
ARITMTICA EXACTA

MAPLE permite trabajar con enteros de enorme tamao. Por ejemplo: calcular el nmero de ceros en los que acaba el factorial de 50: > 50!;

Para saber el nmero total de dgitos que tiene este nmero utilizamos el comando length > length(%);

Hemos utilizado el comodn % para designar el ltimo resultado obtenido. Podamos escribir el resultado hallado con el comando print > print(`El nmero de dgitos del factorial de 50 es`,%);

DIVISIN ENTERA Y ARITMTICA MODULAR DIVISIN ENTERA: iquo, irem


Podemos hallar el cociente y el resto de una divisin 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));

ARITMTICA MODULAR: mod


Se pueden hacer clculos de congruencias en cualquier mdulo utilizando el operador mod: > 12 mod 4;

Por ejemplo, podemos tratar de ver si Z[4] es un Dominio de Integridad (anillo sin divisores de cero) hallando su tabla de multiplicacin: ([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;

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

NMEROS PRIMOS
MAPLE permite utilizar nmeros primos con gran facilidad. Podemos saber si un nmero es primo con el comando booleano isprime: > isprime(13453);

Podemos obtener los primos anterior y siguiente de un nmero dado con los comandos prevprime y nextprime: > prevprime(13453),nextprime(13453);

Tambin podemos obtener el i-simo primo de la tabla de primos con el comando ithprime: > ithprime(34);

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

FACTORIZACIN, DIVISORES, MCD Y MCM FACTORIZACIN ENTERA

Para factorizar un entero en producto de primos se utiliza el comando ifactor > ifactor(2732730);

DIVISORES
MAPLE permita hallar todos los divisores de un nmero entero, para lo cual hay que cargar el paquete numtheory > with(numtheory): > divisors(36);

Warning, new definition for B Warning, new definition for order

Fjate que han salido descolocados... Tambin podemos saber cuntos divisores son en total con el comando tau del paquete numtheory > print(`36 tiene`,tau(36),`divisores`);

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

MCD Y MCM
Tambin podemos hallar el Mximo Comn Divisor y el mnimo comn mltiplo: 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));

MCD: Algoritmo de Euclides


El Algoritmo de Eucides permite calcular el MCD de dos nmeros 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 NMEROS > 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 nmeros enteros 2.- Como se va a realizar la divisin "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);

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 nmeros 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;

NMEROS REALES
Ya sabemos que los nmeros reales resultan de la unin de los racionales e irracionales.

NMEROS RACIONALES
En el caso de operaciones con quebrados se devuelve el resultado ms simplificado. > 36/30;

Si queremos que el quebrado se opere hasta el final podemos hacer dos cosas. 1.- Poner alguno de los nmeros con coma decimal: > 36/30.0;

2.- Utilizar el comando para evaluar en coma flotante: evalf > evalf(36/30);

NMEROS IRRACIONALES RADICALES


En general, si p no es potencia n-sima, entonces la raz n-sima de p es irracional. Para obtener la raz cuadrada de un nmero utilizamos el comando sqrt (square root). Para que se evale la raz utilizamos evalf:

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

Caso de necesitar nicamente la parte entera de la raz utilizaremos isqrt (integer square root ): > isqrt(13);

Para races de ndice superior utilizaremos la expresin potencial (elevando al nmero racional), por ejemplo, la raz quinta de 13 ser: > 13^(1/5) = evalf(13^(1/5));

SIMPLIFICACIN DE RADICALES
Como con otras expresiones, los radicales se simplifican con el comando simplify: > 32^(3/15) = simplify(32^(3/15));

RACIONALIZACIN DE DENOMINADORES
Utilizaremos el comando rationalize: > (a-1)/(sqrt(a)-1) = rationalize((a-1)/(sqrt(a)-1));

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

NMEROS ESPECIALES EL NMERO PI

En MAPLE se escribe Pi y podemos obtenerlo con la precisin que deseemos con evalf, por ejemplo con 50 decimales: > Pi = evalf(Pi,50);

EL NMERO e
El nmero e es, posiblemente, el nmero ms importante en matemticas superiores. Aparece en muchos procesos de crecimiento, en la desintegracin radiactiva, en la frmula de la catenaria, etc. Podemos obtenerlo a travs del siguiente lmite: > Limit((1+1/n)^n,n=infinity) = evalf(limit((1+1/n)^n,n=infinity));

En MAPLE se escribe con e minscula y podemos obtenerlo con exp(1) y la precisin que deseemos: > e = evalf(exp(1),25);

PARTES DE UN NMERO REAL


Podemos obtener el signo de un nmero con signum: obtendremos 1, 0 -1: > signum(-4.13);

El valor absoluto de un nmero se obtiene con abs: > abs(-0.34);

La parte entera de un nmero se obtiene con trunc y la parte decimal con frac: > trunc(5.78);frac(5.78);

Para redondear al entero ms prximo utilizamos round: > round(5.78);

Para conseguir todos los decimales que queramos damos, como segundo argumento de evalf, el nmero de decimales requerido. > evalf(1/7,50);

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));

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

Para calcular logaritmos en otra base utilizamos el comando log[base](nmero) : > log[10](10);

El nmero e se obtiene con exp: > exp(3) = evalf(exp(3));

Podemos utilizar los comandos expand o simplify para desarrollar expresiones con logaritmos y potencias: > simplify(log(3*a/5*b^2));

LOGARITMO NEPERIANO COMO INTEGRAL


El logaritmo neperiano, o natural, de un nmero 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.

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

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

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

TRIGONOMETRA 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);

> convert(210*degrees,radians);

LNEAS TRIGONOMTRICAS
Las lneas trigonomtricas 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);

Las funciones inversas son: arcsin, arccos y arctan: > arccos(1/2);

MAPLE conoce todas las relaciones entre lneas trigonomtricas. Podemos utilizar los comandos simplify y expand para desarrollar una expresin trigonomtrica: > sin(alpha-beta) = expand(sin(alpha-beta));

SENO Y COSENO DE LA SUMA Y LA DIFERENCIA


Utilizando el producto escalar de dos vectores y el clculo del ngulo entre ellos podemos deducir las frmulas del seno y coseno de la suma y la diferencia de ngulos. Vamos a pintar un esquema de los vectores u y v, cuyo mdulo 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:

Vamos a calcular la expresin 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

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 expresin: > cos(a+b):=simplify(subs(b=-b,cos(a-b)));

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

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

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:

TRIGONOMETRA HIPERBLICA
Las funciones hiperblicas en MAPLE son: sinh, cosh, tanh y sus inversas arcsinh, arccosh y arctanh. MAPLE conoce las diferentes relaciones entre las lneas hiperblicas.

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

NMEROS COMPLEJOS
LA UNIDAD IMAGINARIA I
En MAPLE la unidad imaginaria (raz cuadrada de -1) se escribe con I mayscula. Sus potencias son:

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

FORMAS DE REPRESENTAR UN COMPLEJO


Ya sabemos que los elementos del cuerpo de los nmeros complejos, isomorfo con RxR, se pueden escribir en diferenes notaciones (binmica, polar, exponencial, trigonomtrica).

FORMA BINMICA
En forma binmica el nmero complejo se escribe:

> z1 := 3-2*I;

Para obtener su forma polar utilizamos el comando convert:

> z2:=convert(z1,polar);

FORMA POLAR (MDULO-ARGUMENTO)


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

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

Para escribir directamente un complejo en forma polar hacemos:

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

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

> evalc(z);

FORMA EXPONENCIAL-TRIGONOMTRICA

Utilizando la Frmula de Euler (que podemos obtener utilizando series):

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

Podemos relacionar la forma trigonomtrica de un complejo Z con su forma exponencial:

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

Para obtener la forma exponencial y trigonomtrica de un complejo utilizaremos exp y evalc, respectivamente.

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

Para convertir un complejo a forma exponencial o trigonomtrica utilizamos el comando convert:

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

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

EXPRESIONES RootOf
El comando RootOf pemite definir nmeros como races 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);

> allvalues(a);

OPERACIONES CON COMPLEJOS

SUMA, RESTA, PRODUCTO, COCIENTE, POTENCIA, INVERSO


Utilizando la notacin binmica se pueden hacer todos estos clculos con complejos (utilizando I como unidad imaginaria).

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

> (z1*z2)^2;

> z2/z1;

El inverso podemos obtener elevando a -1:

> z1^(-1);

RACES DE UN COMPLEJO
Para hallar todas las races de un complejo deberemos obtener todos los valores (allvalues ) de una expresin RootOf. Para hallar todas las races cbicas de I planteamos la ecuacin:

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

> allvalues(ec);

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);

El conjugado lo obtendremos con el comando conjugate:

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

LOGARITMO DE UN COMPLEJO
Para tomar el logaritmo de un complejo utilizaremos ste en forma exponencial:

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

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

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

As, todemos disear 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);

> lnc(I);

De todas formas MAPLE hace este tipo de clculos con evalc:

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

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));

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

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

Calcularemos primero LN(I) y despus lo multiplicaremos por I:

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

Por lo tanto:

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

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

> evalc(I^I);

COMBINATORIA
Los comandos relativos a combinatoria estn en el paquete combinat.

VARIACIONES
Para calcular el nmero de variaciones sin repeticin de m elementos tomados de n en n utilizamos el comando numbperm del paquete combinat. Como primer argumento damos el nmero de elementos totales y como segundo argumento el tamao de cada grupo.

> with(combinat): > V(5,2) = numbperm(5,2); > restart: Warning, new definition for Chi

MAPLE tambin permite listar las variaciones utilizando el comando permute:

> with(combinat): > permute(5,2); > restart: Warning, new definition for Chi

Para calcular las variaciones con repeticin de m elementos tomados de n en n utilizaremos la frmula terica: m^n<

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

PERMUTACIONES
El comando de MAPLE que permite calcular el nmero de permutaciones sin repeticin 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

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

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

Para obtener las permutaciones con repeticin podemos recurrir a la frmula terica con el uso de factoriales o al comando multinomial del paquete combinat. Por ejemplo si queremos hallar las permutaciones con repeticin 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

COMBINACIONES
Para hallar el nmero de combinaciones sin repeticin de m elementos tomados de n en n podemos utilizar el comando numbcomb o el comando binomial, que devuelve el nmero combinatorio:

> with(combinat):C(5,2)=numbcomb(5,2);C(5,2)=binomial(5,2);restart: Warning, new definition for Chi

Si lo que queremos es listar las combinaciones utilizaremos el comando choose, dando como primer parmetro la lista, o el conjunto, de elementos y como segundo parmetro el tamao de las agrupaciones:

> with(combinat):

> choose({a,b,c,d,e},3); > restart: Warning, new definition for Chi

Para calcular las combinaciones con repeticin de m elementos tomados de n en n, recurrimos a la frmula terica, que es el nmero combinatorio de m+n-1 sobre n. Podramos escribir un procedimiento para calcular las combinaciones con repeticin, 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

POLINOMIOS
DEFINICIN Y GRADO
Para definir un polinomio basta con asignarlo a una variable:

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

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

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

Puedes ver ms informacin de randpoly en la ayuda:

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

> degree(q);

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);

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

> sort(q,y);

OPERACIONES BSICAS SUMA, RESTA Y MULTIPLICACIN


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;

> 2*p-5*q;

Sin embargo al hacer la mltiplicacin nicamente la dejar indicada siendo necesario expandirla:

> p*q;

> expand(p*q);

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);

BINOMIO DE NEWTON
Utilizando MAPLE podemos desarrollar diferentes potencias del binomio (a+b) para tratar de obtener la frmula de Newton:

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

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

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

Donde binomial(n.i) es un comando de MAPLE que halla el nmero 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);

Un detalle de MAPLE: si usas sum, en minscula, se calcula la suma; pero si usas Sum, en mayscula, nicamente se pone la frmula (es lo que se llama expresin inerte).

FACTOR COMN
Para extraer factor comn se utiliza el comando collect, indicando sobre qu polinomio actuar y qu queremos sacar factor comn:

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

> collect(p,x);

DIVISIN DE POLINOMIOS
Si realizamos la divisin 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);

Como podemos ver no hace la divisin entera de polinomios, para ello tenemos que usar los comandos quo y rem que nos devolvern el cociente y el resto de la divisin, respectivamente. Como parmetros 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);

FRACCIONES ALGEBRAICAS
Las fracciones algebraicas son aquellas cuyo numerador y denominador son polinomios. Una de las operaciones bsicas 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;

> simplify(p/q);

Fracciones Simples
MAPLE es capaz de descomponer fracciones algebraica complejas en fracciones ms simples. Esto puede ser muy til en el clculo de ciertas integrales. Para hacer esto utlizamos en comando convert, que recibe como primer parmetro la fraccin a simplificar, como segundo parmetro la palabra clave parfrac y como ltimo parmetro la variable:

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

FACTORIZACIN 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);

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

Tambin 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);

> lcm(p,q);

FACTORIZACIONES EN Z[i]

Tambin 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 smbolo que aperece en la ventana. Por ejemplo, podemos factorizar x^2+4 en Z[i]:

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

Mientras que en R, x^2+4 no tiene factorizacin posible.

> factor(x^2+4);

DESARROLLOS DE TAYLOR
Los polinomios de Taylor se utilizan para aproximar funciones en un determinado punto. Para ello es necesario que la funcin tenga derivada hasta el orden n (n ser el grado del polinomio de Taylor) en dicho punto. La expresin del polinomio de Taylor en x=a es:

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

Donde se calcula la derivada i-sima de f en x=a, hasta i=n. Este clculo lo realiza MAPLE automticamente con el comando taylor. Por ejemplo, para aproximar la funcin sen(x) en x=0, con un polinmio de Taylor de grado 8 se hara:

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

En este polinomio el ltimo trmino expresa el error cometido, es lo que se denomina resto de Taylor. Podemos pintar la funcin seno y el polinomio hallado en el entorno de x=0 para obsevar su coincidencia. Pero, para esto, es necesario convertir en polinomio la expresin de Taylor hallada. Esto se hace con el comando convert:

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

Para pintar las funciones utilizamos el comando plot:

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

ECUACIONES E INECUACIONES. SISTEMAS ECUACIONES


El comando para resolver ecuaciones es solve poniendo entre parntesis dos parmetros: la ecuacin a resolver y la variable que queremos hallar. Por ejemplo:

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

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

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

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

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

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, multiplicacin y divisin).

ECUACIONES CON RADICALES


En el caso de races 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 raz cuadrada. Por ejemplo:

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

ECUACIONES TRIGONOMTRICAS
MAPLE resuelve las ecuaciones trigonomtricas dando la solucin para el primer periodo. Hay que recordar que las funciones trigonomtricas en MAPLE se escriben: sin(), cos() y tan() para el seno, coseno y tangente, respectivamente. Por ejemplo:

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

ECUACIONES EXPONENCIALES
MAPLE resuelve ecuaciones exponenciales recurriendo a logaritmos neperianos.

> solve(2^x=3);

Si queremos la solucin real aproximada debemos usar el comando fsolve:

> fsolve(2^x=3);

Podemos incluso plantear ecuaciones "curiosas", como: qu nmero elevado a s mismo da 2?

> fsolve(x^x=2);

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);

ECUACIONES RECURRENTES
Vamos a resolver el siguiente problema: "Un mono tiene una bolsa de cacahuetes. Cada maana su dueo le aade 100 cacahuetes. Luego, durante el da el mono se come la mitad de los cacahuetes que hay en la bolsa. Una noche, despus de varios aos haciendo esto, el dueo cont los cacahuetes cuntos cacahuetes habr en la bolsa?" Planteamos la siguiente ecuacin recurrente: la noche del da k+1 en la bolsa habr x(k+1)=(100+x(k))/2 porque al iniciar el da haba x(k) cacahuetes, a los que el dueo aade 100, pero luego el mono se come la mitad... Cmo resolvemos esta ecuacin recurrente? Utilizamos el comando rsolve, en el que los argumentos son la propia ecuacin recurrente y la funcin incgnita:

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

Como pasan muchos aos tomas el lmite de la funcin obtenida cuando k tiende a infinito.

> limit(%,k=infinity);

Esto quiere decir que habr 100 cacahuetes en la bolsa. Para informate mejor del comando rsolve teclea:

> ?rsolve

ECUACIONES DIOFNTICAS
Las ecuaciones diofnticas son aquellas cuyas soluciones son nmeros enteros. Por ejemplo, si deseamos llevar 430 euros en billetes de 50 y 20 euros.. 1) es posible? 2) en caso de ser posible cuntos billetes de cada hay que coger?

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

Obtenemos un conjunto de soluciones sustituyendo _NI por nmeros enteros, por ejemplo:

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

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

ECUACIONES DIFERENCIALES
En ingeniera y el ciencias hay muchos problemas que, cuando se formulan en trminos matemticos, requieren la determinacin de una funcin que debe satisfacer una ecuacin que contiene derivadas de la propia funcin desconocida. Estas ecuaciones se denominan ecuaciones diferenciales. Por ejemplo, para determinar el movimiento de una partcula sobre la que acta la fuerza de la gravedad, es necesario determinar una funcin u(t) que satisfaga la siguiente ecuacin:

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

El comando de MAPLE para resolver ecuaciones diferenciales es dsolve, que recive dos parmetros: la ecuacin diferencial y el nombre de la funcin incgnita:

> dsolve(ec1,u(t));

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
Tambin es interesante que veamos la explicacin del comando que resuelve ecuaciones diferenciales:

> ?dsolve
El comando dsolve admite, como tercer argumento, que se le inidique el mtodo de resolucin de la ecuacin diferencial: - poniendo method=laplace, utilizar la transformada de Laplace - poniendo type=series, se obtendr una serie como solucin aproximada - poniendo type=numeric, se obtendr una solucin numrica utilizando un Runge-Kutta de orden 4-5.

CONDICIONES INICIALES
Cuando conocemos las condiciones iniciales podemos hallar una solucin particular de la ecuacin diferencial. Las condiciones iniciales se incluyen en el comando dsolve haciendo un conjunto cuyo primer elemendo es la ecuacin a resolver, y despus las condiciones iniciales separadas por comas. Encontrar la solucin de y'=y^2 sabiendo que y(0)=1:

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

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

Podemos comprobar que la solucin obtenida cumple la ecuacin planteada. Para ello debemos coger la parte derecha (comando rhs, right side) de la ltima salida (comodn %) y sustituirla en la ecuacin:

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

> ec;

Adems hay que verificar que se cumple la condicin inicial y(0)=1:

> y(0);

Otro ejemplo, una ecuacin en la que es posible hacer separacin 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));

ECUACIONES DIFERENCIALES CON DERIVADAS PARCIALES


MAPLE puede resolver ecuaciones diferenciales en derivadas parciales utilizando el comando pdsolve, que recibe dos parmetros: la ecuacin diferencial y la funcin incgnita. Vamos a resolver la siguiente ecuacin en derivadas parciales:

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

La solucin aparece expresada como una funcin arbitraria _F1 que podemos elegir nosotros. Vamos a tomar como _F1 la funcin seno:

> subs(_F1=sin,%);

Ahora vamos a sustituirla en la ecuacin y a simplificar la expresin para ver que, en efecto, se cumple la ecuacin:

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

INECUACIONES
Se resuelven utilizando el comando solve. En la solucin se indica si el intervalo es abierto con Open.

> solve(x-1>5);

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

Puede ocurrir que no tengan solucin:

> 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 incgnitas.

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

En el caso de ser sistema compatible indeterminado, la solucin se expresa con parmetros:

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

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

Segn 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 adems es igual al nmero de incgnitas, 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

y como el nmero de incgnitas 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 solucin:

> 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

EIGENVALORES Y EIGENFUNCIONES
La ecuacin matricial formada a partir de un sistema de ecuaciones: Ax = y puede imaginarse como una transformacin lineal de un vector dado x en un nuevo vector y. En este tipo de transformaciones los vectores que se transforman en mltiplos de s mismos tienen mltiples aplicaciones (por ejemplo, en el problema de encontrar los ejes principales de los esfuerzos de un cuerpo elstico, o en el caso de encontrar los modos de vibracin libre en un sistema conservativo con un nmero finto de grados de libertad). Para encontrar estos vectores haremos:

> y=lambda*x;

siendo lamda un factor escalar. Por lo tanto buscaremos soluciones de la ecuacin:

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

Donde Id es la matriz identidad. Esta ltima ecuacin slo tiene soluciones diferentes (del caso trivial x=0) si el determinande de A-lamdaId es nulo:

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

Los valores de lambda que satisfacen esta ecuacin se denominan eigenvalores o valores propios de la matriz A y las soluciones que se obtienen utilizando estos eigenvalores en la ecuacin Ax=lambday 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]]);

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

Obtenemos el determinante, lo igualamos a cero y resolvemos la ecuacin:

> with(linalg):det(B)=0;solve(det(B)=0); Warning, new definition for norm Warning, new definition for trace

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);

Tomamos el primer eigenvalor: lambda1=2 y sustituimos:

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

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

> eigenvectores:=eigenvectors(A);restart:

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 parmetros: el conjunto de inecuaciones y el conjunto de incgnitas. En caso de no aparecer respuesta es que el sistema no tiene solucinPor ejemplo:

SISTEMAS DE INECUACIONE S CON UNA INCGNITA


Basta con utilizar el comando solve, dando la inecuacin entre llaves y la incgnita entre tambin entre llaves.

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

SISTEMAS DE INECUACIONES CON DOS INCGNITAS


El comando solve simplifica el conjunto de inecuaciones.

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

En este tipo de sistemas es ms 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:

En este ejemplo hemos pedido: - La zona solucin 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 incgnita:

> 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)});

Si conocemos condiciones iniciales los inclumos 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)});

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]);

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

> evalm(v);

En el caso de necesitar que una lista se convierta en vector, podemos usar el comando convert con la opcin vector. Para transferir el contenido de un vector a otro se utiliza el comando copy:

> w:=copy(v);

OPERACIONES CON VECTORES


En general se puede hacer cualquier operacin con vectores pidiendo que se evale con el comando evalm.

> u:=vector([u1,u2,u3]):v:=vector([v1,v2,v3]):
La suma, resta y multiplicacin por un nmero real se expresan con los operadores habituales (+,-,*):

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

> evalm(u-v);

PRODUCTO ESCALAR
El producto escalar se calcula a travs del comando dotprod del paquete linalg, que recibe como parmetros 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 mdulo de un complejo):

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

Warning, new definition for norm Warning, new definition for trace

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 parmetro la opcin 'orthogonal':

> u:=vector([u1,u2*I]);v:=vector([v1,v2*I]); > with(linalg):dotprod(u,v,'orthogonal');restart:

Warning, new definition for norm Warning, new definition for trace

Norma o mdulo de un vector


El mdulo de un vector se puede calcular como la raz 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 tiene el comando norm del paquete linalg. Damos como primer parmetro el vector y como segundo parmetro el ndice de la raz para calcular el mdulo (2).

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

Clculo del vector unitario


Calcular el vector unitario de otro dado, esto es, el vector de mdulo 1 de la misma direccin 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 mdulo:

> 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

Vamos a comprobar que el vector U hallado es unitario:

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

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

ngulo entre dos vectores


Utilizando la definicin de producto escalar: uv = |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 definicin 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)));

Warning, new definition for norm Warning, new definition for trace

Si queremos el resultado en grados:

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

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:

Warning, new definition for norm Warning, new definition for trace

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

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

Interpretacin geomtrica
El producto vectorial de dos vectores u y v se puede interpretar como el rea del paralelogramo definido por los dos vectores (tomando el mdulo de producto vectorial, naturalmente). Por ejemplo, si queremos hallar el rea del tringulo cuyos vrtices 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 tringulo 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:

Warning, new definition for norm Warning, new definition for trace

ANLISIS VECTORIAL GRADIENTE


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

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

El operador gradiente es comunmente utilizado en Fsica. Por ejemplo, el campo elctrico (E) es una funcin vectorial que resulta de aplicar el gradiente a la funcin 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

Tambin podemos calcular el gradiene en coordenadas esfricas o cilndricas. Para ello inclumos el parmetro 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

> 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

DIVERGENCIA
El operador divergencia acta sobre una funcin 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);

El operador divergencia se utiliza mucho en Fsica. Por ejemplo, en electromagnetismo, la divergencia del campo electrico hace referencia al flujo total de las lneas de campo elctrico (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:

Warning, new definition for norm Warning, new definition for trace

En este resultado la divergencia del campo elctrico 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:

Warning, new definition for norm Warning, new definition for trace

Tambin podemos calcular la divergencia en coordenadas esfricas o cilndricas. Para ello inclumos el parmetro 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

ROTACIONAL
El operador rotacional acta sobre una funcin vectorial y devuelve otra funcin vectorial. Desde el punto de vista de la Fsica el rotacional distinto de cero significa que el campo tiene circulacin, o turbulencia. Por ejemplo, el campo de velocidades del agua al vaciar una baera adquiere, generalmente, una circulacin. 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 parmetros es necesario dar la funcin 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

Tambin podemos calcular el rotacional en coordenadas esfricas o cilndricas. Para ello inclumos el parmetro 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

LAPLACIANA
El operador laplaciana se puede considerar como "la divergencia del gradiente", es decir, partiendo de una funcin escalar aplicamos el gradiente, por lo que obtenemos la variacin de dicha funcin en las tres direcciones del espacio. Ahora aplicamos sobre esta funcin vectorial recien hallada el operador divergencia, por lo que volvemos a obtener una funcin escalar. En coordenadas cartesianas la laplaciana tiene la siguiente forma:

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

El comando de MAPLE que hace de operador laplaciana es laplacian, del paquete linalg. Este comando recibe como argumentos la funcin 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

Dondequiera que la densidad de carga sea nula (todas las regiones del espacio que no contienen carga elctrica) el potencial elctrico V tiene que satisfacer la ecuacin de Laplace:

> laplaciana(V)=0;

Tambin podemos calcular la laplaciana en coordenadas esfricas o cilndricas. Para ello inclumos el parmetro 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

MATRICES
DEFINIENDO MATRICES
En la introduccin ya se habl de como definir matrices. Vamos a ver ahora cmo 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]]);

Tambin podemos ir rellenando la matriz indicando el valor de cada posicin:

> m[1,1]:=8;

Para visualizar la matriz podemos usar print o evalm:

> evalm(m);

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

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

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);

Tambin, 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]);

Matriz diagonal:

> diag(a,b,c);

Matriz jacobiana: se aplica sobre funciones vectoriales, evalundose en cada fila las dereivadas parciales de cada componente de la funcin 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)]]);

> f:=[x*y*z,x^2+y^2+z^2,y]: > funcion=f,jacobiana=jacobian(f,[x,y,z]);

Matriz wronskiana: se utiliza para la resolucin de determinadas ecuaciones diferenciales. La primera fila muestra las componentes de una funcin 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);

OPERACIONES CON MATRICES


Podemos hacer las operaciones bsicas con matrices (suma resta y multiplicacin por un nmero) utilizando los operadores normales (+, - ,*), y despus evaluar la matriz resultado con el comando evalm:

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

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

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

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

MULTIPLICACIN DE MATRICES
Para multiplicar dos matrices es necesario utilizar la combinacin de smbolos &*, dado que este producto no es conmutativo. Tenemos que recordar que, para que dos matrices se puedan multiplicar, es necesario que el nmero de columnas de la primera coincida con el nmero 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]]);

> evalm(a&*b);

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);

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);

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);

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 podran multiplicar. Para indicar la potencia utilizamos el operador ^ y el comando evalm para visualizar el resultado.

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

> evalm(a^2);

> evalm(a^4);

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:

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));

MATRIZ ADJUNTA
La matriz adjunta de otra es la traspuesta de su matriz conjugada. Maple obtiene la adjunta de una matriz con la combinacin 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

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 clculo 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));

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);

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

ELIMINACIN GAUSSIANA. TRIANGULACIN

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 posicin 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

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 posicin de la fila o columna y el escalar:

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

Tambin 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 posicin de las fila, o columna, que va a ser multiplicada; la posicin 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);

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:

De todas formas MAPLE es capaz de hacer todo este proceso por s solo, con el comando gausselim (eliminacin gaussiana) del paquete linalg, que recibe como parmetro 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

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 dems 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 posicin 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

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

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:

Warning, new definition for norm Warning, new definition for trace

VOLUMEN DE UN TETRAEDRO
Para hallar el volumen de un tetraedro de vrtices 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]]);

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]]);

Que es igual a esta:

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

As, el volumen del tretraedro se calcula:

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

Vamos a escribir un procedimiento que devuelva el volumen de un tetraedro dando sus vrtices 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

ECUACIN 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 genrico 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;

En el paquete linalg el comando genmatrix, con la opcin 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 opcin flag, genera la matriz del sistema > Coeficientes=evalm(C),Sistema=evalm(S);

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 solucin nicamente si el rango de la matriz del sistema tiene rango 2 (si tuviera rango 3 el sistema sera incompatible). Por lo tanto el determinante de la matriz del sistema debe ser nulo:

> Det(evalm(S))=0;

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

> d:=det(S)=0: > collect(d,[x,y,z]);

Podemos escribir un procedimiento que devuelva la ecuacin 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]);

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 DEFINICIN A PRIORI


Para definir una funcin a priori se utiliza el operador ->

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

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

En el caso de haber varias variables se escriben todas entre parntesis:

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

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

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

FUNCIONES DEFINIDAS A TROZOS


Para definir funciones a trozos utilizamos en comando piecewise, inidcando el primer intervalo, la primera funcin, el segun inervalor, la segunda funcin, 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);

FUNCIONES CON VALORES ABSOLUTOS


El comando abs calcula el valor absoluto de una expresin.

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

A POSTERIORI
Podemos tomar el resultado de un clculo anterior y convertirlo en funcin con el comando unapply, que tiene como primer argumento la candidata a funcin y como segundo argumento la candidata a variable independiente.

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

> f:=unapply(a,x);

IMGENES
Para obtener la imagen de un cierto valor se hace:

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

> f(2);

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

> g(3000,5,3);

Podemos obligar a que se evale la salida obtenida con evalf:

> evalf(%);

OPERACIONES CON FUNCIONES SUMA Y RESTA DE FUNCIONES


A partir de dos o ms funciones podemos definir la funcin 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);

> 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:

PRODUCTO Y DIVISIN DE FUNCIONES


Para definr el producto o divisin 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);

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

COMPOSICIN DE FUNCIONES
Para componer dos funciones podemos hacer:

> f:=x->x-1 : g:=x->x^2+1: > h:=x->g(f(x));

> 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=`Composicin de funciones`); > restart:

TRASLACIN DE FUNCIONES
Vamos a tratar aqu cmo podemos trasladar matemticamente una determinada funcin horizontal y verticalmente.

TRASLACIN VERTICAL
Para trasladar una funcin verticalmente basta con sumar, o restar, un valor a la funcin: g(x)=f(x)+k Vamos a ver cmo se traslada verticalmene la funcin f(x)=x^2-3:

> f:=x->x^2-3: > with(plots): > animate(f(x)+t,x=-3..3,t=-3..3); > restart:

Como podemos ver, el comando animate (que est en el paquete plots) permite ver la secuencia de movimientos. Como parmetros tiene la funcin (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 clsicas de un video. nicamene tenemos que probar.

TRASLACIN HORIZONTAL
Para trasladar una funcin horizontalmente basta con sumar, o restar, un valor al argumento de la funcin: g(x)=f(x+k) Vamos ver cmo se traslada horizontalmente la funcin f(x)x^2-3:

> f:=x->x^3: > with(plots): > animate(f(x+t),x=-6..6,t=-3..3); > restart:

INVERSA DE UNA FUNCIN


La funcin inversa de otra dada se puede obtener as:

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

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

LOS COMANDOS MAP Y ZIP


Se puede aplicar una funcin 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);

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);

GRFICA DE UNA FUNCIN EL COMANDO PLOT


Con el comando plot podemos dibujar una o varias funciones. Adems de la funcin indicamos el intervalo de valroes en los que se pintar la funcin (obligatorio) y el intervalo de valores del eje Y (opcional).

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

Si hacemos click sobre el cuadro de la funcin veremos cmo se activa un nuevo men que nos permitir colocar los ejes, cambiar el aspecto de la funcin, etc. nimo... la curiosidad es la mejor baza. Si lo que queremos es representar varias funciones a la vez tambin podemos usar el comando plot, pero ahora debemos pasar un conjunto de funciones (entre llaves, aunque tambin podemos pasar una lista de las funciones, entre corchetes). Podemos elegir los colores de cada una con la opcin color y el nombre de los colores en ingls:

> 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]);

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

> ?plot

TEXTOS EN LAS GRFICAS


Se puede rotular una grfica 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 grficas juntas, con rtulos e incluso ttulo:

> ?plots,display

Si queremos pintar varais grficas y rotularlas, la mejor opcin es ir definiendo cada grfica con el comando plot y guardarlas como variables. Los rtulos se definen con textplot y se guardan en otra variable. El comando display permite recoger todas estas variables y pintar la grfica.

> 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:

MOVIMIENTO EN LAS GRAFICAS: animate


El comando animate del paquete plots permite animar grficas. Es necesario dar tres parmetros: la funcin, que debe depender de dos variables (la variable independiente normal y otra variable que indique el paso temporal para la animacin), el rango de variacin de la variable independiente y el intervalo de variacin del paso temporal. Es recomendable ver qu otras opciones tiene animate:

> ?plots,animate
Una vez pintada la grfica, al hacer click sobre ella quedar seleccionada y aparecer un men, parecido al de un video, en la barra de mens: la curiosidad es la mejor recomendacin:

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

GRFICAS EN DIFERENTES COORDENADAS


Adems de la representacin en forma explcita clsica, que se realiza con el comando plot. Tambin podemos representar curvas implcitas, en paramtricas y en coordenadas polares.

REPRESENTACIN IMPLCITA
Para representar una funcin con ecuaciones implcitas se utiliza el comando implicitplot del paquete plots. Al comando implicitplot hay que darle la funcin implcita, el intervalo de variacin de la variable independiente y el intervalo de variacin de la variable dependiente.

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

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

REPRESENTACIN PARAMTRICA
Para representar una curva en ecuaciones paramtricas se utiliza el comando plot. El conjunto de ecuaciones paramtricas se le da a plot en forma de lista ordenada: primero x(t), luego y(t), junto con la variacin del parmetro t. El resto de opciones de plot siguen siendo vlidas. 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]);

La curva locura de Stanley S. Miller ilustra de una forma excelente la representacin de curvas a travs 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);

COORDENADAS POLARES
MAPLE puede representar curvas dadas en coordenadas polares utilizando el comando polarplot del paquete plots. Este comando recibe dos parmetros: la funcin polar r=r(theta) y el intervalo de variacin del argumento.

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

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

Tambin podemos dar el mdulo y el argumento en forma paramtrica, utilizando tambin el comando polarplot dando una lista ordenada con la ecuacin del mdulo y la del argumento en funcin de un parmetro, y dando el intervalo de variacin del parmetro.

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

GRFICAS A TRAMOS
Podemos representar una curva poligonal haciendo una lista de los vrtices por los que pasa. Los pares ordenados se ponen entre corchetes, como las listas, para indicar precisamente que estn ordenados.

> p:=[[-3,1],[-1,0],[1,3],[2,4],[4,5],[6,2]]: > plot(p,x=-4..7);

SUPERFICIES Y CURVAS EN EL ESPACIO


Adems de la representacin en forma explcita, que se realiza con el comando plot3d. Tambin podemos representar superficies dadas de modo implcito, en paramtricas y en coordenadas esfricas y cilndricas.

EL COMANDO plot3d
MAPLE puede representar superficies en el espacio con el comando plot3d, al que hemos de darle la funcin explcita de dos variables y el intervalo de variacin 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]);

Si hacemos click sobre la imagen se activar un men en la barra de mens que nos permitir elegir el tipo de grid, los ejes y la escala, as como rotar la funcin alrededor de los ejes. Si hacemos click sin soltar el botn sobre la funcin podremos moverla para verla desde diferentes ngulos. El comando plot3d tiene muchas opciones con las que podemos cambiar el aspecto de la grfica (como la opcin 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 parmetro 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);

SUPERFICIES EN PARAMTRICAS
Para representar una superficie dada en forma de ecuaciones paramtricas basta con utilizar el comando plot3d dando como primer argumento la lista de las ecuaciones paramtricas y despus el intervalo de variacin de los parmetros:

> 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]);

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);

SUPERFICIES EN FORMA IMPLCITA


Para representar superficies dadas en forma implcita necesitamos el comando implicitplot3d del paquete plots. Como primer argumento damos la funcin en forma implcita y despus el intervalo de variacin de las tres variables. Aqu tenemos la representacin de un paraboloide hiperblico:

> 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:

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:

CUDRICAS
Las llamadas superficies cuadrticas, o simplemente cudricas, 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;

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:

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:

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:

4.- Paraboloide elptico:

> 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 elptico`,orientation=[81,69]);

> restart:

5.- Paraboloide hiperblico:

> 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 elptico`,orientation=[69,64]);

> restart:

6.- Cono cudrico (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


cudrico`,orientation=[52,81]);

> restart:

SUPERFICIES EN COORDENADAS ESFRICAS


MAPLE puede representar superficies dadas en coordenadas esfricas 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:

SUPERFICIES EN COORDENADAS CILNDRICAS


MAPLE puede representar superficies dadas en coordenadas cilndricas 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:

TEXTO EN LAS GRFICAS. COMANDO display


Se puede incluir texto en las grficas 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 grfica (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 grficas y los textos. Adems 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 elptico`,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 hiperblico`); > restart:

CURVAS EN EL ESPACIO
Para representar curvas en el espacio se utiliza el comando spacecurve del paquete plots. Este comando recibe las ecuaciones paramtricas de la funcin en forma de lista, y el intervalo de variacin del parmetro.

> 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:

El comando tubeplot, del paquete plots, permite realzar la curva con la opcin radius, que permite dar grosor, en forma de tubera, a la curva. Para ello incluiremos la opcin radius=a un nmero que ser el grosor de la tubera:

> 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 hlice circular`);

> restart:

ANIMACIN EN TRES DIMENSIONES: animate3d


MAPLE permite animar grficas en el espacio con el comanod animate3d del paquete plots. Es necesario dar la funcin con un parmetro, que indicar el paso temporal. Tambin es preciso dar los intervalos de variacin de las variables de la funcin y del parmetro 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:

Una vez dibujada la grfica hacemos click sobre ella. Entonces aparecer un men, similar al de un video, en la barra de mens. Basta con pular el play...

LMITES DE FUNCIONES
Podemos hallar el lmite de una funcin con el comando limit, que presenta la expresin inerte si se escribe Limit. Es necesario pasar dos parmetros a este comando: la funcin cuyo lmite 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);

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);

Cuando el lmite no existe recibiremos contestaciones como esta:

> Limit(sin(x),x=infinity)=limit(sin(x),x=infinity);

LMITES LATERALES
Tambin podemos evaluar el lmite de una funcin 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);

CONTINUIDAD DE UNA FUNCIN


Ya sabemos que para que una funcin sea continua en un punto x=a, el lmite de la funcin en x=a, por la izquierda y por la derecha, y el valor de la funcin 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);

Vamos a ver la continuidad de esta funcin en x=0 y en x=2. La funcin es continua en x=0.

> limit(f(x),x=0,left); > limit(f(x),x=0,right); > f(0);

Pero es discontinua en x=2

> limit(f(x),x=2,left); > limit(f(x),x=2,right); > f(2);

En la librera general est el comando iscont, que nos dice si una funcin es, o no, contnua:

> readlib(iscont):iscont(f(x),x=-2..5);

Y, tambin en la librera general est el comando discont, que devuelve los valores de abscisa donde se encuentran puntos anmalos (aunque a veces no son discontinuidades):

> readlib(discont):discont(f(x),x);restart:

ASNTOTAS DE UNA FUNCIN


Podemos encontrar las asntotas de una funcin mediante la utilizacin de lmites.

ASNTOTAS HORIZONTALES
Las asntotas horizontales (AH) se calculan de la siguiente manera:

> restart: > AHd=Limit(f(x),x=infinity);


Tambin podemos ver las AH hacia la izquierda:

> AHi=Limit(f(x),x=-infinity);

La siguiente funcin 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);

La siguiente funcin 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);

ASNTOTAS VERTICALES

Una funcin tiene asntotas verticales (AV) en x=k si el lmite cuando x tiende a k de la funcin es infinito (ms infinito o menos infinito) o indeterminado. El comando discont de la librera general devuelve puntos anmalos 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);

ASNTOTAS OBLICUAS
Las asntotas oblicuas (AO) son rectas (y=mx+n) cuya pendiente y ordenada hay que determinar. Para determinar la pendiente efectuamos el lmite:

> restart: > m=Limit(f(x)/x,x=infinity);

Si este lmite se va a infinito no hay AO. Si el lmite se anula es probable que haya una AH. Para determinar la ordenada en el origen (n) de la AO se calcula el siguiente lmite:

> n=Limit(f(x)-m*x,x=infinity);

> f:=x->x^2/(x-2); > m:=limit(f(x)/x,x=infinity); > n:=limit(f(x)-m*x,x=infinity);

> AO:=x->m*x+n;

> plot([f(x),AO(x)],x=-3..10,y=-5..20,color=[blue,red]);

SUCESIONES Y SERIES
A pesar de que en el lenguaje corriente sucesin y serie sean trminos sinnimos, en el lenguaje matemtico son conceptos muy distintos. Matemticamente hablando, una sucesin es una aplicacion que asigna a un entero positivo un nmero real, o complejo. La sucsin converge si, cuando n tiende a infinito, la difencia entre dos trminos consecutivos de la sucesin tiende a cero. Se llama serie a la sucesin de las sumas parciales de los trminos de sucesin. SUCESIN:

> seq(a[n],n=1..5);

SERIE:

> seq(s[n]=sum(a[i],i=1..n),n=1..5);

SUCESIONES
El comando seq (sequence) define sucesiones finitas a travs de su ley de formacin. Este comando recive dos parmetros: la ley de formacin expresada con una variable contadora y la variacin de la variable contadora:

> seq(i,i=0..10);

> seq(evalf((1+1/n)^n,5),n=1..10);

Podemos poner subndices indicndolos entre corchetes:

> seq(a[i],i=1..10);

LMITE DE UNA SUCESIN


Para hallar el lmite de una sucesin utilizamos el comando limit, que en su forma Limit devuelve la expresin inerte del lmite. Como parmetros limit precisa la expresin de la sucesin y la opcin n=infinity:

> restart: > seq(1/n,n=1..10); > Limit(1/n,n=infinity)=limit(1/n,n=infinity);

SERIES
Ya sabemos que la serie es la sucesin de las sumas parciales. Para evaluarla utilizamos el sumatorio a travs del comando sum. Este comando devuelve la expresin inerte si se escribe Sum, y recibe dos parmetros: la expresin y el rango de variacin del contador:

> Sum(2*n+1,n=0..10)=sum(2*n+1,n=0..10);

Si evaluamos el sumatorio sobre infinitos trminos obtenemos la serie infinita o, sencillamente, la serie. Para indicar el infinito utilizamos la palabra clave infinity. Por ejemplo, la serie armnica diverge, como podemos ver aqui:

> Sum(1/i,i=1..infinity)=sum(1/i,i=1..infinity);

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 es capaz de evaluar series dando expresiones, no nicamente resultados numricos:

> Sum((-1)^(i-1)*1/i,i=1..infinity)=sum((-1)^(i-1)*1/i,i=1..infinity);

MAPLE tambin puede evaluar series que contienen parmetros:

> assume(r<1); > Sum(r^i*cos(i*alpha),i=0..infinity)=sum(r^i*cos(i*alpha),i=0..infinity); > restart:

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 parmetros: la expresin y la variacin del contador:

> Product(1/i,i=1..10)=product(1/i,i=1..10);

DERIVADAS
MAPLE es capaz de realizar cualquier clculo con derivadas: derivacin implcita, logartmica, 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 funcin se utiliza el comando diff, que en su forma Diff da la expresin inerte de la derivada. diff tiene dos argumentos: la funcin a derivar y la variable respecto de la que se deriva.

> f:=x^2*sin(x): > Diff(f,x) = diff(f,x);

diff puede aplicarse sobre una expresin, como en el caso anterior, o sobre una funcin:

> f:=x->x^2*sin(x): > Diff(f(x),x) = diff(f(x),x);

Podemos preguntarle a MAPLE las diferentes reglas de derivacin: se las sabe todas! (incluso con la aplicacin de la regla de la cadena):

> restart: > Diff(sin(x),x)=diff(sin(x),x);

> Diff(cos(f(x)),x)=diff(cos(f(x)),x);

> Diff(arctan(f(x)),x)=diff(arctan(f(x)),x);

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 funcin f=sin(x^2), hacemos:

> diff(sin(x^2),x,x,x,x,x);

Aunque tambin podemos escribir x$5 en vez de x cinco veces:

> diff(sin(x^2),x$5);

DERIVADAS PARCIALES
Cuando una funcin tiene varias variables se deriva respecto de una de ellas, considerando constante a las dems:

> 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);

DERIVACIN LOGARMICA
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 no tiene por qu realizar todo este proceso. MAPLE realiza estas deriadas de forma automtica:

> diff(x^x,x);

FUNCIN DERIVADA
Para obtener la funcin derivada (no la expresin de la derivada) se utiliza el operador D. Este operador nicamente acta sobre funciones.

> f:=x->x^2; > F:=D(f);

> plot({f(x),F(x)},x=-3..3,title=`Una funcin y su funcin derivada`);

APLICACIONES DE LA DERIVADA
La derivada se utiliza en multitud de clculos matemticos, como pueden ser los desarrollos de Taylor y en serie de potencias, el clculo de mximos y mnimos, la determinacin de ciertos lmites de funciones, etc.

PROBLEMAS DE MXIMOS Y MNIMOS


Hallar los mximos y mnimos relativos de la funcin: y = e^xsen(x)

> y:=x->x^4*exp(-x^2);

Hallamos la derivada primera y la derivada segunda de la funcin:

> Diff(y(x),x)=diff(y(x),x);

> dp:=rhs(%);

> Diff(y(x),x$2)=diff(y(x),x$2);

> ds:=rhs(%);

Igualamos a cero la primera derivada y resolvemos la ecuacin, as encontramos la abscisa de un punto singular, pero no sabemos si es un mximo o un mnimo:

> p:=solve(dp=0,x);

Probamos los valores obtenidos en la segunda derivada:

> DS:=unapply(ds,x);

> p[1],DS(p[1]);

> p[4],DS(p[4]);

> p[5],DS(p[5]);

Como la derivada segunda en p=0, es 0 sera necesario analizar el comportamiento de f' La derivada segunda en p=+sqrt(2) da negativo, luego la funcin tiene un mximo en +sqrt(2) La derievada segunda en p=-sqrt(2) da negativo, luego la funcin tiene otro mximo en -sqrt(2)

REGLA DE L'HPITAL

En 1696, Guillermo Francisco Antonio de L'Hpital (1661-1704) escribi el primer libro de clculo diferencial. Gran parte del contenido de este libro, incluyendo el mtodo conocido como "regla de L'Hpital", se bas en el trabajo anterior de Juan Bernoulli, uno de los maestros de L'Hpital. La regla de L'Hpital se utiliza para calcular el lmite 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));

Si dividimos arriba y abajo por x-a y hacemos el lmite cuando x->a obtendremos:

> f(x)/g(x)=Diff(f(a),x)/Diff(g(a),x);

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'Hpital". Vamos a ver un ejemplo: hallar el lmite 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);

> df:=unapply(diff(f(x),x),x);dg:=unapply(diff(g(x),x),x);

> Limit(df(x),x=0)=limit(df(x),x=0);Limit(dg(x),x=0)=limit(dg(x),x=0);

Luego el lmite buscado es -2/1 = -2 MAPLE aplica la regla de L'Hpital de forma automtica 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);

SERIES DE POTENCIAS
Desarrollar una funcin en serie de potencias supone encontrar un polinomio que aproxime esa funcin tanto como queramos. Esto puede ser muy til, ya que los polinomios son fciles de operar, deivar, integrar, etc. Se llaman series de potencias a las aproximaciones polinmicas de la forma

> Sum(a[n]*x^n,n=0..infinity);

Estas series son un caso particular de las serier geomtricas cuya convergencia est asegurada si |r|<1, donde r es la razn de la serie. As, por ejemplo, si x es complejo y |x|<1, la serie geomtrica.

> Sum(x^n,n=0..infinity);

converge y su suma es:

> Sum(x^n,n=0..infinity)=sum(x^n,n=0..infinity);

Si sustituimos x por -x (utilizando el comando subs) e integramos:

> subs(x=-x,lhs(%))=1/(x+1); > int(lhs(%),x)=int(rhs(%),x);

Acabamos de encontrar la serie de potencias que aproxima el logaritmo neperiano de x+1, vlido si |x|<=1. Como podemos evaluar la integral del sumatorio, convergene, como el sumatorio de las integrales, obtendremos la serie con el grado de aproximacin requerido. Por ejemplo, si n=5:

> ln(x+1)=int(sum((-x)^n,n=0..5),x);p:=unapply(rhs(%),x):

Podemos ver el grado de aproximacin pintando las funciones: en rojo el logaritmo, en azul el polinomio.

> plot({ln(x+1),p(x)},x=-1..1,color=[red,blue]);

El comando series hace todo esto por nosotros:

> ln(x+1)=series(ln(x+1),x);

El paquete powseries de MAPLE contiene comandos sobre la manipulacin de series de potencias:

> ?powseries

INTEGRALES
MAPLE puede calcular integrales con el comando int. Si escribimos el comando Int obtendremos la expresin interte de la integral. En el paquete student hay comandos referidos a la integracin. Conviene, por lo tanto, mirar la ayuda:

> ?student

INTEGRAL INDEFINIDA
Podemos integrar expresiones con el comando int dando como primer argumento la expresin, y como segundo argumento la variable con respecto a la cual integramos:

> int(2*x*sin(x),x);

Para integrar funciones basta con que el primer parmetro sea la funcin a integrar:

> f:=x->x*exp(x);Int(f(x),x)=int(f(x),x);

MAPLE conoce todas las reglas de integracin, por ejemplo:

> Int(sin(x),x)=int(sin(x),x);

MAPLE es capaz de integrar por diferentes mtodos: 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 parmetro la expresin de la integral y como segundo parmetro la funcin u (de int(udv) = uvint(vdu)):

> with(student):intparts(int(x^4*exp(x),x),x^4);restart:

INTEGRAL DEFINIDA
Para evaluar una integral definida tambin se utiliza el comando int, dando como primer parmetro la expresin o la funcin a integrar, y como segundo argumento el intervalo de variacin de la variable. Recordemos que Int devuelve la expresin inerte:

> Int(x*sin(x),x=0..Pi)=int(x*sin(x),x=0..Pi);

> f:=x->1/sqrt(a^2-x^2): > Int(f(x),x=0..a)=int(f(x),x=0..a);

REA BAJO UNA CURVA


Utilizando los comandos letbox, rightbox y middlebox del paquete student podemos ver la interpretacin geomtrica de la integral definida: como parmetros damos la funcin, el intervalo del eje X y el nmero de rectngulos que queremos que aparezcan. Tambin podemos pedir direrentes colores, etc. Incluso podemos pedir que se calcule la suma de las reas de los rectngulos (interpretacin 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));

> middlebox(f(x),x=0..5,10);Suma2:=evalf(middlesum(f(x),x=0..5,10));

> leftbox(f(x),x=0..5,10);Suma3:=evalf(leftsum(f(x),x=0..5,10));

Podemos ver cmo estos tres valores convergen cuando el nmero de rectngulos crece.

INTEGRALES IMPROPIAS
MAPLE calcula automticamente integrales impropias, sean de la especie que sean, con el comando int.Como primer argumento se da la expresin a integrar y como segundo argumento el intervalo de integracin, poniendo el infinito como infinity

> f:=x->x/(sqrt(x^4+1)): > Int(f(x),x=0..infinity)=int(f(x),x=0..infinity);

> f:=x->exp(-x^2): > Int(f(x),x=0..infinity)=int(f(x),x=0..infinity);

> Int(f(x),x=-infinity..infinity)=int(f(x),x=-infinity..infinity);

> f:=x->sin(p*x)^2/x^2: > Int(f(x),x=0..infinity)=int(f(x),x=0..infinity);

> f:=x->exp(-a*x^2): > assume(a>0):Int(f(x),x=0..infinity)=int(f(x),x=0..infinity);

> assume(a=0):Int(f(x),x=0..infinity)=int(f(x),x=0..infinity);

> assume(a<0):Int(f(x),x=0..infinity)=int(f(x),x=0..infinity);

INTEGRACIN NUMRICA
El paquete student ofrece mtodos numricos para el clculo aproximado de integrales, como son el mtodo de los trapecios y el mtodo de Simpson. Los comandos a utilizar son trapezoid y simpson, respectivamente. En ambos casos se pasan tres: la funcin a integrar, el intervalo de integracin y el nmero de rectngulos (a mayor nmero mejor aproximacin en el clculo).

> f:=x->x/(sin(x)): > Int(f(x),x=0..Pi/2)=evalf(int(f(x),x=0..Pi/2));

> with(student):evalf(simpson(f(x),x=0.00001..Pi/2,10));restart: Warning, new definition for D

INTEGRALES MLTIPLES
Podemos hacer integrales mltiples 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);

> Int(Int(Int(x^2+y^2+z^2,z = 0 .. 1),y = 0 .. 1),x = 0 .. 1) = 1;

Tambin 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);

> %=value(%);

En este ltimo comando hemos utilizado el comodn.

También podría gustarte