pgfplots:尺寸太大,没有明显的大数字

pgfplots:尺寸太大,没有明显的大数字

以下 MWE 导致错误Dimension too large。将域的上限更改为较小的值(如120gets)可使此错误消失。

\documentclass{article}

\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
  \begin{axis} [
        domain=-20:150,
      ]
    \addplot+ {exp(-x*x)};
  \end{axis}
\end{tikzpicture}

\end{document}

但我无法理解为什么。计算中应涉及的最大数字是150^2,这完全在pgfplots' 范围内(实际上绘图x*x工作得很好)。我的猜测是,这与 的实现有关,exp这使得在计算 的过程中pgfplots尝试计算。但是,绘图仍然显示得很好,所以我不确定。exp(150^2)exp(-150^2)

造成此错误的原因是什么?我该如何避免它?


(当然,我想要绘制的真正函数要复杂一些,所以仅仅手动绘制y = 0x > 50类似的方法是行不通的。我需要解决/规避潜在的问题。)

答案1

正如我上面评论的那样,鼠尾草是处理更复杂数学的好工具。因为它可以让你访问 CAS 和 Python 编程语言。下面是一个快速sagetex实现:

\documentclass[11pt,border=1mm]{standalone}
\usepackage{sagetex}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{sagesilent}
LowerX = -20
UpperX = 150
LowerY = -.1
UpperY = 1.1
step = .13
t = var('t')
g(x)= e^(-x^2)

x_coords = [t for t in srange(LowerX,UpperX,step)]
y_coords = [g(t).n(digits=6) for t in srange(LowerX,UpperX,step)]

output = r"\begin{tikzpicture}"
output += r"\begin{axis}[xmin=%f,xmax=%f,ymin= %f,ymax=%f,"%(LowerX,UpperX,LowerY, UpperY)
output += r"xlabel=$x$,ylabel=$y$,axis x line=middle,axis y line=middle,"
output += r"grid style=dashed]"
output += r"\addplot[thin, blue, unbounded coords=jump] coordinates {"
for i in range(0,len(x_coords)-1):
    if (y_coords[i])<LowerY or (y_coords[i])>UpperY:
        output += r"(%f , inf) "%(x_coords[i])
    else:
        output += r"(%f , %f) "%(x_coords[i],y_coords[i])
output += r"};"
output += r"\end{axis}"
output += r"\end{tikzpicture}"
\end{sagesilent}
\sagestr{output}
\end{document}

Cocalc 中的输出如下: 在此处输入图片描述

sagetex包使用贤者 CAS。这不是 LaTeX 发行版的一部分。最简单的入门方法是通过免费的可钙帐户。

答案2

  • 没有答案。
  • 只是为了确保没有误解。
  • 我在 MS Excel 中绘制了您的示例(请注意小数点分隔符是逗号,德语设置)。
  • 我的截图是否符合你的预期(或者我犯了一个错误)?

在此处输入图片描述

在此处输入图片描述


更新 1

  • 对版本/编译器有某种依赖性。
  • 以下面的代码为例。

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.17}

\begin{document}

\begin{tikzpicture}
  \begin{axis} [
        domain = 120:130, % 120:121 works
        samples = 10,
      ]
    \addplot+ {exp(-x*x)};
  \end{axis}
\end{tikzpicture}

\end{document}
  • TeXLive 2020,pdfLaTeX:错误
  • TeXLive 2020、LuaLaTeX:作品
  • TeXLive 2021,pdfLaTeX:错误
  • TeXLive 2021,LuaLaTeX:作品
  • TeXLive 2021,LuaLaTeX:使用时出错\pgfplotsset{compat=1.10}

在此处输入图片描述

更新 2

150^2似乎有效!

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.18}

\begin{document}

\begin{tikzpicture}
  \begin{axis} [
        domain = 140:150,
        samples = 10,
      ]
    \addplot+ {x^2};
  \end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案3

当我正确理解你的问题时,答案是:这种类型的问题在 TeX.SX 上很常见。这里可能的解决方案来规避问题。有关详细信息,请查看代码中的注释。

这里列出了我回答过的类似问题,以及一些(最有可能)解决该问题的其他可能性。

% used PGFPlots v1.18.1
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    \pgfplotsset{
        % When using `compat` level 1.11 or lower TeX will be used as
        % calculation engine. This includes not stating `compat` at all.
        % Stating a `compat` level 1.12 or higher *and* compiling/TeXing with
        % LuaLaTeX uses Lua as calculation engine (when the equation satisfies
        % some requirements)
        % --> using 1.11 results in a "Dimension too large" error
        % --> using 1.12 and compiling with LuaLaTeX works just fine
        compat=1.12,
    }
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        domain=-20:150,
    ]
        \addplot {exp(-x^2)};
    \end{axis}
\end{tikzpicture}
\end{document}

该图显示了上述代码的结果

相关内容