Matemáticas con Mathematica

Práctica 4. Representaciones gráficas en el plano

Francisco Javier Pérez González
Departamento de Análisis Matemático
Universidad de Granada

El comando Plot[ ]

Uno de los aspectos más llamativos de Mathematica es su capacidad para crear fácilmente gráficos de extraordinaria complejidad. Manejando unos pocos comandos podrás hacer sorprendentes representaciones gráficas y animaciones en dos y en tres dimensiones. El comando que se utiliza para representar la gráfica de una función de una variable es Plot[funcion,{x,xmin,xmax},opciones]. Puedes representar varias funciones a la vez escribiéndolas todas en una lista Plot[{funcion1,funcion2,...},{x,xmin,xmax}].

Plot[x^2, {x, -1, 1}]

Como puedes ver, el comando Plot[ ] representa la gráfica y proporciona la salida "- Graphics - ". Mathematica almacena en esa salida toda la información de la gráfica. Solamente para satisfacer tu curiosidad vamos a ver lo que Mathematica ha guardado de la gráfica anterior.

InputForm[%]

Lo que Mathematica  ha hecho es evaluar la función (x^2) en una serie de puntos y construir una poligonal "Line[{punto1,punto2,...}]" formada por los segmentos que unen los correspondientes puntos de la gráfica. Dichos segmentos son tan pequeños que lo que se aprecia a simple vista parece una curva suave. Al final aparecen una serie de opciones del comando Plot[ ] con sus valores por defecto. Es justamente su gran cantidad de opciones lo que proporciona versatilidad y potencia al comando Plot[ ]. Aquí las tienes todas.

Options[Plot]

Aunque son muchas, en la práctica es suficiente con conocer unas pocas. Fíjate en que las opciones son reglas de sustitución de la forma

NombredeOpción -> ValordeOpción

y todas ellas tienen prefijado un valor por defecto. Si no especificas una determinada opción, Mathematica supone que quieres utilizar el valor por defecto de la misma. Por ejemplo, Mathematica presupone que no quieres enmarcar la gráfica "Frame->False" (puedes enmarcarla con "Frame->True") ni poner etiquetas a los ejes "AxesLabel->None" (puedes ponerlas con "AxesLabel->{"etiqueta eje X","etiqueta eje Y"}").  Los posibles valores de una opción debes buscarlos en la ayuda del programa. Cuando el valor de una opción es "Automatic" eso significa que se elige por un algoritmo interno. Vamos a ver las opciones del comando Plot[ ] que se usan con más frecuencia.

PlotRange

Esta opción permite controlar el intervalo del eje de ordenadas donde se representará la función. Su valor por defecto es "PlotRange->Automatic" lo que indica que al hacer una representación gráfica, Mathematica representará las partes que considera "más interesantes'' de la misma. Si la función crece muy rápidamente Mathematica puede cortar la gráfica y no representar las partes donde la función toma valores muy grandes.

Plot[Exp[x^3], {x, -1.5, 1.5}]

En esta gráfica Mathematica no ha representado todos los valores de la función.

PlotRange->All es la forma de decirle a Mathematica que muestre el intervalo completo del eje de ordenadas donde toma valores la función.

Plot[Exp[x^3], {x, -1.5, 1.5}, PlotRange -> All];

Ahora están representados todos los valores que toma la función. Puedes apreciar que en la gráfica anterior Mathematica suprimió una parte "poco interesante" de la misma para poder mostrar mejor otras partes que consideró de "mayor interés". Observa también la notable diferencia de escalas en los ejes.

Con PlotRange->{ymin,ymax} puedes controlar exactamente el rango de valores de la función que se representará en la gráfica.

Plot[Exp[x^3], {x, -1.5, 1.5}, PlotRange -> {0, 2.5}];

Ahora vas a ver cómo con PlotRange->{{xmin,xmax},{ymin,ymax}} puedes mostrar detalles de una gráfica; algo parecido a "hacer zoom'' sobre ella.

Plot[x*Sin[1/x], {x, -1, 1}];

La parte más interesante de la gráfica está en los valores próximos a cero.

Plot[x*Sin[1/x], {x, -1, 1}, 
      PlotRange -> {{-0.1, 0.1}, {-0.1, 0.1}}];

