PGFplots 如何计算三角函数?

PGFplots 如何计算三角函数?

在绘制我的图表时最后一个问题我发现我从 PGFplots 获得的图表并不完全正确。我试图绘制(4.9/(w^2))*(cosh(w*x)-cos(w*x))多个值w。在用户 1010011010 和 Enthusiastic Student 的帮助下,我能够获得好看的图表 - 直到我检查我应该用 WolframAlpha 获得什么。

正如w我上面的公式中提到的那样0,函数应该4.9*x^2从上方渐近到。但数据却不是这样显示的。使用上面链接中的这段代码(本质上只是 1010011010),

\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}

我得到了以下图表。 在此处输入图片描述 这里是红色的图表(4.9)*x^2

作为参考,以下是 WolframAlpha 为我提供的w上面绘制的 的最高值和最低值(w=0.05w=1)以及 的图(4.9)*x^2在此处输入图片描述

这很难说,但如果我删除情节,4.9*x^2你就会发现情节w=0.05几乎完全遵循它。

这与上面的第一幅图的行为非常不同。所以我的问题是 PGFplots 如何计算诸如 、 和 之类的东西expcosh以及cos我将来如何获得更好的近似值?

答案1

的三角函数pgf假设输入为度。要输入弧度角,请使用特殊r运算符:替换cos(\w*x/100)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}

或者,使用pgfplotsv1.11 或更新版本,新键允许我们更改键设置1范围内trig format plots所有命令的角度格式。在这里,我在顶层使用它来更改整个文档的行为,但它也可以应用于每个轴或每个图。请注意,这只会影响'命令,而不会影响任何普通的 Ti\addplottrig format plots=radpgfplots\addplot带有触发函数的 Z 代码。此外,此键在某种程度上是实验性的,可能无法与更奇特的轴类型(如polar和)配合使用smithchart。软件包手册提到它仅针对默认轴进行了测试。

\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}

两种方法均能得出正确的结果:

在此处输入图片描述

1感谢克里斯蒂安·费尔桑格作者pgfplots本人在评论中向我指出了这种新方法。

相关内容