
Al trazar el gráfico de miúltima preguntaDescubrí que los gráficos que obtengo de PGFplots no son del todo correctos. Estaba intentando trazar (4.9/(w^2))*(cosh(w*x)-cos(w*x))
múltiples valores de w
. Con la ayuda de los usuarios 1010011010 y Enthusiastic Student pude obtener gráficos atractivos, hasta que verifiqué lo que debería obtener con WolframAlpha.
Como w
en mi fórmula anterior 0
, la función debe tener una asíntota 4.9*x^2
desde arriba. Eso no es lo que muestran los datos. Usando este código, que es esencialmente solo 1010011010 en el enlace de arriba,
\documentclass{standalone}
\usepackage{pgfplots}
\def\mycolone{yellow}
\def\mycoltwo{green}
\pgfplotsset{every axis legend/.append style={at={(.5,-.2)}, anchor=north}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=-10,xmax=10,ymin=-0.5,ymax=100,no markers, grid=both, samples=100, restrict y to domain=0:1000]
\foreach \w in {5,10,...,100} {\edef\tmp{\noexpand\addplot[\mycolone!\w!\mycoltwo, domain=-10:10]}
\pgfmathparse{\w/100}
\edef\x{\pgfmathresult}
\tmp{(4.9/((\w/100)^2))*(cosh(\w*x/100)-cos(\w*x/100))};
\edef\legendentry{\noexpand\addlegendentry{$\omega = \noexpand\pgfmathprintnumber[fixed,fixed zerofill, precision=2]{\x}$}};
\legendentry}
\addplot[draw=red, domain=-10:10] {4.9*x^2};
\end{axis}
\end{tikzpicture}
\end{document}
Obtengo las siguientes tramas.
Aquí está la trama roja
(4.9)*x^2
.
Como referencia, esto es lo que WolframAlpha me da para los valores más altos y más bajos de los w
trazados arriba ( w=0.05
y w=1
) y el gráfico de (4.9)*x^2
:
Es difícil saberlo, pero si elimino la 4.9*x^2
trama, puedes ver que la trama w=0.05
sigue prácticamente exactamente.
Este es un comportamiento muy diferente al de la primera imagen de arriba. Entonces, mi pregunta es ¿cómo calcula PGFplots cosas como exp
, cosh
y cos
, y cómo puedo obtener una mejor aproximación en el futuro?
Respuesta1
Las funciones trigonométricas de pgf
suponen entradas en grados. Para ingresar un ángulo en radianes, use el r
operador especial: reemplace cos(\w*x/100)
con cos(\w*x/100 r)
.
\documentclass{standalone}
\usepackage{pgfplots}
\def\mycolone{yellow}
\def\mycoltwo{green}
\pgfplotsset{compat=1.12,every axis legend/.append style={at={(.5,-.2)}, anchor=north}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=-10,xmax=10,ymin=-0.5,ymax=100,no markers, grid=both, samples=100, restrict y to domain=0:1000]
\foreach \w in {5,10,...,100} {\edef\tmp{\noexpand\addplot[\mycolone!\w!\mycoltwo, domain=-10:10]}
\pgfmathparse{\w/100}
\edef\x{\pgfmathresult}
\tmp{(4.9/((\w/100)^2))*(cosh(\w*x/100)-cos(\w*x/100 r))};
\edef\legendentry{\noexpand\addlegendentry{$\omega = \noexpand\pgfmathprintnumber[fixed,fixed zerofill, precision=2]{\x}$}};
\legendentry}
\addplot[draw=red, domain=-10:10] {4.9*x^2};
\end{axis}
\end{tikzpicture}
\end{document}
Alternativamente, con pgfplots
v1.11 o posterior, una nueva clave trig format plots
nos permite cambiar el formato de ángulo para todos \addplot
los comandos dentro del alcance de la configuración de clave 1 . Aquí, lo uso trig format plots=rad
en el nivel superior para cambiar el comportamiento de todo el documento, pero también se puede aplicar por eje o por gráfico. Tenga en cuenta que esto sólo afectará pgfplots
a \addplot
los comandos, no a cualquier Ti simple.kCódigo Z con funciones trigonométricas. Además, esta clave es algo experimental y es posible que no funcione correctamente con tipos de ejes más exóticos como polar
y smithchart
. El manual del paquete menciona que se ha probado solo para ejes predeterminados.
\documentclass{standalone}
\usepackage{pgfplots}
\def\mycolone{yellow}
\def\mycoltwo{green}
\pgfplotsset{
compat=1.12,
every axis legend/.append style={at={(.5,-.2)}, anchor=north},
trig format plots=rad,
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=-10,xmax=10,ymin=-0.5,ymax=100,no markers, grid=both, samples=100, restrict y to domain=0:1000]
\foreach \w in {5,10,...,100} {\edef\tmp{\noexpand\addplot[\mycolone!\w!\mycoltwo, domain=-10:10]}
\pgfmathparse{\w/100}
\edef\x{\pgfmathresult}
\tmp{(4.9/((\w/100)^2))*(cosh(\w*x/100)-cos(\w*x/100))};
\edef\legendentry{\noexpand\addlegendentry{$\omega = \noexpand\pgfmathprintnumber[fixed,fixed zerofill, precision=2]{\x}$}};
\legendentry}
\addplot[draw=red, domain=-10:10] {4.9*x^2};
\end{axis}
\end{tikzpicture}
\end{document}
Ambos métodos dan el resultado correcto:
1 Gracias aChristian Feuersänger, el pgfplots
propio autor, por señalarme este nuevo método en un comentario.