¿Cómo calcula PGFplots las funciones trigonométricas?

¿Cómo calcula PGFplots las funciones trigonométricas?

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 wen mi fórmula anterior 0, la función debe tener una asíntota 4.9*x^2desde 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. ingrese la descripción de la imagen aquí 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 wtrazados arriba ( w=0.05y w=1) y el gráfico de (4.9)*x^2: ingrese la descripción de la imagen aquí

Es difícil saberlo, pero si elimino la 4.9*x^2trama, puedes ver que la trama w=0.05sigue 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, coshy cos, y cómo puedo obtener una mejor aproximación en el futuro?

Respuesta1

Las funciones trigonométricas de pgfsuponen entradas en grados. Para ingresar un ángulo en radianes, use el roperador 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 pgfplotsv1.11 o posterior, una nueva clave trig format plotsnos permite cambiar el formato de ángulo para todos \addplotlos comandos dentro del alcance de la configuración de clave 1 . Aquí, lo uso trig format plots=raden 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á pgfplotsa \addplotlos 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 polary 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:

ingrese la descripción de la imagen aquí

1 Gracias aChristian Feuersänger, el pgfplotspropio autor, por señalarme este nuevo método en un comentario.

información relacionada