Visualización Científica en MAPLE -...

67
(1.1.1.1) (1.1.1.1) Visualización Científica en MAPLE Luis A. Núñez Escuela de Física, Fac Ciencias, Universidad Industrial de Santander, Bucaramanga-Colombia Centro de Física Fundamental, Departamento de Física, Fac. de Ciencias, Universidad de Los Andes, Mérida-Venezuela e-mail: [email protected] y [email protected] http://webdelprofesor.ula.ve/ciencias/nunez y http://cevale2.uis.edu.co/~cevale2/wiki/index.php/Luis_A. _Nunez creado: Noviembre 2003 actualizado: Marzo 2013 Uno de los usos más impresionantes de las computadoras es la posibilidad de graficar resultados. Impresionantes superficies en 2D o gráficos de contorno, coloreados, impulsan nuestra intuición. Pero más aún, hoy en día es costumbre ver complicados gráficos de volúmenes los cuales se rebanan en distintos planos explorando los datos (minería de datos) igualmente las animaciones con distintos parámetros auxilian nuestra intuición. Hemos visto en las simulaciones anteriores que de las gráficas podemos sacar cantidad de información que analíticamente si no es imposible es significativamente difícil. . restart; Gráficas Analíticas 2D Para comenzar utilizaremos el comando más básico para graficación. Igualmente cargaremos en memoria una biblioteca de comandos gráficos El comando plot Generalidades de plot Hay varias formas de contruir una función f :=(x) -> x*sin(x); f := x x sin x y se grafica plot(f(x), x = -99..99);

Transcript of Visualización Científica en MAPLE -...

(1.1.1.1)(1.1.1.1)

Visualización Científica en MAPLE

Luis A. Núñez

Escuela de Física, Fac Ciencias, Universidad Industrial de Santander, Bucaramanga-Colombia

Centro de Física Fundamental, Departamento de Física, Fac. de Ciencias, Universidad de Los Andes, Mérida-Venezuela

e-mail: [email protected] y [email protected] http://webdelprofesor.ula.ve/ciencias/nunez y http://cevale2.uis.edu.co/~cevale2/wiki/index.php/Luis_A.

_Nunez

creado: Noviembre 2003actualizado: Marzo 2013

Uno de los usos más impresionantes de las computadoras es la posibilidad de graficar resultados. Impresionantes superficies en 2D o gráficos de contorno, coloreados, impulsan nuestra intuición. Pero más aún, hoy en día es costumbre ver complicados gráficos de volúmenes los cuales se rebanan en distintos planos explorando los datos (minería de datos) igualmente las animaciones con distintos parámetros auxilian nuestra intuición. Hemos visto en las simulaciones anteriores que de las gráficas podemos sacar cantidad de información que analíticamente si no es imposible es significativamente difícil..

restart;

Gráficas Analíticas 2DPara comenzar utilizaremos el comando más básico para graficación. Igualmente cargaremos en memoria una biblioteca de comandos gráficos

El comando plotGeneralidades de plotHay varias formas de contruir una función

f :=(x) -> x*sin(x);f := x x sin x

y se graficaplot(f(x), x = -99..99);

x80 60 40 20 0 20 40 60 80

80

60

40

20

20

40

60

80

nótese el juego con los botones de arriba.

Igual se puede graficar la función directamente y seleccionar una visión particularplot(x*sin(x), x = -10..10, y=0..4);

• •

• •

• •

x10 5 0 5 10

y

1

2

3

4

La SintaxisLa sintaxis del comando plot es la siguiente

plot(funcion-datos, horiz, vert, opciones)All but the first argument are optional, but arguments must be given in the order shown above.funcion-datos: expresión, mapping, lista o conjunto de datos a graficar

horiz / vert:

variable: etiquetas y ejes

rang0: determina el rango de graficación

variable = rango: ambos

opciones: ecuaciones de la forma opción = VALOR

Para encontrar la lista de opciones se busca ?plot[options]

Ejemplos, escalas y etiquetasplot(tan(x), x=-Pi..Pi);

x3 2 1 0 1 2 3

2000

1000

1000

2000

la escala vertical afecta la visión, para restringir la escala podemos procederplot(tan(x), x=-Pi..Pi, `tan(x)`=-5..5); # notese el entrecomillado inverso, ` `, para el eje vertical

x3 2 1 0 1 2 3

tan(x)

4

2

2

4