PlotPoints

Esta opción permite controlar el número de puntos que usa inicialmente el algoritmo interno de Mathematica para representar la gráfica. Su valor por defecto es "PlotPoints->25". Cuando una función oscila mucho puede ser conveniente aumentar este número.

Plot[x*Sin[1/x], {x, -1, 1}, 
      PlotRange -> {{-0.1, 0.1}, {-0.1, 0.1}}, PlotPoints -> 150];

Puedes modificar el tamaño de una gráfica seleccionándola con el ratón y arrastrando uno cualquiera de los puntos de control.

AspectRatio

Esta opción permite controlar la escala, es decir la razón "altura/anchura", con la que se representa la gráfica. Por defecto Mathematica elige, por razones de apariencia estéticas, la inversa de la razón aúrea "AspectRatio->1/GoldenRatio" (GoldenRatio = ((1 + (Sqrt[5]))/2)). Esta opción es apropiada la mayoría de las veces, pero no lo es cuando queremos representar ciertas curvas con ejes de simetría y queremos que se vean como realmente son. En la celda siguiente representamos juntas las gráficas de las funciones (Sqrt[1 - (x^2) ]) y -(Sqrt[1 - (x^2)]) en el intervalo [-1,1] para obtener la circunferencia unidad en el plano.

Plot[{(Sqrt[1 - (x^2) ]), -(Sqrt[1 - (x^2) ])}, {x, -1, 1}];

Esto parece una elipse y no una circunferencia. Para que se vea una circunferencia basta escribir "AspectRatio->Automatic" esto hace que Mathematica determine la razónn "altura/anchura'' teniendo en cuenta los valores de los puntos de la gráfica que se va a representar. Si dicha gráfica tiene igual anchura que altura esto hace que se ajuste la escala "altura/anchura'' igual a 1. Con "AspectRatio->1" le pedimos a Mathematica que represente un gráfico con anchura y altura iguales sin tener en cuenta los valores de los puntos de la gráfica que se va a representar (prueba a representar una elipse con esa opción y parecerá una circunferencia). En algunos casos es indiferente usar "AspectRatio->Automatic" o "AspectRatio->1" pero en otros no. Como regla, es preferible usar "AspectRatio->Automatic".

Plot[{-(Sqrt[1-(x^2)]),(Sqrt[1-(x^2)])},{x, -1, 1},AspectRatio -> Automatic];

PlotStyle

Esta opción permite, entre otras cosas, controlar el color y el grosor de las líneas de una gráfica. El color puedes especificarlo de la siguiente forma.

PlotStyle->RGBColor[número1,número2,número3]

Esto permite escoger un color en función de la cantidad de rojo (número1), verde (número2) y azul (número3), donde los números pueden tomar cualquier valor entre 0 y 1. También puedes especificar el color de la forma:

PlotStyle->Hue[arg]

donde "arg'' puede tomar cualquier valor numérico. La función "Hue" es periódica con período 1, Hue[x]=Hue[x+1], y asigna a cada valor de su argumento un color desde "Hue[0]" que es rojo, siguiendo los colores del arco iris, anaranjado, amarillo, verde, azul, añil y violeta, y regresando al rojo "Hue[1]".

El grosor se especifica con "Thickness[número]" donde el grosor viene expresado como una fracción de la anchura total de la gráfica. Por ejemplo, para que las líneas de la gráfica tengan un grosor del 2% de su anchura escribimos "PlotStyle->Thickness[0.02]". 
Para especificar varios valores de la opción "PlotStyle" debemos escribirlas todas en una lista. Por ejemplo, para especificr el color y el grosor de las líneas escribimos "PlotStyle->{Hue[0],Thickness[0.02]}".

Plot[Cos[x], {x, 0, 2 Pi}, 
        PlotStyle -> {Thickness[0.01], Hue[ .64]}];

Si representas varias funciones a la vez puedes dar opciones para cada una de ellas escribiéndolas en una lista.

Plot[{Cos[x], Sin[x]}, {x, 0, 2 Pi}, 
        PlotStyle -> {Thickness[0.01], Thickness[0.02]}];

Plot[{Cos[x], Sin[x]}, {x, 0, 2 Pi}, 
        PlotStyle -> {{Thickness[0.01], Hue[0]}, {Thickness[0.02], 
              Hue[ .14]}}];

