我在使用 pgfplots 和 TikZ 使用带有函数的exp(cos(1/x))
常规命令绘制域 (0,1) 中的函数时遇到了问题。似乎 LaTeX 在一些非常小的数字的精度方面遇到了一些问题 - 这是我当前的输出:addplot
exp(cos(deg(1/x)))
exp(1)
该函数应在和处具有最大值和最小值,exp(-1)
但其中一些没有一直达到极值。您对如何改进结果有什么建议吗?
平均能量损失
\documentclass[12pt]{article}
\usepackage{float}
\usepackage{pgfplots}
\usepackage{tikz}
\begin{document}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{axis}[
xmin=-0.01, xmax=1.05, ymin=-0.01, ymax=2.85, y=1cm/0.25, x=1cm/0.1,
grid=both,
domain=0:1,
restrict y to domain=0:3,
xtick={1},
ytick={0.36,2.7182},
yticklabels={$\exp(-1)$, $\exp(1)$},
samples=1000,
axis x line=middle, axis y line=middle, xlabel={$x$}, ylabel={$y$}]
\addplot[domain=0.00001:1, blue] {exp(cos(deg(1/x)))};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
答案1
TeX 的数学能力不足以足够准确地绘制该图形;不当然,软件可以将其拉近至接近零。
通过gnuplot
将范围限制在更合理的区间并增加样本数量,我得到了一个很好的绘图:
\documentclass[12pt]{article}
\usepackage{pgfplots}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=-0.05, xmax=1.05, ymin=-0.01, ymax=2.85, y=1cm/0.25, x=1cm/0.1,
grid=both,
domain=0.05:1,
restrict y to domain=0:3,
xtick={1},
ytick={0.36,2.7182},
yticklabels={$\exp(-1)$, $\exp(1)$},
samples=1000,
axis x line=middle, axis y line=middle, xlabel={$x$}, ylabel={$y$}]
\addplot[domain=0.03:1, blue,samples=10000] gnuplot {exp(cos(1/x))};
\end{axis}
\end{tikzpicture}
\end{document}
请注意,gnuplot
默认情况下使用弧度。您应该启用-shell-escape
此功能。
答案2
您可以创建一个参数图,将样本放置在 x\to 0 附近。在本例中,x=1、10/11、10/12、...、0.01
\documentclass[12pt]{article}
\usepackage{float}
\usepackage{pgfplots}
\usepackage{tikz}
\begin{document}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{axis}[
xmin=-0.01, xmax=1.05, ymin=-0.01, ymax=2.85, y=1cm/0.25, x=1cm/0.1,
grid=both,
xtick={1},
ytick={0.36,2.7182},
yticklabels={$\exp(-1)$, $\exp(1)$},
variable=t,
samples at={10,...,1000},
axis x line=middle, axis y line=middle, xlabel={$x$}, ylabel={$y$}]
\addplot[blue,smooth] ({10/t},{exp(cos(deg(.1*t)))});
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
答案3
这就是所谓的混叠。接近零时,该函数的有效“频率”(宽泛地使用该术语)高于您的采样率。因此,样本自然会错过曲线的有趣特征并最终看起来不正确。John Kormylo 提出的自适应采样率建议非常好。