Académique Documents
Professionnel Documents
Culture Documents
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
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).
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);
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;
> 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);
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);
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);
> 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
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.
> 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);
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;
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`,%);
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);
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);
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));
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);
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);
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));
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);
La parte entera de un nmero se obtiene con trunc y la parte decimal con frac: > trunc(5.78);frac(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));
Para calcular logaritmos en otra base utilizamos el comando log[base](nmero) : > log[10](10);
Podemos utilizar los comandos expand o simplify para desarrollar expresiones con logaritmos y potencias: > simplify(log(3*a/5*b^2));
> L(1)=evalf(L(1));
> L(2)=evalf(L(2));Ln(2)=evalf(ln(2));
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);
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));
> 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:
FORMA BINMICA
En forma binmica el nmero complejo se escribe:
> z1 := 3-2*I;
> z2:=convert(z1,polar);
> 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
Para obtener la forma exponencial y trigonomtrica de un complejo utilizaremos exp y evalc, respectivamente.
> 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);
> (z1*z2)^2;
> z2/z1;
> 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:
> 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);
> 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);
> 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);
> evalc(ln(4-2*I));
Por ejemplo para calcular i^i (la unidad imaginaria elevada a s misma) haremos:
Por lo tanto:
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
> 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<
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([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:
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:
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):
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);
> ?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);
> 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/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:
> 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:
> 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:
> 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);
> 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);
> plot({sin(x),p},x=-4..4,y=-1..1);
> 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).
> 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);
> fsolve(2^x=3);
> fsolve(x^x=2);
> 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:
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;
> y(0);
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);
> solve(x^2-2*x+3<0);
> solve({y-3*x=-5,x^2+y=-1},{x,y});
> solve({3*x-2*y+z=4,x+y-3*z=2},{x,y,z});
> solve({x-y=3,2*y-2*x=3},{x,y});
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:
> 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;
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);
> 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);
> 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:
[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:
> solve({4*x-3<=1,x+6>2},{x});
> 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:
> 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.
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]);
> 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);
> 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):
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':
Warning, new definition for norm Warning, new definition for trace
> 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
> 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
> 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
Warning, new definition for norm Warning, new definition for trace
> 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):
Warning, new definition for norm Warning, new definition for trace
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
> 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:
> 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
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]]);
> m[1,1]:=8;
> evalm(m);
> n:=copy(m):print(`n=`,n);
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)]]);
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.
> 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)
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.
Si queremos el resultado en forma de vector columna debemos definir el vector como una matriz de tres filas y una nica columna:
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:
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)
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);
> with(linalg): > A:=matrix([[a11,a12],[a21,a22]]); > traza=trace(A); > restart: Warning, new definition for norm Warning, new definition for trace
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:
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
> 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.
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]]);
> 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]]);
> M:=matrix([[1,1,1,1],[a1,b1,c1,d1],[a2,b2,c2,d2],[a3,b3,c3,d3]]);
> 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
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:
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
FUNCIONES
MAPLE permite dibujar funciones en el plano y en el espacio, para ello utiliza los comandos plot y plot3d, respectivamente.
> f:=x->x^2-2*x+1;
> g:=t->1/2*9.8*t^2;
> h:=(x,y,z)->x^2+y*z-1;
> f:=(x::integer)->x;
> 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);
> evalf(%);
> 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:
> plot(m3(x),x=-4..4);
COMPOSICIN DE FUNCIONES
Para componer dos funciones podemos hacer:
> 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:
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^(1/2);solve(y=f(x),x);g:=unapply(%,y);
> plot({f(x),g(x)},x=0..4,y=0..4,scaling=constrained);
> f:=x->2*x;C:={1,2,3,4,5};map(f,C);
> g:=(x,y)->x^2+y^2;A:=[1,3,5,7];B:=[2,4,6,8];zip(g,A,B);
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:
> ?plot
> ?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:
> ?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:
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.
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
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.
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:
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);
> 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:
> restart:
> restart:
> restart:
> restart:
> restart:
> restart:
> 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
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.
> 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:
> 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.
> Limit(f(x),x=infinity)=limit(f(x),x=infinity);
> 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);
Vamos a ver la continuidad de esta funcin en x=0 y en x=2. La funcin es continua en x=0.
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 HORIZONTALES
Las asntotas horizontales (AH) se calculan de la siguiente manera:
> AHi=Limit(f(x),x=-infinity);
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:
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);
> 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);
> seq(a[i],i=1..10);
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);
> Sum((-1)^(i-1)*1/i,i=1..infinity)=sum((-1)^(i-1)*1/i,i=1..infinity);
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.
diff puede aplicarse sobre una expresin, como en el caso anterior, o sobre una funcin:
Podemos preguntarle a MAPLE las diferentes reglas de derivacin: se las sabe todas! (incluso con la aplicacin de la regla de la cadena):
> Diff(cos(f(x)),x)=diff(cos(f(x)),x);
> Diff(arctan(f(x)),x)=diff(arctan(f(x)),x);
> diff(sin(x^2),x,x,x,x,x);
> 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:
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.
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.
> y:=x->x^4*exp(-x^2);
> 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);
> 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)
> 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:
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);
> Sum(x^n,n=0..infinity)=sum(x^n,n=0..infinity);
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]);
> ln(x+1)=series(ln(x+1),x);
> ?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);
> 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);
> 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
> Int(f(x),x=-infinity..infinity)=int(f(x),x=-infinity..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).
INTEGRALES MLTIPLES
Podemos hacer integrales mltiples reiterando el comando int.
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(%);