El comando Show[ ]

La ejecución de gráficas puede ser lenta y más si son tridimensionales. Para ahorrar tiempo es buena idea asignar nombre a las gráficas, lo que permite mostrarlos y modificarlos después con el comando Show[graphics,options] sin necesidad de generarlos de nuevo. Además con el comando Show[ ] puedes representar varias gráficas superpuestas.

g1 = Plot[Sin[x] + Sin[2 x], {x, 0, 2 Pi}, 
            PlotStyle -> {Hue[0], Thickness[ .01]}];
g2 = Plot[Sin[x], {x, 0, 2  Pi}, 
          PlotStyle -> {Hue[0.25], Thickness[ .013]}];
g3 = Plot[Sin[x] + Sin[4  x], {x, 0, 2  Pi}, 
          PlotStyle -> {Hue[0.64], Thickness[ .017]}];
Show[g1, g2, g3];

Las opciones de Show[ ] son las mismas opciones de Graphics[ ].

Options[Graphics]

Las opciones que se especifican en el comando Show[ ] prevalecen sobre otras posibles opciones anteriores del mismo tipo.

\(graf1 = 
        Plot[Sin[x], {x, \(-Pi\), Pi}, 
          Ticks -> {{\(-2.5\), \(-1.5\), 1.5, 2.5}, Automatic}];  (*\ 
        especificamos\ las\ marcas\ que\ queremos\ en\ el\ eje\ de\ abscisas\ 
          y\ dejamos\ que\ Mathematica\ las\ represente\ a\ su\ manera\ en\ el
          \ eje\ de\ ordenadas\ *) 
Show[graf1, Ticks -> None]; 
      \  (*\ quitamos\ las\ marcas\ en\ los\ dos\ ejes\ *) \)

El comando Show[ ] no tiene opciones para controlar el color o el grosor de la línea de los gráficos que previamente has generado. Puedes conseguirlo de una forma indirecta como te indico a continuación.

\(g4 = 
      Show[g1, g2, g3] /. {Hue[x_] -> RGBColor[0, 0, 0], 
          Thickness[x_] -> Thickness[0.007]};  (*\ 
      le\ decimos\ a\ Mathematica\ que\ sustituya\ los\ valores\ de\ Hue[]\ y
        \ de\ Thickness[]\ de\ cada\ gráfica\ por\ RGBColor[0, 0, 0]\ 
        y\ Thickness[0.007]\ *) 
Show[g4]; \)

En casos como el anterior lo que nos interesa es la última gráfica y no la primera. Podemos pedirle a Mathematica que no muestre una gráfica en pantalla. Para eso se usa la opción DisplayFunction->Identity lo que nos obliga después a poner DisplayFunction->$DisplayFunction (que es la opción por defecto en los comandos gráficos) con lo que le decimos a Mathematica que muestre la gráfica en pantalla. Observa la diferencia.

\(\(g4 = 
      Show[g1, g2, g3, DisplayFunction -> Identity] /. {
          Hue[x_] -> RGBColor[0, 0, 0], 
          Thickness[x_] -> Thickness[0.007]};  (*\ 
      esta\ gráfica\ no\ se\ representa\ *) 

    Show[g4, DisplayFunction -> $DisplayFunction]; 
    \  (*\ pero\ esta\ sí\ *) \)\)

Animaciones gráficas

Es muy fácil hacer animaciones gráficas con Mathematica para visualizar cómo evoluciona la gráfica de una función que depende de un parámetro. Por ejemplo, la función Sin[x + n] depende del parámetro n. Podemos representar su gráfica para distintos valores de n y con ello logramos una buena visualización de su evolución (que en este casó será una onda que se desplaza).  Para que una animación tenga calidad es necesario que todos los gráficos individuales tengan el mismo tamaño, lo que se logra fijando el mismo intervalo en el eje de abscisas, {x,a,b}, y haciendo que se representen en el mismo intervalo del eje de ordenadas PlotRange->{c,d}. Podemos también dar un color a cada gráfico en función del parámetro n lo que puede ser útil para identificar cada uno de ellos. Para ver la animación, cuando se hayan representado las gráficas selecciona una de ellas con el ratón y haz doble clic. En la esquina inferior izquierda de la pantalla aparecen unos botones que permiten controlar la velocidad de la animación. Para hacer una animación podemos usar el comando Table[ ].

