martes, 18 de mayo de 2010

Tutorial Nº 01 de Maple

Aquí se explican las herramientas más importantes que pueden usar en este excelente programa de matemáticas:

Asignación a variables:

:= , unassign , restore, assume

var := comando maple;
Se evalua el comando maple y la expresión que resulta es asignada a la variable var

assume(x>a); assume(n,integer); assume(z,real)
Son ejemplos de assume. Para mayor información ejecute ?assume;

unassign('var');
"borra" todo lo que se conoce acerca de la variable var, incluyendo las restricciones impuestas con el comando assume. De este modo, ella puede ser usada sin restricciones más adelante. Las comillas ' ' son fundamentales.

restore;
reinicializa todas las variables que se hayan ocupado "borrando" todo lo que se conoce sobre ellas. Es equivalente a aplicar unassign('var') a cada variable var que se haya ocupado.


Aproximaciones decimales:

evalf

Digits:= N;
Define que de ahora en adelante se ocupa aritmética decimal con N dígitos significativos. Al iniciar Maple Digits vale 10

evalf( expr)
Evalúa la expresión en artimética decimal con N dígitos sgniticativos, donde N es el valor que tiene la variable Digits.

evalf(expr,N)
Evalua la expresión expr en aritmética decimal con N dígitos significativos.

Algebra:
los comandos expand, combine, simplify, factor, normal, coeff, quo, rem.

expand( expresion);
Expande la expresión desarrollando potencias de binomios, distribuyendo productos con sumas, o expandiendo fórmulas trigonométricas, etc..

combine( expresion);
aplicado a ciertas expresiones realiza la operación inversa de expand

simplify(expresion);

aplica las reglas de simplificación que cumplen las funciones típicas trigonométricas, exponenciación, logaritmos, polinomios, etc.. La noción que Maple tiene de una expresión simplificada es con toda probabilidad diferente de la que Ud. tiene, la que es a su vez diferente de la de su vecino.

factor(polinomio);
factoriza el polinomio en factores con coeficientes enteros , racionales.

factor(polinomio,real);
factoriza el polinomio en factores con coeficeintes reales usando aritmética de punto flotante.

factor(polinomio,complex);
factoriza el polinomio en factores lineales complejos usando aritmética de punto flotante.

normal(expresion);
obtiene una expresión en la forma denominador/numerador, con términos comunes simplificados.

coeff( expresion ,x^k);

obtiene el coeficiente de x^k en la expresion, siempre que ésta sea una suma de pontencias de x.

q:= rem(a,b,x); r:= rem(a,b,x);

Si a,b son polinomios, q es el cuociente de a dividido por b y r es el resto de a dividido por b. El resto y el couciente satisfacen a= b*q+r, donde grado(r) < grado (b)


Expresiones versus procedimientos:
->, proc(), subs(), unapply()

Las funciones matemáticas pueden representarse en Maple mediante expresiones y/o procedimientos.

f:= x -> expr
define un procedimiento que asigna a cada x (input) su valor f(x) (output) que se obtiene al reemplazar el valor de x en la expresión expr

r:= expr
asigna a la variable r la expresión dada.

subs( {x=a},expr)
retorna la expresión expr donde x es reemplazado por el valor de a.

subs( {x=a,y=b},expr)
retorna la expresión expr donde x es reemplazado por el valor de a, y es reemplazado por el valor de b

subs( {eq1,eq2,.., eqk}, expresion);
donde eq1, eq2, ... eqk, son reglas de substitución.

unapply(expr,x) retorna el procedimiento x->expr

func:= proc(x) ...... end proc define un procedimiento que asigna a cada x(input) el resultado func(x) (output) (es alternativo a usar el operador -> )

Ejemplos:

Podemos definir el procedimiento maple
f:= x-> x^2;
Para evaluar f en x=2 hacemos:
f(2);
Si tenemos una expresión
r:= x^2;
e intentamos r(2) resulta un sin sentido
r(2);
Para reemplazar x por x=2 en una expresión usamos el comando subs (por substitute)
subs({x=2},r);
r;

El comando subs(), permite entonces reemplazar variables por valores sin alterar el valor de la expresión original.
Podemos reemplazar más de una variable el mismo tiempo,
subs({x=2,y=1},x^2+y^2);

