绘制 exp(cos(1/x)) 的图形

绘制 exp(cos(1/x)) 的图形

我在使用 pgfplots 和 TikZ 使用带有函数的exp(cos(1/x))常规命令绘制域 (0,1) 中的函数时遇到了问题。似乎 LaTeX 在一些非常小的数字的精度方面遇到了一些问题 - 这是我当前的输出:addplotexp(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 提出的自适应采样率建议非常好。

相关内容