\(\(\(Table[
	
      Plot[Sin[x + n], {x, 0, 4  Pi}, PlotRange -> {\(-1.1\), 1.1}, 
        PlotStyle -> Hue[n]], 
					{n, 0, 2  Pi, Pi/10}
					]; 
    \)
 (*\ observa\ la\ forma\ de\ escribir\ el\ código\ para\ que\ 
        se\ lea\ mejor\ *) \)\)

Ejercicio 1

Ejercicio 2

El comando ParametricPlot[ ]

Una curva en el plano puede definirse por medio de una función γ(t) = (x(t), y(t)) donde x(t),  y(t) son funciones continuas definidas en un intervalo [a, b]. La curva así definida es el conjunto \(TraditionalForm
      \`Γ = {\((x(t), y(t)}\) : t ∈ \([a, b]\)}\). Se dice que dicha curva está dada en forma paramétrica. Esta es la forma más general de dar una curva en el plano. Observa que la gráfica de una función f : [a, b] -> ℝ es la curva dada por las ecuaciones paramétricas γ(t) = (t, f(t)) para t ∈ [a, b]. Para representar gráficamente una curva dada en ecuaciones paramétricas se usa el comando

ParametricPlot[{x[t],y[t]},{t,a,b}]

Puedes ver las opciones que tiene este comando.

Options[ParametricPlot]

Aquí tienes algunos ejemplos.

ParametricPlot[{Cos[t], Sin[t]}, {t, 0, 2 Pi}, 
        AspectRatio -> Automatic];

ParametricPlot[{Cos[3 t], Sin[5 t + 3]}, {t, 0, 2 Pi}, 
        PlotStyle -> {Hue[ .25], Thickness[ .006]}] ;

Para terminar, aquí tienes algunas curvas planas interesantes.

Astroide. Es la curva trazada por un punto fijo de un círculo de radio r que rueda sin deslizar dentro de otro círculo fijo de radio 4r. Sus ecuaciones paramétricas son.

ParametricPlot[{Cos[t]^3, Sin[t]^3}, {t, 0, 2  Pi}, 
      AspectRatio -> Automatic];

Cardiode. Es la curva trazada por un punto fijo de un círculo de radio r que rueda sin deslizar alrededor de otro círculo fijo del mismo radio. Sus ecuaciones paramétricas son.

ParametricPlot[(1 + Cos[t]) {Cos[t], Sin[t]}, {t, 0, 2  Pi}, 
      AspectRatio -> Automatic];

Lemniscata de Bernoulli. Es el lugar geométrico de los puntos del plano P, cuyo producto de distancias a dos puntos fijos (Subscript[F, 1]) y  (Subscript[F, 2]), llamados focos, verifica la igualdad \(TraditionalForm
      \`\( | P - F\_1 | \  | P - F\_2 | \) = 
        1\/4 | F\_1 - F\_2\( | \^2\)\). En coordenadas cartesianas esta curva viene dada por la ecuación ((((x^2) + (y^2)))^2) = (x^2) - (y^2). Aquí tienes sus ecuaciones paramétricas.

ParametricPlot[
      Cos[t]/(1 + Sin[t]^2) {1, Sin[t]}, {t, 0, 2  Pi}, 
      AspectRatio -> Automatic];

Espiral equiangular. También llamada espiral logarítmica. Es aquella espiral en la que el radio vector corta a la curva en un ángulo constante α. Sus ecuaciones paramétricas son.

\(α = Pi/2 - 0.2; 

    ParametricPlot[Exp[t*Cot[α]] {Cos[t], Sin[t]}, {t, 0, 4  Pi}, 
      AspectRatio -> Automatic]; 
Clear[α]\)

Cicloide. También conocida como tautocrona o braquistocrona. Es la curva que describiría una chincheta clavada en una rueda que avanza girando sin deslizar. Sus ecuaciones paramétricas son.

ParametricPlot[{t - Sin[t], 1 - Cos[t]}, {t, 0, 2  Pi}, 
      AspectRatio -> Automatic];

Ejercicio 3