Una alternativa a substituir es construir un procedimiento con unapply y luego usar el procedimiento:
g:= unapply(r,x);
g(2);


Si el procedimiento que define a una función es muy complicado es preferible definirlo usando proc().

La siguiente función determina los valores de y tal que x*exp(y)=y para un valor de x dado.
func:= proc(z) local eq1; eq1:=subs(x=z,x*exp(y)=y); solve(eq1,y); evalf(%); end proc;

func(0.367879441);
exp(-1.0);



Gráfico de funciones y curvas en el plano

plot( f(x), x=a..b);
Grafica a y=f(x) en el intervalo [a,b]. El rango y escala del eje Y se ajusta automáticamente

plot ( f(x) , x=a..b, scaling=constrained);
Idem que el anterior pero las escalas en los ejes X a Y están en relación 1:1.

plot ( f(x) , x=a..b, y=c..d);
Muestra la porción del gráfico de y=f(x) que yace en el rectángulo a <= x <= b, c<= y <= d.

plot( f(x), x=a..b, view=[x1..x2,y1..y2])
Muestra la porción del gráfico de y=f(x) para a <= x <= b pero enmarcado en una ventana con x1 < x < x2, y1 < y < y2.

plot ( f(x) , x=a..b, y=c..d, discont=true);
Idem que el anterior, pero se usa cuando f es discontínua (y f no toma valores complejos)


plot( f(x), x=a..b, y=c..d, discont=true, color=COLOR);

Idem que el anterior donde y=f(x) se grafica con color COLOR, donde COLOR puede ser red, blue, green, cyan, magenta, etc...

plot( [f(x),g(x), h(x)] , x=a..b, y=c..d,discont=true, color=[red,blue,cyan]);
Idem que en el anterior pero se grafican las tres funciones f,g,h al mismo tiempo en colores red,blue, cyan respectivamente.

plot( [x(t), y(t) , t=a..b], color=red );

grafica los puntos (x(t),y(t)) en el plano XY cuando t varía desde a hasta b.

plot( [x(t), y(t) , t=a..b], color=red, scaling=constrained) );
Idem que el anterior, pero las escalas en los ejes X,Y están en relación 1:1. (equivalente a presionar el botón 1:1 en la barra de menú del gráfico).


Más Gráficos:
with(plots), implicitplot, animate, animatecurve, display.

with(plots) Activa al paquete plots donde se encuentran las rutinas, display, implicitplot, textplot, etc....

implicitplot( f(x,y)=g(x,y), x=a..b,y=a..b,numpoints=N) Grafica la porción de la curva definida implicitamente por la ecuación f(x,y)=g(x,y) que yace en el rectángulo a<=x <=b, c<=y<=d.. N es el número de veces que resuelve la ecuación implícita para construir el gráfio.

animate( { f(x), g(x,h)}, x=a..b, h=h1..h2, nframes); Crea una animación donde en cada cuadro se grafica a las funciones f(x), g(x,h) en el intervalo [a,b], con h variando desde h1 hasta h2 con un incremento de
h2 - h1
-----------
nframes - 1
. En total hay nframes cuadros.

animatecurve( [x(t), y(t),t=t1 .. t2], view=[a..b , c..d], color=red);
Crea una animación que genera una curva a partir de una parametrización x(t), y(t) de ella cuando el parámetro t varía desde t1 hasta t2.

p1:= plot( f(x), x=a..b): Guarda en la variable p1 el gráfico de y=f(x), el cual puede ser desplegado mediante el comando display(p1). Note que la única manera en que el gráfico puede ser desplegado es mediante el comando display. Es conveniente terminar el comando con : en vez de ; para evitar ouput indeseable.

display(p1,p2,p3); Grafica los gráficos guardados en las variables p1,p2,p3

display( sucesión o lista de de variables con gráficos); Muestra en un mismo gráfico los gráficos guardados en las variables.

display( sucesión o lista de de variables con gráficos, insequence=true); Muestra cuadro a cuadro los gráficos en la lista creando una animación.


Gráficos 3D
Comandos genéricos para curvas y superficies

with(plots); Inicializa el paquete plots que permite ocupar varias rutinas para despliegue de gráficos.

