MiniCurMapV.mws

Minicurso de Introducción a Maple

Observación:

En este Minicurso de Introducción a Maple V, hemos usado para la notación habitual de Maple para la introducción de los distintos comandos. No debemos olvidar, que podríamos introducir gran parte de los comandos, expresiones y acciones haciendo uso de las paletas, menús contextuales y el editor matemático; o bien, mostrar los inputs en formato tradicional matemático.

CUANDO USE MAPLE V NO OLVIDE QUE:

Cálculos Numéricos

Enteros

Maple V puede ser usado como una potente calculadora:

> 32*12^13;

3423782572130304

Además, Maple V incorpora un gran número de funciones para trabajar con enteros, incluyendo:

> 25 mod 3;

1

> 200!;

788657867364790503552363213932185062295135977687173...
788657867364790503552363213932185062295135977687173...
788657867364790503552363213932185062295135977687173...
788657867364790503552363213932185062295135977687173...
788657867364790503552363213932185062295135977687173...

> ifactor(%);

``(2)^197*``(3)^97*``(5)^49*``(7)^32*``(11)^19*``(1...
``(2)^197*``(3)^97*``(5)^49*``(7)^32*``(11)^19*``(1...
``(2)^197*``(3)^97*``(5)^49*``(7)^32*``(11)^19*``(1...
``(2)^197*``(3)^97*``(5)^49*``(7)^32*``(11)^19*``(1...

> isprime(157);

true

Racionales

Una de las principales virtudes de Maple V es el cálculo simbólico racional: podemos trabajar con racionales e irracionales sin necesidad de tener que remitirnos a aproximaciones numéricas (en coma flotante).

> 1/2 + 2/3;

7/6

Maple V automáticamente se encarga de simplificar las fracciones:

> 2/4;

1/2

También la manipulación de números irracionales se realiza de manera simbólica:

> sqrt(2);

sqrt(2)

> (2^30)/(3^20)*sqrt(2)+sqrt(8);

8047310626/3486784401*sqrt(2)

Decimales

A pesar que Maple V es un Sistema de Cálculo Simbólico (y por lo tanto se trabaja de manera exacta), podemos obtener aproximaciones numéricas de cualquier valor. El límite es de 500.000 dígitos.

Para obtener dichas aproximaciones decimales usaremos el comando evalf .

> evalf(%);

3.263928743

> evalf(7/6);

1.166666667

Podemos manipular constantes como Pi de manera simbólica o a partir de aproximaciones numéricas:

> Pi;

Pi

> evalf(Pi,200);

3.1415926535897932384626433832795028841971693993751...
3.1415926535897932384626433832795028841971693993751...
3.1415926535897932384626433832795028841971693993751...

Cuando intervienen expresiones decimales dentro de los inputs, los outputs obtenidos también son expresiones decimales:

> 1.0/5.3;

.1886792453

> sin(.2);

.1986693308

Maple V puede calcular valores numéricos tanto para las funciones elementales como para funciones más especiales (y obtener expresiones decimales cuando lo deseeemos):

> sin(2*Pi);

0

> exp(2);

exp(2)

> evalf(%);

7.389056099

Complejos

Maple V trabaja con números imaginarios. En particular, la unidad imaginaria sqrt(-1) es representada por el símbolo I :

> (2+5*I)+(1-I);

3+4*I

> (1+I)/(3-2*I);

1/13+5/13*I

Cálculos Simbólicos

Manipulación de expresiones polinómicas

La verdadera virtud de Maple (como Sistema de Computación Algebraica) se encuentra en el área del cálculo simbólico, donde es capaz de trabajar con indeterminadas de manera matemática:

> (1+x)^2;

(1+x)^2

Maple V trabaja de manera matemática y automática con las expresiones polinómicas:

> (1+x)+(3-2*x);

4-x

Disponemos de miles de funciones para la manipulación de expresiones simbólicas. A continuación podemos ver algunos ejemplos:

> expand((1+x)^2);

1+2*x+x^2

> factor(%);

(1+x)^2

> diff(sin(x),x);

cos(x)

> sum(n^2,n);

1/3*n^3-1/2*n^2+1/6*n

> rem(x^3+x+1,x^2+x+1,x);

2+x

> series(sin(x),x=0,10);

series(1*x-1/6*x^3+1/120*x^5-1/5040*x^7+1/362880*x^...

Manipulación algebraica de expresiones

Maple V proporciona al usuario un potente entorno para simplificación de expresiones. En particular, hace uso de distintas identidades trigonométricas para la simplificación de expresiones:

> simplify(cos(x)^5+sin(x)^4+2*cos(x)^2-2*sin(x)^2-cos(2*x));

cos(x)^5+cos(x)^4

Para simplificar expresiones algebraicas racionales, podemos usar también el comando normal .

> normal((x^3-y^3)/(x^2+x-y-y^2));

(x^2+y*x+y^2)/(x+1+y)

El comando convert permite al usuario transformar una determinada expresión a otro tipo de formato. En particular, podemos transformar una expresión racional a una expresión equivalente en forma de suma de distintas expresiones racionales:

> expr:=(a*x^2+b)/(x*(-3*x^2-x+4));

expr := (a*x^2+b)/(x*(-3*x^2-x+4))

> convert(expr,parfrac,x);

1/4*b/x-1/28*(16*a+9*b)/(3*x+4)-1/7*(a+b)/(x-1)

Con el mismo comando podemos transformar una expresión trigonométrica a su equivalente en formato exponencial:

> convert(cot(x),exp);

I*(exp(I*x)^2+1)/(exp(I*x)^2-1)

Resolución de ecuaciones

Es conveniente usar el comando restart al comienzo de una sesión, o cuando vayamos a involucrarnos dentro de una misma sesión en cálculos que no están relacionados con las variables o expresiones definidas con anterioridad.

> ?restart;

Con el comando restart eliminamos de la memoria del kernel cualquier definición o asignación que hayamos realizado.

> restart;

Para resolver ecuaciones algebraicas usaremos el comando solve :

> solve(a*x^2+b*x+c,x);

1/2*(-b+sqrt(b^2-4*a*c))/a, 1/2*(-b-sqrt(b^2-4*a*c)...

Observación: Maple V asume que la ecuación contenida dentro del comando solve está igualada a 0, si no se indica lo contrario. Si Maple V devuelve la ecuación sin resolver, esto no significa que la ecuación no tenga solución, sino que Maple V no ha sido capaz de determinarla con el comando que le hemos indicado.

Con el mismo comando, Maple V puede resolver sistemas de ecuaciones y sistemas de inecuaciones:

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

{x = -1, y = 2}, {x = 2, y = 1/2}

> solve({x^2*y^2=0,x-y=1,x<>0},{x,y});

{y = 0, x = 1}, {y = 0, x = 1}

En ocasiones, el comando solve devuelve la expresión Root_Of . Con esta expresión representamos de manera simbólica el conjunto de raíces de ciertas ecuaciones de una variable. Si queremos obtener todos los valores (mediante una aproximación numérica) podemos hacer uso del comando allvalues :

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

RootOf(_Z^5-2*_Z+2,index = 1), RootOf(_Z^5-2*_Z+2,i...
RootOf(_Z^5-2*_Z+2,index = 1), RootOf(_Z^5-2*_Z+2,i...

> ### WARNING: allvalues now returns a list of symbolic values instead of a sequence of lists of numeric values
allvalues(%);

Error, (in allvalues) redundant option RootOf(_Z^5-2*_Z+2,index = 3)

Sumas y productos

Maple V es capaz de calcular sumas finitas y series, y productos finitos e infinitos:

> Sum(k^2,k);

Sum(k^2,k)

> value(%);

1/3*k^3-1/2*k^2+1/6*k

> sum(1/k!,k=0..infinity);

exp(1)

> Product(k^2,k=1..4);

Product(k^2,k = 1 .. 4)

> value(%);

576

Visualización

Maple V permite realizar gráficos bidimensionales y tridimensionales. Además, podemos representar ecuaciones explícitas, implícitas, paramétricas y conjuntos de datos. También podemos representar funciones con discontinuidades.

> restart;

Gráficos 2D

Simples Gráficos

Para generar gráficos 2D usaremos el comando plot .

> plot(sin(x),x=-2*Pi..2*Pi);

[Maple Plot]

Para modificar los gráficos, podemos usar el menú contextual que aparece al pulsar el botón derecho del ratón o bien al pulsar sobre la ventana gráfica mediante los botones que aparecen en el menú de gráficos. También podemos indicar las distintas opciones dentro del comando plot .

> ?plot[options];

Funciones con Discontinuidades

Para indicar a Maple que la función que vamos a representar presenta discontinuidades usaremos la opción discont=true .

> plot(tan(x),x=-2*Pi..2*Pi,y=-4..4,discont=true,title=`Representación de Tan(x)`);

[Maple Plot]

Representación Conjunta de ditintas funciones

> plot({x,x^2,x^3,x^4,x^5},x=-10..10,y=-10..10);

[Maple Plot]

Observación: Hemos usado en el gráfico anterior el menú contextual para cambiar el grosor de los gráficos.

Representación Polar de curvas

> plot(sin(3*t),t=0..Pi,coords=polar);

[Maple Plot]

Gráficos 3D

Representación de Superficies

> plot3d(sin(x*y),x=-2..2,y=-2..2);

[Maple Plot]

Representación Paramétrica de Superficies

> plot3d([sin(t),cos(t)*sin(u),sin(u)],t=-Pi..Pi,u=-Pi..Pi);

[Maple Plot]

Representación Esférica de Superficies

> plot3d(1,t=0..2*Pi,p=0..Pi,coords=spherical);

[Maple Plot]

Animaciones

Maple V puede realizar animaciones de gráficos bidimensionales y de superficies.

> with(plots);

Warning, the name changecoords has been redefined

[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...

> animate(sin(x*t),x=-10..10,t=1..2,frames=50);

[Maple Plot]

> animate3d(cos(t*x)*sin(t*y),x=-Pi..Pi,y=-Pi..Pi,t=1..2);

[Maple Plot]

Gráficos Especiales

El paquete plots contiene rutinas para producir distintos tipos de gráficos especiales, incluyendo mapas topográficos, mapas de densidades y representaciones conformes de funciones complejas.

> with(plots);

[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...

> implicitplot3d(x^3+y^3+z^3+1=(x+y+z+1)^3,x=-2..2,y=-2..2,z=-2..2,grid=[13,13,13]);

[Maple Plot]

Composición de Gráficos

Los comandos display y display3d permiten la creación de composición de gráficos.

Cuando asignamos un nombre a un gráfico, se omite el gráfico (debemos utilizar en lugar de punto y coma, dos puntos para omitir el output que muestra la estructura del gráfico). Para representar el gráfico asignado hay que utilizar el comando display o display3d . El uso de estos comandos también nos permite representar conjuntamente distintos gráficos.

> with(plots);

[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...
[animate, animate3d, animatecurve, changecoords, co...

En este primer ejemplo, crearemos mediante una representación conforme una rejilla. Usando el comando display mostraremos conjuntamente la rejilla y la función seno.

> c:=coordplot(cartesian,colour=GREY):

> d:=plot(2*sin(3*x),x=-2*Pi..2*Pi,y=-2*Pi..2*Pi,color=RED):

> display([c,d],view=[-2*Pi..2*Pi,-5..5],axes=NORMAL);

[Maple Plot]

También es posible combinar gráficos con etiquetas de texto:

> p:=plot(sin(x),x=-Pi..Pi):

> t1:=textplot([Pi/2,1,`Máximo Local`],align=ABOVE):

> t2:=textplot([-Pi/2,-1,`Mínimo Local`],align=BELOW):

> display({p,t1,t2});

[Maple Plot]

Paquetes específicos.

Álgebra Lineal

> restart;

Introducción

Maple V proporciona al usuario un amplio abanico de paquetes especiales relacionados con Estadística, Teoría de Números, Teoría de Grafos... y uno especialmente diseñado para la enseñanza de Análisis a los estudiantes.

Existen distintos procedimientos para cargar un paquete:

> with(stats);

[anova, describe, fit, importdata, random, stateval...

> with(DEtools,odeadvisor);

[odeadvisor]

> finance[cashflows]([100, 200, 50], 0.1);

293.7640872

Uno de los paquetes más usados es el paquete de álgebra lineal, linalg. Este paquete contiene comandos para la manipulación de matrices y vectores.

> with(linalg);

Warning, the protected names norm and trace have been redefined and unprotected

[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp,...

Operaciones Matriciales

Un array es una generealización de la estructura matricial de datos. La conversión entre arrays y matrices es automática; por ello, cuando creamos un array podemos utilizarlo como una matriz.

Definamos una matriz numérica 3 x 3 mediante el comando array .

> M1:=array([[1/2,-1/3,2],[-5,14/3,9],[0,11,-5/6]]);

M1 := matrix([[1/2, -1/3, 2], [-5, 14/3, 9], [0, 11...

Para mostrar una matriz, usaremos los comandos print o evalm .

> print(M1);

matrix([[1/2, -1/3, 2], [-5, 14/3, 9], [0, 11, -5/6...

> evalm(M1);

matrix([[1/2, -1/3, 2], [-5, 14/3, 9], [0, 11, -5/6...

Para calcular la inversa tenemos el comando inverse :

> inverse(M1);

matrix([[1852/2881, -391/2881, 222/2881], [75/2881,...

Definimos a continuación una matriz con valores simbólicos. En esta ocasión nos serviremos del comando matrix con una variación sobre la sintaxis habitual:

> M2:=matrix(3,3,[1/2,0,-2,sin(theta),1,phi^2,0,phi-1,3/4]);

M2 := matrix([[1/2, 0, -2], [sin(theta), 1, phi^2],...

Para multiplicar las matrices M1 y M2 tenemos el comando multiply o el operador:

> M3:=multiply(M1,M2);

M3 := matrix([[1/4-1/3*sin(theta), -7/3+2*phi, 1/2-...

Calculemos el determinante de esta última matriz:

> det(M3);

-2881/48-2881/36*phi^2+2881/36*phi^3-2881/9*sin(the...

El paquete linalg contiene definiciones de matrices especiales como la matriz de Hilbert o la matriz de Vandermonde:

> hilbet(4);

hilbet(4)

> vandermonde([s,t,u,v,w]);

matrix([[1, s, s^2, s^3, s^4], [1, t, t^2, t^3, t^4...

Operaciones con Vectores

Veamos a continuación algunos de los comandos para la creación y manipulación de vectores dentro del entorno de Maple V:

> v1:=vector([1,1,1]);

v1 := vector([1, 1, 1])

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

v2 := vector([1, 0, 0])

Calculemos el ángulo determinado por los dos vectores anteriores:

> angle(v1,v2);

arccos(1/3*sqrt(3))

También podemos calcular el producto escalar y el producto vectorial de ambos vectores:

> dotprod(v1,v2);

1

> crossprod(v1,v2);

vector([0, 1, -1])

Cuando los elementos del vector son funciones, tenemos la posibilidad de manipular de la misma manera todos los elementos del vector, de la misma manera que haríamos con una función:

> diff_vector:=vector([sin(x),cos(x),sin(x)*cos(x)]);

diff_vector := vector([sin(x), cos(x), sin(x)*cos(x...

> map(diff,diff_vector,x);

vector([cos(x), -sin(x), cos(x)^2-sin(x)^2])

Cálculo Infinitesimal

> restart;

Límites

Calculemos el límite de una función racional cuando x se aproxima al valor 1.

> f:=(x^2-2*x+1)/(x^4+3*x^3-7*x^2+x+2);

f := (x^2-2*x+1)/(x^4+3*x^3-7*x^2+x+2)

> Limit(f,x=1);

Limit((x^2-2*x+1)/(x^4+3*x^3-7*x^2+x+2),x = 1)

> value(%);

1/8

Cuando el límite en un punto no se encuentra definido, siempre podemos recurrir al cálculo de límites laterales:

> limit(tan(x),x=Pi/2);

undefined

> limit(tan(x),x=Pi/2,left);

infinity

> limit(tan(x),x=Pi/2,right);

-infinity

Derivación e Integración

Maple V, como manipulador algebraico, permite calcular derivadas e integrales de manera simbólica:

> diff(sin(x)*x,x);

cos(x)*x+sin(x)

> int(cos(x),x);

sin(x)

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

2

Ahora podemos derivar una expresión, integrar el resultado y comparar la expresión inicial con la final:

> f:=x*sin(a*x)+b*x^2;

f := x*sin(a*x)+b*x^2

> df:=diff(f,x);

df := sin(a*x)+x*cos(a*x)*a+2*b*x

> int(df,x);

-cos(a*x)/a+(cos(a*x)+a*x*sin(a*x))/a+b*x^2

> simplify(%);

x*(sin(a*x)+b*x)

Podemos realizar integrales definidas:

> int(df,x=1..2);

2*sin(2*a)+3*b-sin(a)

E incluso integrales mucho más complejas:

> f:=exp(-x^2);

f := exp(-x^2)

> Int(f,x);

Int(exp(-x^2),x)

> value(%);

1/2*sqrt(Pi)*erf(x)

En caso que Maple V no sepa resolver simbólicamente la integral, podemos usar el comando evalf para obtener una aproximación numérica.

> int(exp(-x^3),x=0..1);

3/4*exp(-1/2)*WhittakerM(1/6,2/3,1)+exp(-1/2)*Whitt...

> evalf(%);

.8075111821

Estudiemos otro ejemplo:

> f:=exp(-a*t)*ln(t);

f := exp(-a*t)*ln(t)

> int(f,t=0..infinity);

Definite integration: Can't determine if the integral is convergent.

Need to know the sign of --> a

Will now try indefinite integration and then take limits.

limit(-(exp(-a*t)*ln(t)+Ei(1,a*t)+gamma+ln(a))/a,t ...

Vemos cómo la solución simbólica consiste en un límite, cuyo valor final depende de los distintos valores que puede tomar el parámetro a . Si asumimos ciertas condiciones sobre el parámetro a , podemos obtener una expresión más concreta:

> assume(a>0);

> int(f,t=0..infinity);

-ln(a)/a-gamma/a

Observación: El símbolo ~ indica que el parámetro a tiene en su memoria ciertas suposiciones. Para eliminar las posibles suposiciones que tenga el símbolo a debemos escribir:

> a:='a';

a := 'a'

Ecuaciones Diferenciales

Maple V puede resolver ecuaciones diferenciales ordinarias simbólica y numéricamente:

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

y(x) = _C1*exp(x)

> edsist:=diff(y(x),x)=z(x),diff(z(x),x)=y(x);

edsist := diff(y(x),x) = z(x), diff(z(x),x) = y(x)

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

{y(x) = 1/2*exp(x)-1/2*exp(-x), z(x) = 1/2*exp(x)+1...

Las opciones del comando dsolve permiten especificar tres posibles metodologías para resolver ecuaciones diferenciales: métodos numéricos, métodos de series y métodos de Laplace:

> ecuac:={diff(y(t),t)=x(t)+y(t),diff(x(t),t)=y(t),x(0)=2,y(0)=1};

ecuac := {diff(y(t),t) = x(t)+y(t), diff(x(t),t) = ...

> result:=dsolve(ecuac,{x(t),y(t)},type=numeric);

result := proc (rkf45_x) local i, rkf45_s, outpoint...

El resultado es un procedimiento de Maple (es decir, una función implementada con lenguaje de programación de Maple) que puede ser representado gráficamente o evaluado en puntos concretos:

> result(0);

[t = 0, x(t) = 2., y(t) = 1.]

> result(1);

[t = 1, x(t) = 5.58216868924484544, y(t) = 7.826891...

> result;

result

Desarrollos de Taylor

> restart;

Vamos a calcular la aproximación de Taylor de orden 6 en x = 0 de cierta función:

> f:=sin(4*x)*cos(x);

f := sin(4*x)*cos(x)

> fs1:=taylor(f,x=0,6);

fs1 := series(4*x-38/3*x^3+421/30*x^5+O(x^6),x,6)

Podemos comparar la función inicial con la aproximación gráficamente:

> plot({f,convert(fs1,polynom)},x=-1..1,-2..2,title=`sin(4x) cos(x) vs. Desarrollo de Taylor`);

[Maple Plot]

El orden del desarrollo de Taylor puede especificarse como opción del comando taylor o bien usando la variable global Order . Cambiaremos el orden, y estudiaremos cómo varía el gráfico con esta nueva aproximación:

> Order:=12;

Order := 12

> fs2:=taylor(f,x=0);

fs2 := series(4*x-38/3*x^3+421/30*x^5-10039/1260*x^...

> plot({f,convert(fs2,polynom)},x=-1..1,-2..2,title=`sin(4x) cos(x) vs. Desarrollo de Taylor de orden 12`);

[Maple Plot]

Por último, crearemos una animación para estudiar la aproximación de f por distintos desarrollos de Taylor:

> taylordisplay:=proc(func,xpoint,n::posint,xrange::range)

> local x,p,q,i;

> if type(xpoint,name) then x:=xpoint;

> elif type(xpoint,name=constant) then x:=lhs(xpoint);

> fi;

> p:=plots[display]([seq(plot(convert(taylor(func,xpoint,i),polynom),x=xrange,color=blue,args[5..nargs]),i=1..n)],insequence=true);

> q:=plot(func,x=xrange,color=red,args[5..nargs]);

> plots[display]([p,q]);

> end:

Veamos un par de ejemplos-animaciones. Una vez obtenido el output debemos pulsar sobre él y seleccionar el botón "Play" del menú de animaciones:

> taylordisplay(exp(x),x=0,10,-6..6);

[Maple Plot]

> taylordisplay(sin(x),x=2*Pi,26,-3*Pi..3*Pi,view=-2..2);

[Maple Plot]

>

Student Package

Este paquete permite mostrar paso a paso cómo se resuelven los distintos problemas matemáticos que se plantean a los alumnos:

Rectas tangentes

> restart;

> with(student);

[D, Diff, Doubleint, Int, Limit, Lineint, Product, ...
[D, Diff, Doubleint, Int, Limit, Lineint, Product, ...
[D, Diff, Doubleint, Int, Limit, Lineint, Product, ...

La pendiente de la recta tangente a una curva en x=a se calcula como el límite del cociente incremental:

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

f := proc (x) options operator, arrow; x^2+3 end pr...

> slope([x,f(x)],[a,f(a)]);

(x^2-a^2)/(x-a)

> Limit(%,x=a);

Limit((x^2-a^2)/(x-a),x = a)

Para calcular el límite, en primir lugar debemos simplificar la expresión racional (dado que presenta una indeterminación), y luego realizar el límite:

> normal(%);

Limit(x+a,x = a)

> value(%);

2*a

En el caso particular que queramos calcular la pendiente de la recta tangente a la curva dada por f en x=3, simplemente debemos sustituir en la expresión anterior a=3.

> subs(a=3,%);

6

Para mostrar gráficamente la tangente podemos usar el comando showtangent( ) :

> showtangent(f(x),x=3,x=0..4);

[Maple Plot]

Ahora podríamos crear un programa que representara las rectas tangentes a f(x) en los puntos x= 0.8+0.2*i, cuando i toma valores enteros de 1 a 11. Usaremos el comando display con la opción insequence=true para obtener la animación:

> for i to 11 do

> p.i:=showtangent(f(x),x=0.8+0.2*i,x=0..4,colour=black) od:

Error, invalid left hand side in assignment (note that the concatenation operator is now || instead of .)

> plots[display]([p||(1..11)],insequence=true);

Error, (in plots[display]) invalid argument [p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11] which must be a plot structure, or a list/set/array thereof

>

Área bajo la curva

El Student Package contiene un conjunto de funciones que pueden resultar útiles para el aprendizaje de Cálculo Infinitesimal por parte de los alumnos.

> restart;

> with(student);

[D, Diff, Doubleint, Int, Limit, Lineint, Product, ...
[D, Diff, Doubleint, Int, Limit, Lineint, Product, ...
[D, Diff, Doubleint, Int, Limit, Lineint, Product, ...

Consideremos el área de la curva y=sin(x), de x=0.1 a x=1. Podemos aproximarla mediante 4 rectángulos usando la función leftbox (contenida en el Student Package).

> leftbox(sin(x),x=0.1..1,4);

[Maple Plot]

La parte coloreada representa la aproximación al área bajo la curva. Si aumentamos el número de rectángulos (disminuyendo su base) parece ser que obtendremos mejores aproximaciones. Realicemos algunas pruebas:

> leftbox(sin(x),x=0.1..1,8);

[Maple Plot]

> leftbox(sin(x),x=0.1..1,16);

[Maple Plot]

Ahora realizaremos las aproximaciones numéricamente. Calcularemos la suma de las áreas de los rectángulos que hemos empleado en cada caso:

> leftsum(sin(x),x=0.1..1,4);

.2250000000*Sum(sin(.1+.2250000000*i),i = 0 .. 3)

> value(%);

.3693477391

> leftsum(sin(x),x=0.1..1,8);

.1125000000*Sum(sin(.1+.1125000000*i),i = 0 .. 7)

> value(%);

.4125050766

> leftsum(sin(x),x=0.1..1,16);

.5625000000e-1*Sum(sin(.1+.5625000000e-1*i),i = 0 ....

> value(%);

.4337234043

Veamos cómo varía el valor aproximado cuando aumentamos el número de rectángulos usados. Para ello usaremos un bucle:

> for k from 20 to 200 by 20 do

> print(evalf(leftsum(sin(x),x=0..1,k)));

> od;

.4385651452

.4491553640

.4526747948

.4544325148

.4554865084

.4561889047

.4566904862

.4570666009

.4573590924

.4575930590

Podemos observar cómo las sumas convergen hacia cierto valor 0.457... Calculemos el límite de la suma de rectángulos para un número indeterminado n de rectángulos:

> leftsum(sin(x),x=0.1..1,n);

.9*Sum(sin(.1+.9*i/n),i = 0 .. n-1)/n

> limit(%,n=infinity);

.4547018594

Para comprobar la bondad de esta aproximación, podemos calcular la integral de la curva desde 0.1 hasta 1:

> Int(sin(x),x=0.1..1);

Int(sin(x),x = .1 .. 1)

> value(%);

.4547018594