Las comillas inversas `, se utilizan para encerrar textos que quisiéramos que se desplieguen en la gráfica. nótese el símbolo de # que inhibe cualquier comando que lo siga.

Adicionalmente, vemos que las líneas verticales son espúrias. Para ello le podemos indicar al comando plot que lafunción es discontínua

plot(tan(x), x=-Pi..Pi, `tan(x)`=-5..5,discont=true,xtickmarks=[-3.14=`-Pi`,-1.57=`-Pi/2`,1.57=`Pi/2`,3.14=`Pi`]);

x-Pi -Pi/2 Pi/2

tan(x)

4

2

2

4

Incluimos en este comando, una manera más intuitiva de ver el eje x. En el eje y, las etiquetas sepuenden voltear y el título de la grafica se puede colocar, si nos ponemos un poco más exquisitos.

plot(tan(x), x=-Pi..Pi, `tan(x)`=-5..5,discont=true,xtickmarks=[-3.14=`-Pi`,-1.57=`-Pi/2`,1.57=`Pi/2`,3.14=`Pi`],labels=[`x`,`tan(x)`],title=`tan(x) vs x`,labeldirections = [horizontal, vertical]);

(1.1.3.1)(1.1.3.1)

x-Pi -Pi/2 Pi/2

tan(

x)

4

2

2

4

tan(x) vs x

Adicionalmente, también podemos explorar la funcióng:=(x)->sin(x^2)/x^2;

g := xsin x2

x2

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

x6 4 2 0 2 4 6

0.2

0.2

0.4

0.6

0.8

1.0

y notamos que los ejes no tienen la misma escala, por lo cual nuestra intuición se puede ver traicionada, entonces a veces es bueno colocar scaling=constrained

plot(g(x),x=-2*Pi..2*Pi, `sin(x^2)/x^2.`=-0.5..1.5, xtickmarks=[-6.28=`-2Pi`,-4.71=`-3Pi/2`,-3.14=`-Pi`,-1.57=`-Pi/2`, 1.57=`Pi/2`,3.14=`Pi`,4.71=`3Pi/2`,6.28=`2Pi`],scaling=constrained);

x-2Pi -3Pi/2 -Pi Pi/2 3Pi/2 2Pi

sin(x^2)/x^2.

0.5

1

Algunas veces las funciones son razonables y no evolucionan muy rápidoplot(g(x),x=-infinity..infinity, `sin(x^2)/x^2.`=-0.5..1.5, scaling=constrained);

x0

sin(x^2)/x^2.

Asignación y manipulación de gráficasLas gráficas se pueden asignar a variables para luego almacenarlas, imprimirlas o mostrarlas en pantalla. En ese caso para no ser testigo de la asignación de un inmenso y casi inenteligible conjunto de números, debemos terminar la asignación con dos punto :

graftan:=plot(tan(x), x=-Pi..Pi, `tan(x)`=-5..5,discont=true,xtickmarks=[-3.14=`-Pi`,-1.57=`-Pi/2`,1.57=`Pi/2`,3.14=`Pi`]):

luego podremos mostrar la gráfrica con solo invocar la variblegraftan;

x-Pi -Pi/2 Pi/2

tan(x)

4

2

2

4

Podemos almacenar la gráfica para utilizarla en ésta u otra sesión de maplesave graftan, "/Users/luisnunez/Desktop/Fisica/UIS/CursosUIS/Maple/Visualizacion/tempGraf.m":

Nótese la forma de escribir el trayecto para almacenar el archivo y que el nombre del archivo debe tener la extensión .m para que MAPLE escriba el nombre de la variable y su asiganción en el formato interno de MAPLE. De esta forma el archivo es recuperable y se puede incluir en cualquier otra hoja de trabajo. Obviamente lla sintaxis del camino para almacenar las gráfica dependerá del sistema operativo

graftan := NULL: # con esta expresion "aNULLamos" el valorde la variable para luego asignarle otrograftan;read "/Users/luisnunez/Desktop/Fisica/UIS/CursosUIS/Maple/Visualizacion/tempGraf.m":graftan;

(1.2.1.1)(1.2.1.1)

x-Pi -Pi/2 Pi/2

tan(x)

4

2

2

4

Como el archivo graftan.m contiene el nombre de la variable y su asignación, nos vimos abligados a "limpiar" el contenido de la variable antes de leerla del archivo donde fue almacenada. Esta acción no será necesaria si leemos esta gráfica desde otra hoja de trabajo MAPLE.

Disgresión en la estructuraTipos de Datos, listas, conjuntos .....y ø qué más La visualización de los datos simpre impone conocer algo de la estructura con la cual estamos trabajando. Conocer los datos Y su estructura es vital para su representación gráfica. Exploraremos aquí algunas particularidades de la representación de datos utilizando esta herramienta. MAPLE dispone de diversas maneras de representar los datos. Veamos el siguiente ejemplo con el comando solve(eqn, var) que implica resolver una ecuación algebráica, eqn, para una de las variables involucradas var

polinomio:=x^4-1; # shif + enter nos deja dentro del mismogrupo de comandossolve(polinomio, x);

polinomio := x4 1

1, 1, I, I

(1.2.1.5)(1.2.1.5)

• •

(1.2.1.3)(1.2.1.3)

• •

(1.2.1.4)(1.2.1.4)

• •

(1.2.1.2)(1.2.1.2)

• •

• •

MAPLE nos devuelve una secuencia de soluciones. Ahora bien, si procedemos a especificar UNA de las soluciones, tendríamos que

solve(polinomio, x)[1];1

argumento:=polinonimo,x;argumento := polinonimo, x

whattype(argumento);exprseq

claramente es una expresion de una secuencia !Primeramente, diremos que utilizaremos de manera indistinta la palabra dato abstracto uobjeto. En segundo lugar puntualizaremos que indicaremos estos objetos de distinto modo: mediante series de objetos separados por comas entre paréntisis (), objetos separados por comas entre llaves {} u objetos separados por comas entre corchetes []. Cada uno de estos conjuntos de objetos representa una estructura de datos distinta y tendrá una representación, utilización y un álgebra distinta. Nótese que ya hemos utilizado algunas de estas estructuras. Además de los argumentos de las funciones (objetos separados por comas dentro de paréntesis)en el caso de las etiquetas (labels=[,]) Consideraremos las siguientes estructuras de datos para graficar

Secuencias: Es el conjunto de datos u objetos separados por comas. Los argumentos de las funciones en MAPLE son, de acuerdo con esta definición, secuencias.

Conjuntos: Recuerda a la estructura y operación de los conjuntos matemáticos: es un conjunto de elementos separados por comas y encerrados entre llaves en los cuales los elementos aparecen un única vez y el orden de los elementos no importa. Pudiera decirse que un conjunto es una secuencia entre llaves.

Listas: Si un conjunto era una secuencia encerrada entre llaves, diremos ahora que una lista es un conjunto de conjuntos separados por comas encerrados entre corchetes, pero tambien es una secuencia encerrada entre llaves. A diferencia de los conjuntos el orden (y la posición) en el cual aparecen los elementos de la lista DEFINITIVAMENTE SI importa. Además los elementos pueden aparecer repetidos.

Arreglos: Este tipo de estructura de datos corresponde con la representación de vectores y matrices y en el caso de visualización utilizaremos las matrices para graficar archivos de datos experimentales

Tabla: La mencionamos por completitud, pero no abundaremos en su significado y uso, sólo diremos que es una estructura similar a la de registro (record) en lenguajes como Pascalo C.

Así, podemos ejemplificar lo anteriormente expuestoecua1:=3*x +4*y=5;ecua2:=8*x -y=16;solve( {ecua1, ecua2}, {x, y});

ecua1 := 3 x 4 y = 5

ecua2 := 8 x y = 16

x =6935

, y =835

(1.2.1.10)(1.2.1.10)

(1.2.1.6)(1.2.1.6)

(1.2.1.9)(1.2.1.9)

(1.2.1.8)(1.2.1.8)

(1.2.1.7)(1.2.1.7)

constituye el conjunto de soluciones, el cual, obviamente es equivalente a solve( {ecua2, ecua1}, {y, x});

x =6935

, y =835

y en contraposición al ejemplo anterior, si invertimos el orden de una lista, el resultado es otroplot(x*sin(x),x =-10..10,labels=[`f(x)`,`x`],title=`f(x) vs x`);

f(x)10 5 0 5 10

x

4

2

2

4

6

f(x) vs x

Finalmente, podremos representar un vector como v:=array( [1+a,3+2*a +b,8+3*a+5*b+8*c]);

v := 1 a 3 2 a b 8 3 a 5 b 8 c

y verificarlotype(v,list);

false

type(v,vector);true

type(v,array);true

(1.2.1.11)(1.2.1.11)

una matrizM:=array([ [1-p,2-q],[2-p*q,3-p^q] ]);

M :=1 p 2 q

2 p q 3 pq

Un mínimo de Operaciones con la estructura de datosOperadores

Operaciones

Varias curvas en una gráficaPara representar varias curvas en una gráfica utilizamos un conjunto de curvas. Esto es le dato abstracto conjunto por cuanto no repetiremos una curva y su orden no nos importará. De este modo, tendremos un conjunto como primer objeto de la secuencia que es el argumento de la función

plot({sin(wt),-cos(wt),-sin(wt)}, wt = -Pi..1.5*Pi);

wt3 2 1 0 1 2 3 4

1

0.5

0.5

1

o acomodando un poco esta gráficaplot({sin(wt),-cos(wt),-sin(wt)}, wt = -Pi..1.5*Pi,

scaling=constrained, title = "Posición, Velocidad y Aceleración", axes = BOXED,colour = [orange, blue,green]);

wt3 2 1 0 1 2 3 4

10.5

0

0.51

Posición, Velocidad y Aceleración

Pero no podemos colocar una leyenda para diferenciar curvas porque hemos graficado unconjunto de funciones y no una lista de funciones. Si queremos incluir una leyenda que diferencie las curvas en la gráficas, tenemos que graficar una lista de funciones donde el orden de las curvas importe.

plot([sin(wt),-cos(wt),-sin(wt)], wt = -Pi..1.5*Pi, scaling=constrained, title = "Posición, Velocidad y Aceleración", axes = BOXED, colour = [orange, blue,green], legend = ["Posición", "Velocidad","Aceleración"]);

Posición Velocidad Aceleración

wt3 2 1 0 1 2 3 4

10.5

0

0.51

Posición, Velocidad y Aceleración

Pero también podremos representar el típo y el grosor de la línea para cuando no tengamos una impresión en colores

plot([sin(wt),-cos(wt),-sin(wt),wt], wt = -Pi..1.5*Pi, scaling=constrained, title = "Posición, Velocidad y Aceleración", axes = normal, colour = [orange, blue,green,black], legend = ["Posición", "Velocidad","Aceleración","argumento"], linestyle=[1,2,3,4], thickness=[3,2,1,0]);

Posición Velocidad Aceleraciónargumento

wt3 2 1 0 1 2 3 4

3

2

1

1

2

3

4

Posición, Velocidad y Aceleración

y todo lo anterior se puede cambiar utilizando las barra de herramientas que provee MAPLE cuando se marca la gráfica.

Explorando CurvasPodemos trambien delimitar una ventana de visualizacion con la opción view= [xmax..xmin,ymax..ymin] EL RANGO DE Y

plot([sin(x),tan(x),x], x = 0..Pi, view=[0..Pi, -Pi..Pi],scaling=constrained,discont=true);

x1 2 3

3

2

1

0

1

2

3

o tambiénplot([sin(x),tan(x),x], x=0..Pi,view=[0..1.5, -2..2],scaling=constrained,discont=true);

x0.5 1 1.5

2

1

0

1

2

plot([sin(x),min(10,tan(x)), x], x = -Pi..Pi,discont=true);

x3 2 1 0 1 2 3

2500

2000

1500

1000

500

plot([sin(x),max(-10,tan(x)), x], x = -Pi..Pi);

x3 2 1 0 1 2 3

500

1000

1500

2000

2500

plot([sin(x),max(-5, min( 5, tan(x) ) ), x], x=-Pi..Pi,scaling=constrained,discont=true);

x3 2 1 0 1 2 3

4

2

2

4

Variedades de CurvasEn los puntos anteriores hemos explorado la forma estándar de curva, esto es y(x) vs x, ahora trataremos de explorar otros tipos

ParamétricasTípicamente hemos visto curvas f(x) vs x y hemos graficado varias curvas en una misma gráficaf(t) vs t y g(t) vs t . Con ello lo que queremos decir es que graficamos el lugar geométrico tal que (x = t, y=f(t)) y ( x = t, y=g(t)) Ahora la idea es graficar ambas curvas etiquetadas por ese parámetro t tal que (x=f(t), y=g(t) ).Por ejemplo graficamos el lugar geométrico de todos los puntos (t^2,t) tendremos que la sintaxis será clara, plot([x(t), y(t), t=rango de t], h, v, opciones) los dos primeros elementos de la lista del argumento seran x, y, variación del parámetro

plot([t^2, t, t = -1..1]);

0.2 0.4 0.6 0.8 1

1

0.5

0

0.5

1

igualementeplot([sin(t^2), t, t = -2*Pi..2*Pi]);

1 0.5 0 0.5 1

6

4

2

2

4

6

En Física cuando graficamos la velocidad vs la posición llamamos a ese espacio el espacio de fases. Así para un oscilador armónico simple tendremos

omega0:=2*Pi/5:xosc(t):= 2*sin(omega0*t);plot( [xosc(t), diff(xosc(t),t), t = -5..5], labels=[`Posicion`,`Velocidad`],labeldirections = [horizontal, vertical]);

xosc t := 2 sin25

t

Posicion2 1 0 1 2

Velo

cida

d

2

1

1

2

Quizá el ejemplo, más emblemático de representación paramétrica de una curva lo constituye la circunsferencia centrada en el origen que viene dada por el lugar geométrico, coordenadas cartesianas, de los puntos (x,y) -> r cos , r sin , 0 2 , entonces pod

radio1 := 5: plot([radio1*cos(t), radio1*sin(t), t = 0..2*Pi], scaling = CONSTRAINED);

4 2 0 2 4

4

2

2

4

PolaresUna gráfica en coordenadas polares viene dada por la representación der = r Si consideramos un radio constante y graficamos su trayectoria variando el ángulo describimos una circunsferencia centrada en el origen. Es equivalente a graficar una curva paramétrica del lugar geométrico del tipo (x= r , y= ) y se varía el parámetro obviamente le indicamos a MAPLE que la gráfica viene en coordenadas plares. Si graficamos la misma circunsferencia centrada en el origen del punto anterior tendremos:

radio2 :=5;plot([radio2 , theta, theta=0..2*Pi],coords=polar);

radio2 := 5

4 2 0 2 4

4

2

2

4

si por el contrario r = sin entoncesplot([sin(theta) , theta, theta=0..2*Pi],coords=polar, scaling=constrained);

(1.5.2.1)(1.5.2.1)

0.4 0.2 0 0.2 0.4

0.2

0.4

0.6

0.8

1

En la Aproximación de Born para dispersión elástica de electrones que inciden sobre átomos, seobtiene la expresión para la sección eficaz diferencial para el scatering apantallado de Rutherford.

sigma1:=(k,theta)->(1/4)*( (Z^2*(1-(1/(1+4*k^2*a^2*sin(theta/2)^2)^2))^2)/(k^4*sin(theta/2)^4));

1 := k,14

Z2 11

1 4 k2 a2 sin12

2 2

2

k4 sin12

4

en la cual E :=1 k2

2 es la energía de dispersión que se considera fija; Z es el número atómico

y a corresponde con el factor de apantallamiento. Si graficamos la sección eficaz diferencial respecto al ángulo, nos queda algo como

plot(subs(a=1/2,Z=1,sigma1(1,theta)), theta=0..2*Pi, labels=["theta","sigma"]);

theta0 1 2 3 4 5 6

sigma

0

0.2

0.4

0.6

0.8

1

es mucho más intuitiva si realizamos la gráfica en coordenadas polares.plot([subs(a=1/2,Z=1,sigma1(1,theta)), theta, theta=0..2*Pi], coords= polar,scaling=constrained);

0 0.2 0.4 0.6 0.8 1

0.4

0.3

0.2

0.1

0.1

0.2

0.3

0.4

Es mucho más evidente el patrón de dispersión el valor de la función para cada ángulo. Algo parecido presenta R. Landau en el patrón de dispersión de Rayos x de baja energía dispersados por una esfera

sigma:=3+2*cos(theta)^4 + 2*cos(theta);plot(sigma, theta=0..2*Pi, labels=["theta","sigma"], scaling=constrained);

:= 3 2 cos4

2 cos

theta0 1 2 3 4 5 6

sigma

3

4

5

6

7

no es obvia la forma del patrón de dispersión cosa que es clara cuando se grafica en término de coordenadas polares

plot([sigma, theta, theta=0..2*Pi],coords=polar,scaling=constrained);

2 0 2 4 6

3

2

1

1

2

3

El Paquete plotsEl paquete plots aumenta las posibilidades de graficación al incluir un conjunto de "comandos" adicionales. Las funciones del plots se pueden invocar directamente haciendo referencia al paqueteplots. Esto es: plots[setoptions](scaling = CONSTRAINED). Lo más común es quese utilicen directamente como setoptions(scaling = CONSTRAINED), luego de incorporar el paquete completo de funciones como lo es usual en MAPLE a través del comando

restart;with(plots):Los nombres que arriba aparecen hacen intuir la funcionalidad del comando. Mostraremos el uso de algunas de las opciones y dejaremos al lector explorar algunas de las otras mediante la utilización de la ayuda en línea.

Cambio de opciones por omisión Lo primero que exploramos en el uso de los nuevos comandos que provee el paquete plots es la posibilidad de crear un conjunto, personalizado de opciones por omisión. Así las opciones poromisión pueden ser alteradas mediante

setoptions(scaling = CONSTRAINED);Opción que será supuesta por omisión a partir de este momento y la cual pude ser revertida mediante: setoptions(scaling = UNCONSTRAINED);

Gráficas LogarítmicasSeguidamente exploraremos otra de las opciones de plots que permite realizar gráficas logarítmicas, mediante los comandos logplot (eje vertical logarítmico), semilogplot (eje horizontal logarítmico) loglogplot (ambos ejes logarítmicos)Así tendremos que

semilogplot([ln(3*x)/10,log[10](x)], x=1..2*Pi,labels=["log10(x)","y"],labeldirections = [horizontal, vertical],legend = ["ln(3*x)/10","log[10](x)"],title="Grafica Semi log = eje x log");

ln(3*x)/10 log[10](x)log10(x)

1 2 3 4 5 6

y

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

Grafica Semi log = eje x log

logplot([ln(3*x)/10,log[10](x)], x=1..2*Pi,labels=["x","log10(y)"],labeldirections = [horizontal, vertical],legend = ["cos(x) + sen(x)","log[10](x)"],title="Grafica Semi log = eje y log",numpoints=500);

cos(x) + sen(x) log[10](x)x

1 2 3 4 5 6

log1

0(y)

10 - 9

10 - 8

10 - 7

10 - 6

10 - 5

10 - 4

10 - 3

10 - 2

10 - 1

Grafica Semi log = eje y log

Nótese como hemos aumentado el número de puntos de graficación a través de la opciónnumpoints=500

loglogplot([ln(3*x)/10,log[10](x)], x=1..2*Pi,labels=["log10(x)","log10(y)"],labeldirections = [horizontal, vertical],legend = ["cos(x) + sen(x)","log[10](x)"],title="Grafica Semi log = ejes x y log",numpoints=500 );

cos(x) + sen(x) log[10](x)log10(x)

1 2 3 4 5 6

log1

0(y)

10 - 6

10 - 5

10 - 4

10 - 3

10 - 2

10 - 1

Grafica Semi log = ejes x y log

Otra vez, varias Gráficas en una: la función display Otra forma de representar varias curvas en una sola gráfica es a través de la función display del paquete plots. Esta función permite mostrar varias gráficas mediante la asignación de gráficas a variables, para luego "mostrar" el conjunto de variables. Así el ejemplo más trivial lo constituye las g[raficas del seno y el conseno. Esto es

S := plot(sin): C := plot(cos):display({S,C}, title = "Seno y Coseno");

(1.6.3.1)(1.6.3.1)

10 5 5 101

1

Seno y Coseno

Un ejemplo más interesante lo constituye el movimiento bajo fuerzas centrales cuando

consideramos un potencial del tipo V r =r

el cual es típico en el movimiento planetario o

en movimentos bajo fuerzas coulombinas. Es claro que = G m1 m2 para el caso de gravitación universal newtoniana o = q1 q2 para el caso de las fuerzas coulombianas. Para este caso la trayectoria de los cuerpos sometidos a la acción de la fuerza que deriva del potencialserá

r1:=(theta)->lambda*(1+epsilon)/(1+epsilon*cos(theta-theta0));

r1 := 1

1 cos 0

donde =L 2

m 1 y , la excentricidad, viene dado por = 1

2 E L 2

m 2

12

Con

L la cantidad de movimiento angular; E la energía total. Nóteses que será positivo, para potenciales atractivos ( > 0 ) y será negativo para potenciales repulsivos ( < 0). Igualmente recordemos que la esta evolución corresponde a una representacion de secciones cónicas y las

cuales se ilustran

theta0:=0;rElipse := subs (lambda=1,epsilon=1/2,r1(theta)):rParabola := subs (lambda=1,epsilon=1,r1(theta)):rHiperbolaP := subs (lambda=1,epsilon=2,r1(theta)):rHiperbolaN := subs (lambda=-1,epsilon=2,r1(theta)):grfrElipse:=plot([rElipse,theta,theta=0..2*Pi],coords=polar, color=red):grfrParabola:=plot([rParabola,theta,theta=0..2*Pi],coords=polar, color =green ):grfrHiperbolaP:=plot([rHiperbolaP,theta,theta=0..2*Pi],coords=polar, color =blue ):grfrHiperbolaN:=plot([rHiperbolaN,theta,theta=0..2*Pi],coords=polar,color =yellow):display([grfrElipse,grfrParabola,grfrHiperbolaP,grfrHiperbolaN], view=[-10..1,-10..10], title="Secciones Cónicas");

0 := 0

10 8 6 4 2 0

10

5

5

10Secciones Cónicas

Explorando el comportamiento de datos con animaciones.Existen dos formas de representar animaciones con MAPLE: una limitada utilizando el comandoanimate y otra forma utilzando el comando display analicemos ambos casos

(1.6.4.1.1)(1.6.4.1.1)

Animaciones con animate La sintaxis del comando animate es animate(pcomandoplot, argplot, t=a..b,...) Este comado genera una gráfica y al seleccionarla aparecen botones parecidos a loscontroles de una videograbadora.

Consideremos la solución sub-amortiguada del oscilador libre, amortiguado restart;with(plots):xamort(t) := 1/2*(mu*x0+(mu^2-omega0^2)^(1/2)*x0+v0)/(mu^2-omega0^2)^(1/2)*exp((-mu+(mu^2-omega0^2)^(1/2))*t)-1/2*(mu*x0-(mu^2-omega0^2)^(1/2)*x0+v0)/(mu^2-omega0^2)^(1/2)*exp((-mu-(mu^2-omega0^2)^(1/2))*t);

xamort t :=12

x0

20

2 x0 v0 e

2 02 t

20

2

12

x0

20

2 x0 v0 e

2 02 t

20

2

Para analizar su comportamiento bajo variación de parámetros, podemos considerar un par de formas de animar esa gráfica.Primeramente, consideremos variaciones de la velocidad inicial para un coeficiente de amortiguamiento, una masa y una constanteelástica dada. Esto es

paramV:=[x0=0,mu=0.5,omega0=2]:Xv(t):=subs(paramV,xamort(t));animate(plot,[Xv(t),t=0..10],v0=1..10);

Xv t := 0.2581988898 I v0 e 0.5 1.936491673 I t

0.2581988898 I v0 e 0.5 1.936491673 I t

t2 4 6 8 10

1

0

1

2

3

v0 = 10.000

También podemos explorar el comportamiento bajo variacioes del coeficiente de amortiguamiento, estos es

parammu:=[x0=0,v0=5,omega0=2]:Xmu(t):=subs(parammu,xamort(t));animate(plot,[Xmu(t),t=0..10],mu=0.1..1.99, frames=100);

Xmu t :=52

e

2 4 t

24

52

e

2 4 t

24

t2 4 6 8 10

1

0

1

2

= 1.9900

También se pueden superponer una animación con un fondoondaseno := plot( sin(x)*exp(-x/5),x=0..20 ):animate( pointplot, [ [[t,sin(t)*exp(-t/5)]],symbol=circle,symbolsize=10], t=0..20, frames=60, background=ondaseno );

x5 10 15 20

0.2

0

0.2

0.4

0.6

t = 0.

y comparar la evolución de una curva respecto a otracurva := implicitplot( x^3+y^2, x=-3..1, y=-4..4, color=blue ):animate( implicitplot, [x^3-A*y+y^2,x=-3..1,y=-4..4], A=-2..2, frames=50 );

x2.5 2 1.5 1 0.5 0 0.5

y

4

3

2

1

1

2

3

4A = 2.

Animaciones utilizando display Con la opción insequence = true, display combina una lista gráficas que cambian con el tiempo así, la gráfica (paramétrica ) de una línea recta

setoptions(scaling = CONSTRAINED);plot([[0,0], [cos(Pi/4),sin(Pi/4)]], 0..1, 0..1);

0 0.2 0.4 0.6 0.8 10

0.2

0.4

0.6

0.8

1

Animémosla con una secuencia de 16 cuadros con evolucionando de 0 con incrementos de 2 16

. Primeramente, construimos la secuencia de gráficas

plot_seq := seq(plot([[0,0], [cos(Pi/8*i),sin(Pi/8*i)]]), i = 0..15):display([plot_seq], insequence = true);

1 0.5 0 0.5 1

1

0.5

0.5

1

Igual que el caso anterior, podemos animar una grárfica sobre, con otra gráfica fija.display({%, # la animacion anterior plot([cos(t), sin(t), t = 0..2*Pi])}, # el circulo fijo title = "The hand of time");

(1.6.5.1)(1.6.5.1)

1 0.5 0 0.5 1

1

0.5

0.5

1The hand of time

Campos y ContornosPara ejemplificar una de las mejoras con el uso de las extensiones de plots supongamos dos lineas con cargas opuestas e infinitas, situadas perpendiculares al plano x,y que lo atraviezan en las posiciones (-1,0,0) y (1,0,0) el potencial electrostático vendrá dado por

phi := ln(sqrt((x+1)^2)+y^2) -ln(sqrt((x-1)^2)+y^2);

:= ln x 1 2 y2 ln x 1 2 y2

una gráfica que muestra la intensidad de estas líneas de potencial surge de gradplot(-phi,x=-2..2, y=-2..2,arrows=thick, grid=[11,11],axes=box);

2 1 0 1 22

1

0

1

2

Del mismo modo tendremos como gráficos de contornocontourplot(phi, x=-2..2, y=-2..2,axes=box);

x2 1 0 1 2

y

1.5

1

0.5

0

0.5

1

1.5

con más puntos y mas contornos es mucho más claracontourplot(phi, x=-2..2, y=-2..2, numpoints=1000, contours=50);

x2 1 0 1 2

y

2

1

1

2

Pero aún se puede trabajar un poco máscontourplot(phi, x=-2..2, y=-2..2, numpoints=1000, contours=50, filled=true, coloring=[white,black] );

y si las hacemos en 3D, tendremos

implicitplot3d(z=phi, x=-2..2, y=-2..2, z= -3..3);

implicitplot3d(z=phi, x=-2..2, y=-2..2, z= -3..3, numpoints=1000); # con muchos más puntos

Pero podemos ir más allá y exportar estas gráficas a un formato vrml (virtual reality markup language) el cual es posible explorarlo con cualquier navegador

grfcargas:=implicitplot3d(z=phi, x=-2..2, y=-2..2, z= -3..3,numpoints=500): # asigno la grafica a una variablevrml( grfcargas, `c:/Luisn/Latex/cursos/visualizacion/cargas.wrl`):

Curvas en el espacioEl paquete plots permite dibujar curvas en el espacio. El comando no puede ser más intuitivoplots[spacecurve]. Por su parte la sintaxis del comando es escencialmente la misma que las curvas paramétricas definidas en 2D. En general representaremos una curva en el espacio parametrizada por una variable esto es

x t , y t , z t , a t b

y también podemos representarla mediante puntos que serán unidos ((x1, y1, z1), (x2, y2, z2), ... ).

por segmentos de rectas. Así, la curva paramétrica de una hélice circular en el espacio queda representada por

spacecurve([cos(t), sin(t), t, t=0..2*Pi], colour = BLACK,axes = NORMAL);

y nudos en el espacioknot:= [ -10*cos(t) - 2*cos(5*t) + 15*sin(2*t), -15*cos(2*t) + 10*sin(t) - 2*sin(5*t), 10*cos(3*t), t= 0..2*Pi]:spacecurve(knot,axes=framed);

Puntos y Archivos de Datos Experimentales

Puntos y ListasCuando se refiere a graficar datos experimentales debemos graficar objetos numéricos. Estos objetos pueden provenir de variables numéricas generadas en la solución de un problema o archivosnuméricos de datos experimentales. Presentaremos aqui un par de ejemplos, uno de ellos que proviene del comando listplot(Lista, opciones) del paquete plots. Este comando realizauna gráfica 2D para una lista de números que corresponden a las coordendas y de un punto (x,y), asignando los valores de x por omisión en forma consecutiva. Así

listplot([1, 8, 27, 11, 18, 20, 34]); # graficará estos valores asignandol la lista x = [1,2,3,4,5,6,7]Ydatos := [1, 8, 27, 11, 18, 20, 34]; # o equivalentemente con solo puntoslistplot(Ydatos,style = POINT, symbol = DIAMOND, color=red);

1 2 3 4 5 6 7

5

10

15

20

25

30

Ydatos := 1, 8, 27, 11, 18, 20, 34

1 2 3 4 5 6 7

5

10

15

20

25

30

Si queremos graficar los puntos (x,y) con x particulares, tendremos que proveer, de forma explícita,el valor de las x con Lista = [[x1,y1],.[x2,y2],.[x3,y3], .. ,[xn,yn]]

XYdatos:= [[2, 8], [4,27], [6,11], [8,18], [10,20], [12,34]];# o equivalentemente con solo puntoslistplot(XYdatos,style = POINT, symbol = DIAMOND, color=red);

XYdatos := 2, 8 , 4, 27 , 6, 11 , 8, 18 , 10, 20 , 12, 34

2 4 6 8 10 12

10

15

20

25

30

o un poquito más elaborador := rand(0..10); # Entero aleatorio dentro de un rango especificadolistadatos := [seq([1/(n+1),r()], n=0..10)]; # construyo la lista de puntoslistplot(listadatos,style = POINT, symbol = DIAMOND, color=red);

r := proc

proc option builtin = RandNumberInterface; end proc 6, 11, 4

end proc

listadatos := 1, 6 ,12

, 9 ,13

, 5 ,14

, 1 ,15

, 10 ,16

, 3 ,17

, 5 ,18

, 4 ,

19

, 10 ,110

, 0 ,111

, 7

0.1 1.00

2

4

6

8

10

Graficando MatricesIgualmente podemos generar una matriz cuyos elementos sean números aleatorios

with(linalg):with(plots);C := randmatrix(18,15,'sparse'): # generamos una matriz rectangular 18x15CT:=htranspose(C);sparsematrixplot(C,matrixview);

animate, animate3d, animatecurve, arrow, changecoords, complexplot, complexplot3d,

conformal, conformal3d, contourplot, contourplot3d, coordplot, coordplot3d,

densityplot, display, dualaxisplot, fieldplot, fieldplot3d, gradplot, gradplot3d,

implicitplot, implicitplot3d, inequal, interactive, interactiveparams, intersectplot,

listcontplot, listcontplot3d, listdensityplot, listplot, listplot3d, loglogplot, logplot,

matrixplot, multiple, odeplot, pareto, plotcompare, pointplot, pointplot3d, polarplot,

polygonplot, polygonplot3d, polyhedra_supported, polyhedraplot, rootlocus,

semilogplot, setcolors, setoptions, setoptions3d, spacecurve, sparsematrixplot,

surfdata, textplot, textplot3d, tubeplot

CT := 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0 ,

0, 0, 21, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 23, 27, 0, 0, 0 ,

0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 75, 91, 0, 0, 0, 0, 0, 0 ,

0, 89, 0, 0, 0, 19, 0, 52, 28, 0, 50, 0, 0, 0, 0, 0, 0, 44 ,

0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 10, 0 ,

23, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,

0, 44, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 8, 0, 0, 0, 0 ,

0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 6, 0, 0, 0 ,

0, 37, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,

0, 0, 0, 60, 62, 0, 0, 7, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,

0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 77, 0, 16 ,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 97, 0, 0, 0 ,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0 ,

0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0 ,

0, 0, 54, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 46, 0

column1 5 10 15 18

row

12

4

6

8

10

12

1415

También se pueden importar matrices de datos estándares de http://math.nist.gov/MatrixMarket/A:=ImportMatrix("/Users/luisnunez/Desktop/Fisica/UIS/CursosUIS/Maple/Visualizacion/bcsstk04.mtx", source=MatrixMarket);sparsematrixplot(A, 'color=green',matrixview);

A :=

132 x 132 Matrix

Data Type: float8Storage: sparselower

Order: Fortran_order

column1 20 40 60 80 100 120 132

row

1

20

40

60

80

100

120

132

Más impresionante es el ejemplo que presenta Alexander F. Walz (E-mail: [email protected]) en http://www.math.utsa.edu/mirrors/maple/maplev.html en este ejemplo se procesa un archivo que contiene la información de la ubicación de 22.000 galaxias, convierte estos datos a un formato que pueda ser utilizado por MAPLE y luego los vuelva a procesar para graficarlos en 3D dependiendo de su distancia al Sol. Finalemente los convierte al formato vrml para que pueda ser explorado con cualquier navegador de INTERNET

Gráficas Analíticas 3D

Gráficas 3D implícitas con plots Funciones implícitas con implicitplot3dTal y como vimos antes, se pueden graficar superficies con la utilización de a biblioteca plots la sintaxis del comando es implicitplot3d(expr, x=a..b, y=c..d, z=p..q, opciones)Nótese a continuación que la opción grid = [k, l, m] indica que la malla de la superfice es k x l x m . La opción por omisión es 10 x 10 x 10.De esta forma tenemos

restart;with(plots):implicitplot3d(x^3+y^3+z^3+1=(x+y+z+1)^3, x=-2..2, y=-2..2, z=-2..2, grid=[15,15,15]);

y en distintos sistemas de coordenadas

implicitplot3d(r=(1.3)^x*sin(y), r=0.1..5, x=-1..2*Pi, y=0..Pi, coords=spherical);

y utilizando listas o conjuntos para superponer gráficasimplicitplot3d([(x+2)^2+(y+2)^2+(z+2)^2=9, (x-2)^2+(y-2)^2+(z-2)^2=6], x=-5..5, y=-5..5, z=-5..5, color=[blue,green], scaling=constrained, axes=boxed);

Graficando Funciones Complejas con Funciones de variable compleja f(z) = f(x + i y) = ( re f, im f), pueden graficadas utilizando el comando complexplot3d(f(z), z=a + b*I..c + d*I) y el rango de "variación" de z viene dado por a + b*I..c + d*IEsto puede verse como

complexplot3d( sec(z) , z = -2 - 2*I .. 2 + 2*I,axes=framed );

juegue con los botones, note los ejes y compruebe la forma como se grafica funciones complejas.

Gráficas 3D Analíticas con plot3d El comando plot nos permitió graficar funciones analíticas que dependian de una sola variable, del mismo modo se pueden graficar funciones de dos variables. El comando será El comando plot nos permitió graficar funciones analíticas que dependian de una sola variable, del mismo modo se pueden graficar funciones de dos variables. plot3d y es similar su uso al comando plot sólo que, por tratarse de gráficas de funciones de varias variables, requerirá especificar un rango de variación para cada variable. La sintaxis del comando es también similar al comando plot

plot3d(f(x,y), x=a..b, y=c..d, opciones)plot3d(f, a..b, c..d, opciones)

las opciones title, axes y scaling operan igual que para el comando plot de gráficas 2D. La única particularidad para el caso plot3d que la opción axes tiene por valor de omisiónNONE, es decir, ningún eje aparecerá a menos que se lo indiquemos a MAPLE. Adicionalemente, para 3D existe la necesidad de especificar la orientación orientation = , la cual especifica el ángulo de presentación. Por omisión será 45, 45 , donde:

es la longitud o azimuth medida en grados a partir del eje positivo de las x ; representa lacolatitud medida, también en grados, partiendo del eje positivo de las z.y finalmente view =

rango de z (o una lista que especifique los rangos para x,y,z ).Estos parámetros aparecen indicados en la barra de herramientas una vez que se selecciona la figura utilizando el ratón.

Esto esplot3d(sin(x+y), x=-1..1, y=-1..1);

Más allá de las especificaciones en las opciones, se puede interactuar con la gráfica mediante los botones de control que aparecen cando se selecciona la región de la gráfica.De igual modo se puede especificar la gráfica 3D en forma paramétrica esto es que cada una de las coordenadas dependa de dos parámetros

x s, t , y s, t , z s, t , a s b, c t d.que se traduce a la siguiente sintaxis

plot3d([x(s,t), y(s,t), z(s,t)], s=a..b, t=c..d)y obviamente el rango que aparace es el de los parámetros que etiquetan a las coordenadas.

plot3d([cos(t),sin(t),z], t=0..2*Pi, z=-1..1);

Gráficas 3D para datos experimentalesDe los mejores usos que se le puede dar a esta herramienta está la posiblidad repesentar superficies provenientes de datos experimentales y a partir de allí manipularlos para buscar relaciones entre ellos.