精度提升--序列图

精度提升--序列图

我想绘制一个连续复利序列的图形,该序列具有一定的年利率和投入资本。但是,生成的图形似乎精度不够(见下面的图形波动)。

输出:

enter image description here

梅威瑟:

\documentclass[border=5pt]{standalone}%

\usepackage{tikz,pgfplots}


\begin{document}
\begin{tikzpicture}[font=\scriptsize]
\begin{axis}[%
    axis x line=bottom,
    axis y line=center,
    tick align=outside,
    axis y discontinuity=crunch,
    xtickmax=55,
    ytickmin=2100,
    ytickmax=2103,
    ymin=2098,
    enlargelimits=true,
    mark size=1pt,
    yticklabel style={/pgf/number format/1000 sep={\,}}
    ]
\addplot[%
    mark=none,
    domain=1:55,
    samples=55,
    only marks,
    orange!50,
    draw=black] {2000*(1+0.05/x)^x};
\end{axis}
\end{tikzpicture}
\end{document}

问题:

有没有什么(简单的)方法可以提高 -command 的精度\addplot(可能不需要 gnuplot)?

答案1

这里有一种方法xint进行计算。

幸运的是,只需要整数(半整数也可以)指数。事实上,xint仍然需要增加对 log 和 exp 等数学函数的支持。

优点是它适用于所有引擎(我使用了 pdflatex)。

\documentclass[border=5pt]{standalone}

\usepackage{tikz,pgfplots}

\usepackage{xintexpr}
\begin{document}
\begin{tikzpicture}[font=\scriptsize]
\begin{axis}[%
    axis x line=bottom,
    axis y line=center,
    tick align=outside,
    axis y discontinuity=crunch,
    xtickmax=55,
    ytickmin=2100,
    ytickmax=2103,
    ymin=2098,
    enlargelimits=true,
    mark size=1pt,
    yticklabel style={/pgf/number format/1000 sep={\,}}
    ]
\xintDigits:=8;% no need to use 16 digits of precision
\addplot[%
    mark=none,
%    domain=1:55,
%    samples=55,
    only marks,
    orange!50,
    draw=black] coordinates {%
      \xintthecoords% (converts x1,y1,x2,y2,... into (x1, y1) (x2, y2)...
                    %  format, as expected by "coordinates")
      \xintfloatexpr 
          seq((x,2000*(1+0.05/x)^x), x=1..55)
          % works with xint float engine
          % because exponent is integer (or half-integer)
      \relax
    };
\end{axis}
\end{tikzpicture}
\end{document}

enter image description here

答案2

警告:此答案基于 LuaLaTeX。

pgfplots警告您一个重要细节:您应该使用较新的兼容性设置。只需将警告中的行复制到文件中即可解决波动问题(因为pgpfplots将使用 Lua 来计算点)。

compatibility mode

\documentclass{article}%

\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.16}

\begin{document}
\begin{tikzpicture}[font=\scriptsize]
\begin{axis}[%
    axis x line=bottom,
    axis y line=center,
    tick align=outside,
    axis y discontinuity=crunch,
    xtickmax=55,
    ytickmin=2100,
    ytickmax=2103,
    ymin=2098,
    enlargelimits=true,
    mark size=1pt,
    yticklabel style={/pgf/number format/1000 sep={\,}}
    ]
\addplot[%
    mark=none,
    domain=1:55,
    samples=55,
    only marks,
    orange!50,
    draw=black] {2000*(1+0.05/x)^x};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容