spacecurve( [x(t), y(t), z(t)], t=a..b); Grafica la trayectoria o curva que siguen los puntos [x(t),y(t),z(t)] cuando t varía desde t=a hasta t=b (requiere el paquete plots)

plot3d( [x(u,v), y(u,v) , z(u,v) ], u=a..b, v=c..d ); Grafica la superficie que generan los puntos de la forma [x(u,v), y(u,v) , z(u,v) ] cuando u varía en el intervalo [a,b] y v en el intervalo [c,d].

Solución de ecuaciones, sistemas de ecuaciones: fsolve,solve

fsolve( f(x)=g(x), x=a..b);
Calcula por métodos numéricos UNA solución de f(x)=g(x) en el intervalo [a,b], CON LA EXCEPCION del caso en que f(x), g(x) sean polinomios, donde encuentra TODAS las raices reales en el intervalo [a,b]

fsolve( f(x)=g(x), x=a)
busca por métodos numéricos UNA solución de
f(x) = g(x)
comenzando la búsqueda en x=a. No necesariamente encuentra la solución más cercana a x=a.

fsolve( p(x),x);
Determina aproximaciones decimales a todas las raices reales del polinomio p(x).

fsolve( p(x),x,complex);
Determina aproximaciones decimales a todas las raices, incluyendo las complejas, del polinomio p(x)

solve( f(x)=g(x), x).

Si f, g son polinomios, encuentra todas las raices, en otros casos intenta encontrar tantas soluciones como pueda mediante reducciones algebraicas. Si no encuentra soluciones ya sea por que no hay o por que no pudo encontrar, retorna NULL, es decir "nada".

solve( f(x)< g(x), x) Intenta resolver la inecuación mediante reducciones algebraicas (cálculo simbólico).

solve( conjunto de ecuaciones, conjunto de variables)

intenta resolver mediante manipulaciones algebraicas el sistema de ecuaciones con respecto a las variables indicadas. Cuando tiene éxito, retorna una sucesión de reglas de substitución (para ser ocupadas con el comando subs) . CUIDADO: solve puede no encontrar todas las soluciones existentes de un sistema de ecuaciones no lineales.

Ejemplos

regla:=solve({y=x+2,y=2*x-4},{x,y});
Podemos ocupar la solución con el comando subs
x0:=subs(regla,x);
y0:= subs(regla,y);
subs(regla, (x^2+y^2+1)/ (x+y));

Podemos determinar los puntos de intersección de la recta y=x+2, con la circunferencia x^2+y^2=4
suc_reglas:=solve( {y=x+2,x^2+y^2=4},{x,y});
La primera solución es
x1:=subs(suc_regla[1],x);
y1:= subs(suc_regla[1],y);

Podemos evaluar expresiones que involucaran a cualquiera de las soluciones directamente
subs(suc_regla[2],x^2-y^2);

Para resolver un sistema de 3 ecuaciones con 3 incongnitascomo este x+y+z=1, x-y-z=2, 2*x+3*y-2*z=3
hacemos:
regla3:=solve({x+y+z=1, x-y-z=2, 2*x+3*y-2*z=3},{x,y,z});
Podemos reemplazar estos valores en cualquiera expresión
subs( regla3,x^2-y+z);



Estructuras de datos, (expresión) sucesión, lista, conjunto, tabla:
[ s], {s}, nops(s) , op(s) , seq(s) , s[n] , map(f,s)

Para agrupar varios datos en una misma variable, se puede usar una de las siguientes estructuras de datos: (expresión) sucesión, lista, conjunto, tabla.

exp1, exp2, ... , expn Es la sucesión formada por las expresiones exp1, exp2, etc. En general, expresiones separadas por comas definen a un sucesión. Las expresiones pueden ser de distintos tipos.

[s] Es la lista formada por los elementos de la sucesión s. En general, si s es una sucesión entonces [s] es una lista.

{s} Es el conjunto formado por los elementos de la sucesión s. En general, si s es una sucesión. entonces {s} es un conjunto. En maple un conjunto emula al concepto matemático de conjunto: elementos repetidos se eliminan y el orden de los elementos no importa. .

T[algo]:=valor; Si T no es una lista , crea la tabla T con una entrada. Con asignaciones adicionales del tipo T[indice]=valor se agregan elementos a la tabla T.

