![PGFplots 如何计算三角函数?](https://linux22.com/image/309728/PGFplots%20%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%E4%B8%89%E8%A7%92%E5%87%BD%E6%95%B0%EF%BC%9F.png)
在绘制我的图表时最后一个问题我发现我从 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.05
和w=1
)以及 的图(4.9)*x^2
:
这很难说,但如果我删除情节,4.9*x^2
你就会发现情节w=0.05
几乎完全遵循它。
这与上面的第一幅图的行为非常不同。所以我的问题是 PGFplots 如何计算诸如 、 和 之类的东西exp
,cosh
以及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}
或者,使用pgfplots
v1.11 或更新版本,新键允许我们更改键设置1范围内trig format plots
所有命令的角度格式。在这里,我在顶层使用它来更改整个文档的行为,但它也可以应用于每个轴或每个图。请注意,这只会影响'命令,而不会影响任何普通的 Ti\addplot
trig format plots=rad
pgfplots
\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
本人在评论中向我指出了这种新方法。