s[k]
el elemento k-ésimo de la lista o conjunto s,

T[algo] Si T es una tabla, valor asociado a "algo" en la tabla.

nops(s) el número de elementos de la lista o conjunto s.

op(s) la sucesión con los elementos del conjunto o lista s (le quita los paréntesis a s)

seq( a(n), n=n1..n2 ) la sucesión a(n1), a(n1+1), a(n1+2), .... a(n2).

[ seq ( (a(n), n=n1..n2 ) ]
la lista con los elementos a(n1), a(n1+1), ... , a(n2)

{ seq ( (a(n), n=n1..n2 ) }
el conjunto con los elementos a(n1), a(n1+1), ... , a(n2). Elementos repetidos se eliminan.

map(f,s)
la lista o conjunto que se obtiene de aplicar una función f a cada elemento de la lista o conjunto s

Ejemplos:

sucesion:=1,4,2,10,9,1,-4;
lista:= [sucesion];
conjunto:= {sucesion};
op(conjunto); op(lista);
nops(lista) , nops(conjunto);
f:= x-> x^2; map(f,lista);map(f,conjunto);
seq( k^2,k=1..5);
datos:= [ [1,2], [3,4], [5,6]];
datos[2];
datos[2][1];


Una tabla consiste en una asociación entre valores de un índice y expresiones. Las tablas se definen en forma dinámica.
T[1]:= 3;
T[4]:= 2;
T[cabeza_de_pescado]:= cola_de_pescado;
op(T);



Control de flujo:
for loops, while loops, if

for i from n1 to n2 do blabla... od ejecuta las instrucciones en el bloque blabla para i=n1, n1+1, etc.. hasta i=n2

for i from n1 to n2 by salto do blabla... od ejecuta las instrucciones en el bloque blabla para i=n1, n1+salto, etc.. hasta el mayor valor de n1+k*salto menor o igual a n2.

for k in S do blabla ... od. Ejecuta las instucciones en el bloque blabla para cada elemento k en la lista o conjunto S.

while ( condicion) do blabla od: Ejecuta las instucciones en el bloque blabla mientras la condición sea verdadera.

for k from n1 to n2 while ( condicion) do blabla od: Ejecuta las instucciones en el bloque blabla mientras la condición sea verdadera y k esté entre n1 y n2 (inclusives)

if ( COND ) then BLOQUE fi Si la condición COND es verdadera se ejecuta el BLOQUE.

if ( COND ) then BLOQUE1 else BLOQUE2 fi Si la condición COND es verdadera se ejecuta el BLOQUE1, en caso contrario se ejecuta el BLOQUE2.

if ( COND ) then BLOQUE1 elif COND1 then BLOQUE2 else BLOQUE3 fi
Si la condición COND es verdadera se ejecuta el BLOQUE1 en caso contrario, si COND1 es verdadero se ejecuta el BLOQUE2, en otros casos se ejecuta BLOQUE3

Ejemplos:

for i from 2 to 10 by 2 do i^2; od;

S:= [2,4,5,7,11,-10];
Suma de los cuadrados de los elementos en S:
total:=0; for i in S do total:=total+i^2; od;


Suma los cuadrados de los elementos de S hasta que la suma total exceda 100
k:=0; suma:=0; while( suma < 100) do k:= k+1; suma:=suma+k^2;od;

Otra alternativa para el cálculo anterior es:
suma:=0; for k from 1 to 100 while( suma < 100) do suma:=suma+k^2; od;

x:=4; if (x >0) then r:=x^2 else r:=x fi;


Límites, límites por la izquierda y por la derecha:

limit(f(x),x=a,left) que es el límite de f(x) cuando x tiende a a por la izquierda.

limit(f(x),x=a,right) es el límite de f(x) cuando x tiende a a por la derecha.

limit(f(x),x=a) el cual existe sólo cuando limit(f(x),x=a,left)=limit(f(x),x=a,right). Si los límites por la izquierda o por derecha no existieran o no fueran iguales entonces el límite no existe y maple responde undefined

Ejemplos:

Considere a la función definida por tramos
f:= x-> piecewise( x<0, x+2, x>=0, x^2-x+1);
f(x);
plot(f(x), x=-2..2, discont=true,color=red);


Vemos que
cuando x tiende a cero con x <0, f(x) tiende a 2
cuando x tiende a cero con x>0, f(x) tiende a 1

Es decir
limit(f(x), x = 0, left) = 2
,
limit(f(x), x = 0, right) = 1

Maple puede calcular estos límites

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



Para nuestra función, para
a <> 0
los límites por la izquierda y por la derecha son iguales a f(a) y el límite existe. Por ejemplo, para a=2,

L1:=limit( f(x),x=2,left);
L2:= limit( f(x),x=2,right);
L:= limit(f(x),x=2);
f(2);


En general para a>0,
assume(a,positive);
limit(f(x),x=a,left);
limit(f(x),x=a,right);
limit(f(x),x=a);
f(a);


En general para a<0,
assume(a,negative);
limit(f(x),x=a,left);
limit(f(x),x=a,right);
limit(f(x),x=a);
f(a);


Derivadas:
D(), diff()

D(f) Si f es una función entonces D(f) es la función f ' y entonces D(f)(x) es f'(x).

(D @@2) (f) Si f es una función entonces (D@@2)(f) es la función f '', que es la segunda derivada de f .

diff(expr,x) Si expr es una expresión en la variable x entonces diff(expr,x) es la derivada de expr con respecto a x.

diff( expr,x$2) Es la segunda derivada de expr con respecto a la variable x.

diff( expr,x$3) Es la tercera derivada de expr con respecto a la variable x.

diff( expr,x$n) Es la n-ésima derivada de expr con respecto a la variable x.

Integración:
int(), Int(). Integración numérica evalf(Int () )

int( f(x), x=a..b) Intenta calcularla mediante métodos simbólicos.

Int( f(x), x=a..b) Es la expresión NO EVALUADA. Es decir, es la expresión que al ser evaluada se obtiene la integral de f(x) en [a,b]

evalf ( Int (f(x),x=a..b) Estima el valor de la integral mediante métodos numéricos (parecido a sumas de Riemann pero mucho más sofisticado y de alta precisión). Los límities de integración a,b deben ser números.

value( Int( f(x), x=a..b) ) Intenta evaluar mediante métodos simbólicos la integral de f(x) en el intervalo [a,b]. Es equivalente a int(f(x), x=a..b).


Ejemplos:

int( x^2,x=a..b);
int(x^2,x=1..2);
Int( x^2,x=1..2);
evalf( Int(x^2,x=1..2));


La siguiente integral no se puede evaluar mediante una fórmula explícita. La única opción es la integración numérica.
plot( x^x,x=1..2,color=red);
int( x^x,x=1..2);
evalf( Int( x^x,x=1..2));


Para mayor información vea en:
?int[numeric]



Interpolación de datos:


interp, splineinterp(xdatos ,ydatos ,x)
Calcula el polinomio de P(x) grado n que resuelve el problema de interpolación P(xdatos) = ydatos[i], i=1,1,2, ..., n+1. xdatos, ydatos son listas cada con n+1 números.


Cualquier otra cosa me avisan

Agradecer no cuesta nada
 

5 comentarios:

  1. Muy buenooo..¡¡gracias de verdad..espero mas tutoriales de maple

    ResponderEliminar
  2. Muy bien. Practicaré los comandos de Maple.
    Gracias por el aporte.

    ResponderEliminar
  3. Gracias ad Uds por leer mis artículos. Ya saben que cualquier duda les responderé en cuanto el tiempo me lo permita. Saludos :D

    ResponderEliminar
  4. Disculpa podrias decirme como resolver en Maple(14) un polinomio con numeros complejos como este

    (1+I)^20

    Muchas gracias por tu atencion =)

    ResponderEliminar
  5. Para hallar (1+I)^20 en maple (donde 'I' es la unidad imaginaria) solo escribes:
    > (1+I)^20;
    y pulsas enter (obviamente no escribas '>' eso es solo la línea de comandos del programa)

    si deseas paso a paso, escribes:
    > (1+I)^2;
    y pulsas enter

    luego al resultado lo elevas a la 10:
    > (-2*I)^10;

    lo que te arrojará:
    -1024

    Espero haber resuelto tu problema.
    Y perdona la tardanza.
    Suerte ;)

    ResponderEliminar